Improve ctags and company configuration

Set ctags command based on major mode
Set different company backends based on major mode
Completely abandon robe in favour of ctags for Ruby
Set up Erlang configuration
This commit is contained in:
Maciej 2019-04-08 11:23:36 +03:00
parent 4d3683eb4a
commit d3c2c17ff9
Signed by: maciej
GPG key ID: 41D62D42D3B0D765
10 changed files with 141 additions and 57 deletions

1
.gitignore vendored
View file

@ -8,3 +8,4 @@ recentf
TAGS TAGS
eshell/history eshell/history
tramp tramp
url/*

View file

@ -23,62 +23,26 @@
(global-company-mode 1) (global-company-mode 1)
(yas-global-mode 1) (yas-global-mode 1)
(setq-default company-backends '(company-tern ;; Javascript ;; Absolute defaults for company mode
(company-yasnippet ;; Snippets for all programming languages (setq-default company-backends
company-etags) ;; Ctags for any language '((company-files ; files & directory
company-elisp ; Emacs Lisp company-keywords ; keywords
company-clang company-cmake ;; C company-capf
company-lsp ;; Language server protocol )
company-ansible ;; Ansible (company-dabbrev company-abbrev)
alchemist-company ;; Elixir
company-racer ;; Rust
company-web-html ;; HTML
(company-dabbrev-code company-dabbrev company-abbrev) ;; abbrev
company-capf ;; Backend for default complete-at-point function
company-keywords ;; Keywords for all languages
company-files ; files & directory
)) ))
(setq-default company-lsp-cache-candidates 1 ;; Cache LSP results (setq-default
company-lsp-cache-candidates 1 ;; Cache LSP results
company-lsp-async 1 ;; Fetch LSP results asynchronously company-lsp-async 1 ;; Fetch LSP results asynchronously
) )
;;; Yasnippet configuration ;;; Yasnippet configuration
(define-key prog-mode-map (kbd "C-c y") 'company-yasnippet) (define-key prog-mode-map (kbd "C-c y") 'company-yasnippet)
(define-key prog-mode-map (kbd "<f13>") 'company-yasnippet) (define-key prog-mode-map (kbd "<f13>") 'company-indent-or-complete-common)
(define-key prog-mode-map (kbd "TAB") 'company-yasnippet)
(define-key text-mode-map (kbd "C-c y") 'company-yasnippet) (define-key text-mode-map (kbd "C-c y") 'company-yasnippet)
(define-key text-mode-map (kbd "<f13>") 'company-yasnippet) (define-key text-mode-map (kbd "<f13>") 'company-indent-or-complete-common)
(define-key text-mode-map (kbd "TAB") 'company-indent-or-complete-common)
;; Sentinel function for capturing ctags
(defun ctags-process-callback (process event)
"Show status of asynchronous ctags-process after it finishes."
(cond
((string-equal event "finished\n")
(message "Creating tag files...completed")
(kill-buffer (get-buffer "*ctags*"))
(visit-tags-table (format "%sTAGS" (projectile-project-root))))
(t
(message "Creating tags file...failed")
(pop-to-buffer (get-buffer "*ctags*"))
)))
;; (setq ctags-commands
;; '(("emacs-lisp-mode" . "Some string"))
;; ("enh-ruby-mode" . "Some other string")
;; )
;; (defun buffer-mode-as-string (&optional-buffer)
;; "Get current mode from &OPTIONAL-BUFFER or current buffer."
;; (when option)
;; (message "%s"
;; (cdr
;; (assoc
;; (format "%s" (buffer-local-value 'major-mode
;; (current-buffer))) ctags-commands)))
;; (message (format "%s" (buffer-local-value 'major-mode (current-buffer))))
;; (message ())

30
08ctags.el Normal file
View file

@ -0,0 +1,30 @@
;; Do not mix ctags between folders
(setq tags-add-tables nil)
;; Sentinel function for capturing ctags
(defun ctags-process-callback (process event)
"Show status of asynchronous ctags-process after it finishes."
(cond
((string-equal event "finished\n")
(message "Creating tag files...completed")
(kill-buffer (get-buffer "*ctags*"))
(visit-tags-table (format "%sTAGS" (projectile-project-root))))
(t
(message "Creating tags file...failed")
(pop-to-buffer (get-buffer "*ctags*"))
)))
(setq ctags-refresh-command
(format "ctags -e -R -f %sTAGS %s."
(projectile-project-root) (projectile-project-root)))
(defun refresh-ctags ()
"Refresh ctags according to currently set command."
(interactive)
(message "Starting ctags process")
(start-process-shell-command "ctags" "*ctags*" ctags-refresh-command)
(set-process-sentinel (get-process "ctags") 'ctags-process-callback))
;; Ctags bindings
(define-key prog-mode-map (kbd "C-c E") 'refresh-ctags)

View file

@ -1,6 +1,11 @@
(defun activate-emacs-lisp-mode () (defun activate-emacs-lisp-mode ()
"Goodies for editing emacs files." "Goodies for editing emacs files."
(set-indent 2) ;; Default indentation of 2 characters (set-indent 2) ;; Default indentation of 2 characters
(column-enforce-n 80)
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(company-elisp company-yasnippet))
) )
(add-hook 'emacs-lisp-mode-hook 'activate-emacs-lisp-mode) (add-hook 'emacs-lisp-mode-hook 'activate-emacs-lisp-mode)

View file

@ -1,2 +1,13 @@
(add-hook 'elixir-mode 'alchemist-mode) (add-hook 'elixir-mode-hook 'alchemist-mode)
(add-hook 'elixir-mode 'ruby-end-mode) (add-hook 'elixir-mode-hook 'ruby-end-mode)
(defun activate-elixir-mode ()
"All things Elixir."
(set-indent 2)
(column-enforce-n 80)
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(alchemist-company company-yasnippet)))
(add-hook 'alchemist-mode-hook 'activate-elixir-mode)

44
20erlang.el Normal file
View file

@ -0,0 +1,44 @@
;; Add erlang installation to load path
(setq erlang-asdf-root "/Users/maciej/.asdf/installs/erlang/21.2.6/")
(setq load-path
(cons (format "%slib/tools-3.0.2/emacs" erlang-asdf-root)
load-path))
(require 'erlang-start)
(setq erlang-root-dir erlang-asdf-root)
(setq exec-path (cons (format "%sbin" erlang-asdf-root) exec-path))
(setq erlang-man-root-dir (format "%sman" erlang-asdf-root))
;; Flycheck checker for Erlang
(flycheck-define-checker erlang-otp
"An Erlang syntax checker using the Erlang interpreter."
:command ("erlc" "-o" temporary-directory "-Wall"
"-I" "../include" "-I" "../../include"
"-I" "../../../include" source)
:error-patterns
((warning line-start (file-name) ":" line ": Warning:" (message) line-end)
(error line-start (file-name) ":" line ": " (message) line-end))
:modes (erlang-mode))
(defun activate-erlang-mode ()
"All things for Erlang."
(flycheck-select-checker 'erlang-otp)
;; Set specific ctags command
(setq-local
ctags-refresh-command
(format
"ctags -e -R --languages=erlang -f %sTAGS %s. %slib/stdlib-* %slib/kernel-*"
(projectile-project-root) (projectile-project-root)
erlang-asdf-root erlang-asdf-root)
(add-to-list (make-local-variable 'company-backends)
'(company-etags company-yasnippet))
)
;; Company list override
(add-to-list (make-local-variable 'company-backends) 'company-etags))
(add-hook 'erlang-mode-hook 'activate-erlang-mode)

View file

@ -33,7 +33,15 @@
(column-enforce-n 80)) (column-enforce-n 80))
;; Do not insert magic encoding comment at the begining of each file ;; Do not insert magic encoding comment at the begining of each file
(setq ruby-insert-encoding-magic-comment nil)) (setq ruby-insert-encoding-magic-comment nil)
;; Company list override
(add-to-list (make-local-variable 'company-backends) '(company-etags company-yasnippet))
;; Set specific ctags command
(setq-local ctags-refresh-command
(format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)"
(projectile-project-root) (projectile-project-root))))
(add-hook 'enh-ruby-mode-hook 'activate-ruby-mode) (add-hook 'enh-ruby-mode-hook 'activate-ruby-mode)

View file

@ -2,7 +2,12 @@
"All things for Rust mode" "All things for Rust mode"
(interactive) (interactive)
(set-indent 4) (set-indent 4)
(column-enforce-n 99)) (column-enforce-n 99)
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(company-capf company-yasnippet))
)
(add-hook 'rust-mode-hook 'activate-rust-mode) (add-hook 'rust-mode-hook 'activate-rust-mode)
(add-hook 'rust-mode-hook 'racer-mode) (add-hook 'rust-mode-hook 'racer-mode)

View file

@ -4,3 +4,17 @@
;; Tern is used for completion ;; Tern is used for completion
(add-hook 'js2-mode-hook 'tern-mode) (add-hook 'js2-mode-hook 'tern-mode)
(defun activate-js2-mode ()
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(company-tern company-yasnippet)))
(add-hook 'js2-mode-hook 'activate-js2-mode)
(defun activate-web-mode ()
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(company-web-html company-yasnippet)))
(add-hook 'web-mode-hook 'activate-web-mode)

View file

@ -106,6 +106,7 @@
(load "~/.emacs.d/06company-yasnippet.el") (load "~/.emacs.d/06company-yasnippet.el")
(load "~/.emacs.d/07projectile.el") (load "~/.emacs.d/07projectile.el")
(load "~/.emacs.d/08purpose.el") (load "~/.emacs.d/08purpose.el")
(load "~/.emacs.d/08ctags.el")
(load "~/.emacs.d/09ispell.el") (load "~/.emacs.d/09ispell.el")
(load "~/.emacs.d/10themes.el") (load "~/.emacs.d/10themes.el")
@ -114,6 +115,7 @@
(load "~/.emacs.d/20ruby.el") (load "~/.emacs.d/20ruby.el")
(load "~/.emacs.d/20web.el") (load "~/.emacs.d/20web.el")
(load "~/.emacs.d/20elixir.el") (load "~/.emacs.d/20elixir.el")
(load "~/.emacs.d/20erlang.el")
(load "~/.emacs.d/20sh.el") (load "~/.emacs.d/20sh.el")
(load "~/.emacs.d/20rust.el") (load "~/.emacs.d/20rust.el")