diff --git a/.gitignore b/.gitignore index 85fea45..5c73e78 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ recentf TAGS eshell/history tramp +url/* diff --git a/06company-yasnippet.el b/06company-yasnippet.el index 31e3795..3dc5faa 100644 --- a/06company-yasnippet.el +++ b/06company-yasnippet.el @@ -23,62 +23,26 @@ (global-company-mode 1) (yas-global-mode 1) -(setq-default company-backends '(company-tern ;; Javascript - (company-yasnippet ;; Snippets for all programming languages - company-etags) ;; Ctags for any language - company-elisp ; Emacs Lisp - company-clang company-cmake ;; C - company-lsp ;; Language server protocol - company-ansible ;; Ansible - 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 - )) +;; Absolute defaults for company mode +(setq-default company-backends + '((company-files ; files & directory + company-keywords ; keywords + company-capf + ) + (company-dabbrev company-abbrev) + )) -(setq-default company-lsp-cache-candidates 1 ;; Cache LSP results - company-lsp-async 1 ;; Fetch LSP results asynchronously +(setq-default + company-lsp-cache-candidates 1 ;; Cache LSP results + company-lsp-async 1 ;; Fetch LSP results asynchronously ) ;;; Yasnippet configuration (define-key prog-mode-map (kbd "C-c y") 'company-yasnippet) -(define-key prog-mode-map (kbd "") 'company-yasnippet) +(define-key prog-mode-map (kbd "") '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 "") 'company-yasnippet) - -;; 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 ()) +(define-key text-mode-map (kbd "") 'company-indent-or-complete-common) +(define-key text-mode-map (kbd "TAB") 'company-indent-or-complete-common) diff --git a/08ctags.el b/08ctags.el new file mode 100644 index 0000000..fc9155e --- /dev/null +++ b/08ctags.el @@ -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) diff --git a/20elisp.el b/20elisp.el index 30ff3d4..52148a9 100644 --- a/20elisp.el +++ b/20elisp.el @@ -1,6 +1,11 @@ (defun activate-emacs-lisp-mode () "Goodies for editing emacs files." (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) diff --git a/20elixir.el b/20elixir.el index 5c4ee70..3b880ec 100644 --- a/20elixir.el +++ b/20elixir.el @@ -1,2 +1,13 @@ -(add-hook 'elixir-mode 'alchemist-mode) -(add-hook 'elixir-mode 'ruby-end-mode) +(add-hook 'elixir-mode-hook 'alchemist-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) diff --git a/20erlang.el b/20erlang.el new file mode 100644 index 0000000..01c99fa --- /dev/null +++ b/20erlang.el @@ -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) diff --git a/20ruby.el b/20ruby.el index d138ba7..514529b 100644 --- a/20ruby.el +++ b/20ruby.el @@ -8,8 +8,8 @@ (message "Starting ctags process") (start-process-shell-command "ctags" "*ctags*" - (format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" - (projectile-project-root) (projectile-project-root))) + (format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" + (projectile-project-root) (projectile-project-root))) (set-process-sentinel (get-process "ctags") 'ctags-process-callback)) ;; Ruby specific key bindings @@ -33,7 +33,15 @@ (column-enforce-n 80)) ;; 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) diff --git a/20rust.el b/20rust.el index f562cd3..b627b73 100644 --- a/20rust.el +++ b/20rust.el @@ -2,7 +2,12 @@ "All things for Rust mode" (interactive) (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 'racer-mode) diff --git a/20web.el b/20web.el index c68540a..0ab43fe 100644 --- a/20web.el +++ b/20web.el @@ -4,3 +4,17 @@ ;; Tern is used for completion (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) diff --git a/init.el b/init.el index 8f4b580..e844ad6 100644 --- a/init.el +++ b/init.el @@ -106,6 +106,7 @@ (load "~/.emacs.d/06company-yasnippet.el") (load "~/.emacs.d/07projectile.el") (load "~/.emacs.d/08purpose.el") +(load "~/.emacs.d/08ctags.el") (load "~/.emacs.d/09ispell.el") (load "~/.emacs.d/10themes.el") @@ -114,6 +115,7 @@ (load "~/.emacs.d/20ruby.el") (load "~/.emacs.d/20web.el") (load "~/.emacs.d/20elixir.el") +(load "~/.emacs.d/20erlang.el") (load "~/.emacs.d/20sh.el") (load "~/.emacs.d/20rust.el")