Guest User

Untitled

a guest
Jun 23rd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. ;; For proper supporting quoted macro names with `gtags' and `univirsal ctags'
  2. ;; add to `~/.ctags.d/erlang.ctags':
  3. ;; --regex-erlang=/^[ \t]*-define[ \t]*\('([-_[:alnum:]]+)'/\1/d/
  4.  
  5. (use-package mode-local)
  6. (use-package flycheck)
  7. (use-package ivy-erlang-complete)
  8. (use-package ggtags)
  9.  
  10. (defvar erlang-local-options nil
  11. "Options to pass to erlang-local checker.
  12. Usually you would like to define it in `.dir-locals.el', for example:
  13. ((erlang-mode . ((erlang-local-options . (\"+{parse_transform, lager_transform}\"
  14. \"+{parse_transform, cut}\"
  15. \"+{parse_transform, do}\")
  16. ))))")
  17.  
  18. (defun my-flycheck-erlang-enablep ()
  19. (string-suffix-p ".erl" (buffer-file-name)))
  20.  
  21. (flycheck-define-checker erlang-local
  22. "An Erlang syntax checker using the Erlang interpreter."
  23. :command ("erlc" (eval
  24. (if (projectile-project-p)
  25. (let* ((default-directory (projectile-project-root))
  26. (lib-dir (shell-command-to-string "rebar3 path --lib"))
  27. (ebin-dirs (split-string (shell-command-to-string "rebar3 path --ebin") " "))
  28. (inc-dirs (cons lib-dir (mapcar
  29. (lambda (dir)
  30. (concat (string-remove-suffix "ebin" dir)
  31. "include"))
  32. ebin-dirs))))
  33. (apply #'append (append (mapcar
  34. (lambda (dir) (list "-I" dir))
  35. inc-dirs)
  36. (mapcar
  37. (lambda (dir) (list "-pa" dir))
  38. ebin-dirs))))
  39. nil))
  40. (eval erlang-local-options)
  41. "-o" temporary-directory "-Wall" source)
  42. :error-patterns
  43. ((warning line-start (file-name) ":" line ": Warning:" (message) line-end)
  44. (error line-start (file-name) ":" line ": " (message) line-end))
  45. :modes erlang-mode
  46. :enabled my-flycheck-erlang-enablep)
  47.  
  48. (defun my-inferior-erlang-rebar3 ()
  49. "Erlang shell using rebar3."
  50. (interactive)
  51. (let ((default-directory (projectile-project-root)))
  52. (inferior-erlang "rebar3 auto"))
  53. )
  54.  
  55. (use-package erlang
  56. :ensure t
  57. :init
  58. (require 'erlang-start)
  59. (setq erlang-root-dir (expand-file-name "~/.local/lib/erlang/21.0")
  60. erlang-man-root-dir (expand-file-name "~/.local/lib/erlang/21.0/man"))
  61. (add-to-list 'exec-path (expand-file-name "~/.local/lib/erlang/21.0/bin"))
  62. :config
  63. (setq erlang-shell-function 'my-inferior-erlang-rebar3)
  64. (setq-mode-local erlang-mode
  65. flycheck-check-syntax-automatically '(mode-enabled idle-change)
  66. flycheck-idle-change-delay 5.0)
  67. (add-hook 'erlang-mode-hook #'(lambda ()
  68. (flycheck-select-checker 'erlang-local)
  69. (flycheck-mode)))
  70. (add-hook 'erlang-mode-hook #'(lambda () (ggtags-mode 1)))
  71. (add-hook 'erlang-mode-hook #'company-erlang-init)
  72. (add-hook 'erlang-shell-mode-hook
  73. #'(lambda ()
  74. (setq comint-output-filter-functions 'comint-truncate-buffer
  75. comint-buffer-maximum-size 5000
  76. comint-scroll-show-maximum-output t
  77. comint-input-ring-size 500)))
  78. (add-hook 'after-save-hook #'ivy-erlang-complete-reparse)
  79.  
  80. :mode
  81. ("rebar\\.config$" . erlang-mode)
  82. ("relx\\.config$" . erlang-mode)
  83. ("system\\.config$" . erlang-mode)
  84. ("\\.app\\.src$" . erlang-mode))
Add Comment
Please, Sign In to add comment