Merge pull request #1 from maciej-szlosarczyk/add-gg-tags-and-better-erlang-version-management
Add gg tags and better erlang version management
This commit is contained in:
commit
42ff73fdd7
6 changed files with 96 additions and 28 deletions
6
02macros.el
Normal file
6
02macros.el
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
(defmacro -> (&rest body)
|
||||||
|
"Clojure -> macro for BODY."
|
||||||
|
(let ((result (pop body)))
|
||||||
|
(dolist (form body result)
|
||||||
|
(setq result (append (list (car form) result)
|
||||||
|
(cdr form))))))
|
||||||
41
08ctags.el
41
08ctags.el
|
|
@ -1,9 +1,14 @@
|
||||||
;; Do not mix ctags between folders
|
;; Do not mix ctags between folders
|
||||||
|
(provide 'my-ctags-config)
|
||||||
|
|
||||||
(setq tags-add-tables nil)
|
(setq tags-add-tables nil)
|
||||||
|
(setq ctags/refresh-command
|
||||||
|
(format "ctags -e -R -f %sTAGS %s."
|
||||||
|
default-directory default-directory))
|
||||||
|
|
||||||
;; Sentinel function for capturing ctags
|
;; Sentinel function for capturing ctags
|
||||||
(defun ctags-process-callback (process event)
|
(defun ctags/process-callback (process event)
|
||||||
"Show status of asynchronous ctags-process after it finishes."
|
"Show status of asynchronous ctags/process after it finishes."
|
||||||
(cond
|
(cond
|
||||||
((string-equal event "finished\n")
|
((string-equal event "finished\n")
|
||||||
(message "Creating tag files...completed")
|
(message "Creating tag files...completed")
|
||||||
|
|
@ -14,17 +19,31 @@
|
||||||
(pop-to-buffer (get-buffer "*ctags*"))
|
(pop-to-buffer (get-buffer "*ctags*"))
|
||||||
)))
|
)))
|
||||||
|
|
||||||
(setq ctags-refresh-command
|
(cl-defun ctags/refresh-ctags (&key silent)
|
||||||
(format "ctags -e -R -f %sTAGS %s."
|
|
||||||
default-directory default-directory))
|
|
||||||
|
|
||||||
(defun refresh-ctags ()
|
|
||||||
"Refresh ctags according to currently set command."
|
"Refresh ctags according to currently set command."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
|
||||||
(message "Starting ctags process")
|
;; Print message if not silent
|
||||||
(start-process-shell-command "ctags" "*ctags*" ctags-refresh-command)
|
(when (not silent) (message "Starting ctags process..."))
|
||||||
(set-process-sentinel (get-process "ctags") 'ctags-process-callback))
|
|
||||||
|
;; Return if a version of the process is already running
|
||||||
|
(when (not (get-process "ctags"))
|
||||||
|
(start-process-shell-command "ctags" "*ctags*" ctags/refresh-command)
|
||||||
|
(set-process-sentinel (get-process "ctags") 'ctags/process-callback)))
|
||||||
|
|
||||||
;; Ctags bindings
|
;; Ctags bindings
|
||||||
(define-key prog-mode-map (kbd "C-c E") 'refresh-ctags)
|
(define-key prog-mode-map (kbd "C-c E") 'ctags/refresh-ctags)
|
||||||
|
|
||||||
|
;; Automatically update tags on save, but be silent about it.
|
||||||
|
(setq ctags/major-modes-to-update-on-save '())
|
||||||
|
(defun ctags/update-tags-on-save ()
|
||||||
|
"Update tags if current major mode is part of the list."
|
||||||
|
(interactive)
|
||||||
|
(when (member major-mode ctags/major-modes-to-update-on-save)
|
||||||
|
(ctags/refresh-ctags :silent t)))
|
||||||
|
|
||||||
|
(defun ctags/update-this-mode-on-save (mode)
|
||||||
|
"Update MODE on save."
|
||||||
|
(add-to-list (make-local-variable 'ctags/major-modes-to-update-on-save) mode))
|
||||||
|
|
||||||
|
(add-hook 'after-save-hook 'ctags/update-tags-on-save)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
'(company-etags company-yasnippet))
|
'(company-etags company-yasnippet))
|
||||||
|
|
||||||
(setq-local
|
(setq-local
|
||||||
ctags-refresh-command
|
ctags/refresh-command
|
||||||
(format
|
(format
|
||||||
"ctags -e -R --languages=C -f %sTAGS %s."
|
"ctags -e -R --languages=C -f %sTAGS %s."
|
||||||
(projectile-project-root) (projectile-project-root)
|
(projectile-project-root) (projectile-project-root)
|
||||||
|
|
|
||||||
69
20erlang.el
69
20erlang.el
|
|
@ -1,15 +1,36 @@
|
||||||
;; Add erlang installation to load path
|
(cl-defun erlang/emacs-path (erlang-version)
|
||||||
(setq erlang-asdf-root "$HOME/.asdf/installs/erlang/21.3.8/")
|
(car (split-string
|
||||||
|
(shell-command-to-string
|
||||||
|
(format "find $HOME/.asdf/installs/erlang/%s/ -name erlang.el"
|
||||||
|
erlang-version)) "erlang.el")))
|
||||||
|
|
||||||
(setq load-path
|
(cl-defun erlang/erlang-path (erlang-version)
|
||||||
(cons (format "%slib/tools-3.1/emacs" erlang-asdf-root)
|
(format "$HOME/.asdf/installs/erlang/%s/" erlang-version))
|
||||||
load-path))
|
|
||||||
|
|
||||||
(require 'erlang-start)
|
(defun erlang/erlang-plist (erlang-version)
|
||||||
|
"Create property list for ERLANG-VERSION."
|
||||||
|
(list :version erlang-version
|
||||||
|
:erlang-path (erlang/erlang-path erlang-version)
|
||||||
|
:emacs-path (erlang/emacs-path erlang-version)))
|
||||||
|
|
||||||
(setq erlang-root-dir erlang-asdf-root)
|
(cl-defun erlang/installed-erlangs ()
|
||||||
(setq exec-path (cons (format "%sbin" erlang-asdf-root) exec-path))
|
(split-string
|
||||||
(setq erlang-man-root-dir (format "%sman" erlang-asdf-root))
|
(shell-command-to-string
|
||||||
|
(format "asdf list erlang"))))
|
||||||
|
|
||||||
|
(cl-defun erlang/available-versions--plist ()
|
||||||
|
(mapcar 'erlang/erlang-plist (erlang/installed-erlangs)))
|
||||||
|
|
||||||
|
(setq erlang/available-versions (erlang/available-versions--plist))
|
||||||
|
|
||||||
|
(cl-defun erlang/currently-in-use ()
|
||||||
|
(car (split-string (shell-command-to-string "asdf current erlang"))))
|
||||||
|
|
||||||
|
(cl-defun erlang/current-version--plistp (erlang-plist)
|
||||||
|
(equal (plist-get erlang-plist :version) (erlang/currently-in-use)))
|
||||||
|
|
||||||
|
(cl-defun erlang/current-plist ()
|
||||||
|
(seq-find 'erlang/current-version--plistp erlang/available-versions))
|
||||||
|
|
||||||
;; Flycheck checker for Erlang
|
;; Flycheck checker for Erlang
|
||||||
(flycheck-define-checker erlang-otp
|
(flycheck-define-checker erlang-otp
|
||||||
|
|
@ -22,26 +43,46 @@
|
||||||
(error line-start (file-name) ":" line ": " (message) line-end))
|
(error line-start (file-name) ":" line ": " (message) line-end))
|
||||||
:modes (my-erlang-mode))
|
:modes (my-erlang-mode))
|
||||||
|
|
||||||
(defun activate-erlang-mode ()
|
(defun erlang/activate-erlang-mode ()
|
||||||
"All things for all Erlang, including header files."
|
"All things for all Erlang, including header files."
|
||||||
|
(when (featurep 'erlang-start) (unload-feature 'erlang-start))
|
||||||
|
|
||||||
|
(setq erlang/current-erlang (erlang/current-plist))
|
||||||
|
|
||||||
|
(add-to-list (make-local-variable 'load-path)
|
||||||
|
(plist-get erlang/current-erlang :emacs-path))
|
||||||
|
|
||||||
|
(add-to-list (make-local-variable 'exec-path)
|
||||||
|
(format "%slib/tools-3.1/emacs"
|
||||||
|
(plist-get erlang/current-erlang :erlang-path)))
|
||||||
|
|
||||||
|
(setq-local erlang-man-root-dir
|
||||||
|
(format "%sman"
|
||||||
|
(plist-get erlang/current-erlang :erlang-path)))
|
||||||
|
|
||||||
|
(require 'erlang-start)
|
||||||
|
|
||||||
;; Set specific ctags command
|
;; Set specific ctags command
|
||||||
(setq-local
|
(setq-local
|
||||||
ctags-refresh-command
|
ctags/refresh-command
|
||||||
(format
|
(format
|
||||||
"ctags -e -R --languages=erlang -f %sTAGS %s. %slib/stdlib-* %slib/kernel-*"
|
"ctags -e -R --languages=erlang -f %sTAGS %s. %slib/stdlib-* %slib/kernel-*"
|
||||||
(projectile-project-root) (projectile-project-root)
|
(projectile-project-root) (projectile-project-root)
|
||||||
erlang-asdf-root erlang-asdf-root))
|
(plist-get erlang/current-erlang :erlang-path)
|
||||||
|
(plist-get erlang/current-erlang :erlang-path)))
|
||||||
|
|
||||||
;; Company list override
|
;; Company list override
|
||||||
(add-to-list (make-local-variable 'company-backends)
|
(add-to-list (make-local-variable 'company-backends)
|
||||||
'(company-etags company-yasnippet)))
|
'(company-etags company-yasnippet)))
|
||||||
|
|
||||||
(add-hook 'erlang-mode-hook 'activate-erlang-mode)
|
(add-hook 'erlang-mode-hook 'erlang/activate-erlang-mode)
|
||||||
|
|
||||||
(define-derived-mode my-erlang-mode erlang-mode "My Erlang mode"
|
(define-derived-mode my-erlang-mode erlang-mode "My Erlang mode"
|
||||||
"A mode for Erlang things"
|
"A mode for Erlang things"
|
||||||
|
|
||||||
(activate-erlang-mode)
|
(activate-erlang-mode)
|
||||||
;; Enable flycheck
|
;; Enable flycheck
|
||||||
(flycheck-select-checker 'erlang-otp))
|
(flycheck-select-checker 'erlang-otp)
|
||||||
|
|
||||||
|
;; Automatically update tags on save
|
||||||
|
(ctags/update-this-mode-on-save 'erlang-mode))
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,11 @@
|
||||||
(setq ruby-insert-encoding-magic-comment nil)
|
(setq ruby-insert-encoding-magic-comment nil)
|
||||||
|
|
||||||
;; Company list override
|
;; Company list override
|
||||||
(add-to-list (make-local-variable 'company-backends) '(company-etags company-yasnippet))
|
(add-to-list (make-local-variable 'company-backends)
|
||||||
|
'(company-etags company-yasnippet))
|
||||||
|
|
||||||
;; Set specific ctags command
|
;; Set specific ctags command
|
||||||
(setq-local ctags-refresh-command
|
(setq-local ctags/refresh-command
|
||||||
(format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)"
|
(format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)"
|
||||||
(projectile-project-root) (projectile-project-root))))
|
(projectile-project-root) (projectile-project-root))))
|
||||||
|
|
||||||
|
|
|
||||||
1
init.el
1
init.el
|
|
@ -104,6 +104,7 @@
|
||||||
|
|
||||||
;; Additional files
|
;; Additional files
|
||||||
(load "~/.emacs.d/01mac.el")
|
(load "~/.emacs.d/01mac.el")
|
||||||
|
(load "~/.emacs.d/02macros.el")
|
||||||
(load "~/.emacs.d/02ivy.el")
|
(load "~/.emacs.d/02ivy.el")
|
||||||
(load "~/.emacs.d/03hydra.el")
|
(load "~/.emacs.d/03hydra.el")
|
||||||
(load "~/.emacs.d/04magit.el")
|
(load "~/.emacs.d/04magit.el")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue