From a9cf902017d86cdd70265c0ba5681842380e7e46 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Mon, 28 Aug 2017 21:20:29 +0300 Subject: [PATCH] Add finally working company --- behaviour.el | 13 +++++++++-- emacs | 3 +++ languages.el | 19 +--------------- languages/elisp.el | 24 ++++++++++++++++++++ languages/python.el | 41 ++++++++++++++++++++++------------- languages/ruby.el | 53 +++++++++++++++++++++++++++++---------------- packages.el | 6 +++++ 7 files changed, 105 insertions(+), 54 deletions(-) create mode 100644 languages/elisp.el diff --git a/behaviour.el b/behaviour.el index ed5e566..1f17bfc 100644 --- a/behaviour.el +++ b/behaviour.el @@ -138,12 +138,21 @@ ; Add completion (require 'company) -(add-hook 'after-init-hook 'global-company-mode) -(setq company-tooltip-limit 10) +(setq company-tooltip-limit 30) +(setq company-tooltip-minimum-width 40) (setq company-idle-delay .1) (setq company-begin-commands '(self-insert-command)) (setq company-selection-wrap-around t) +(setq company-backends + '((company-files ; files & directory + company-keywords ; keywords + company-capf + company-yasnippet + ) + (company-abbrev company-dabbrev) + )) + ; Add project management (require 'projectile) (projectile-mode) diff --git a/emacs b/emacs index 20355d0..c95c6c1 100644 --- a/emacs +++ b/emacs @@ -20,6 +20,9 @@ '(foreground-color "#cccccc") '(hl-paren-background-colors (quote ("#2492db" "#95a5a6" nil))) '(hl-paren-colors (quote ("#ecf0f1" "#ecf0f1" "#c0392b"))) + '(package-selected-packages + (quote + (company-jedi yaml-mode window-purpose web-mode ujelly-theme toml-mode smart-mode-line scala-mode rvm ruby-end rspec-mode robe rainbow-mode rainbow-delimiters racer pyenv-mode noctilux-theme neotree monokai-theme markdown-mode less-css-mode json-reformat jade-mode indent-guide helm-themes helm-projectile helm-ag haskell-mode haml-mode groovy-mode flycheck flatui-theme exec-path-from-shell evil-nerd-commenter evil-magit evil-leader elpy dumb-jump dockerfile-mode diff-hl dash-at-point column-enforce-mode color-theme-approximate base16-theme atom-one-dark-theme alchemist aggressive-indent ag))) '(safe-local-variable-values (quote ((encoding . utf-8)))) '(sml/active-background-color "#34495e") '(sml/active-foreground-color "#ecf0f1") diff --git a/languages.el b/languages.el index a694e41..79f28c0 100644 --- a/languages.el +++ b/languages.el @@ -9,6 +9,7 @@ ;; Imports (load "~/.emacs.d/languages/ruby.elc") (load "~/.emacs.d/languages/python.elc") +(load "~/.emacs.d/languages/elisp.elc") ;;; Rust (defun rust-mode-config () @@ -76,24 +77,6 @@ (add-hook 'haskell-mode-hook 'flycheck-mode) (add-hook 'haskell-mode-hook 'set-width-80) -;;; Elisp -(defun elisp-mode-config () - "Setup editor for Lisp." - (remove-hook 'rust-mode-hook 'rust-mode-config) - (remove-hook 'ruby-mode-hook 'ruby-mode-config) - (remove-hook 'elixir-mode-hook 'elixir-mode-config) - (remove-hook 'html-mode-hook 'web-mode-config) - (remove-hook 'haskell-mode-hook 'haskell-mode-config) - (remove-hook 'java-mode-hook 'java-mode-config) - - (set-indent 2) - - (flycheck-mode 1)) - -(add-hook 'emacs-lisp-mode-hook 'elisp-mode-config) -(add-hook 'emacs-lisp-mode-hook 'flycheck-mode) -(add-hook 'emacs-lisp-mode-hook 'set-width-80) - ;;; Java (defun java-mode-config () "Setup editor for java." diff --git a/languages/elisp.el b/languages/elisp.el new file mode 100644 index 0000000..95163d5 --- /dev/null +++ b/languages/elisp.el @@ -0,0 +1,24 @@ +;;; Ruby -- summary +;;; Commentary: + +;;; Code: + +;;========== Editor config ========================= +(defun editor-config-elisp () + "Editor configuration for Elisp." + (set-indent 2) + (set-width-80)) + +;;========== Code completion ======================= +(defun completion-config-elisp () + "Code completion and inspection for Elisp." + (company-mode 1) + (flycheck-mode 1) + (set (make-local-variable 'company-backends) + '((elisp-company company-capf company-dabbrev-code company-yasnippet + company-files)))) + +;;========== Hooks ================================= +(add-hook 'emacs-lisp-mode-hook 'editor-config-elisp) +(add-hook 'emacs-lisp-mode-hook 'completion-config-elisp) +;;; elisp.el ends here diff --git a/languages/python.el b/languages/python.el index 9247b7c..18d01f1 100644 --- a/languages/python.el +++ b/languages/python.el @@ -3,25 +3,36 @@ ;;; Code: (require 'elpy) -(defun python-mode-config () +(require 'pyenv-mode) +;;========== Editor config ========================= +(defun editor-config-python () "Setup editor for Python." - (remove-hook 'ruby-mode-hook 'ruby-mode-config) - (remove-hook 'elixir-mode-hook 'elixir-mode-config) - (remove-hook 'emacs-lisp-mode-hook 'elisp-mode-config) - (remove-hook 'html-mode-hook 'web-mode-config) - (remove-hook 'haskell-mode-hook 'haskell-mode-config) - (remove-hook 'java-mode-hook 'java-mode-config) + (set-indent 4) + (set-width-79) + (setq python-indent-guess-indent-offset 4) + (setq python-indent-offset 4)) - (set-indent 4)) +;;========== Code completion +(defun completion-config-python () + "Code completion and inspection for Python." + (elpy-mode 1) + (pyenv-mode 1) + (company-mode 1) -(setq elpy-rpc-python-command "python3") -(setq python-indent-guess-indent-offset 4) -(setq python-indent-offset 4) + (flycheck-mode 1) + (flymake-mode 1) -(add-hook 'python-mode-hook 'python-mode-config) -(add-hook 'python-mode-hook 'pyenv-mode) -(add-hook 'python-mode-hook 'elpy-mode) -(add-hook 'python-mode-hook 'set-width-79) + (setq elpy-rpc-backend "jedi") + (jedi:setup) + (setq jedi:complete-on-dot t) + (setq jedi:complete-reply t) + + (set (make-local-variable 'company-backends) + '((company-jedi elpy-company-backend company-capf company-dabbrev-code + company-yasnippet company-files)))) + +(add-hook 'python-mode-hook 'editor-config-python) +(add-hook 'python-mode-hook 'completion-config-python) (provide 'python) ;;; python.el ends here diff --git a/languages/ruby.el b/languages/ruby.el index 846feff..328299f 100644 --- a/languages/ruby.el +++ b/languages/ruby.el @@ -5,11 +5,16 @@ (require 'company) (require 'ruby-mode) (require 'robe) -(require 'rvm) (require 'rspec-mode) -(defun ruby-mode-config () + +;;========== Editor config ========================= +(defun editor-ruby-mode-config () "Setup editor for Ruby." + + ;; Indentation and line length + (set-width-80) (set-indent 2) + ;; Do not align 'begin' and 'while' ;; (setq ruby-align-to-stmt-keywords '(if begin case elseif rescue)) @@ -19,26 +24,36 @@ ;; Do not insert encoding comments (setq ruby-insert-encoding-magic-comment nil) - ;; Use robe - (add-hook 'ruby-mode-hook 'robe-mode) - (defadvice inf-ruby-console-auto (before activate-rvm-for-robe activate) - "Activate proper RVM on activation of Robe." - (rvm-activate-corresponding-ruby)) - - ;; Setup autocomplete for robe - (eval-after-load 'company - '(push 'company-robe company-backends)) - (add-hook 'robe-mode-hook 'ac-robe-setup) - - ;; User rspec-mode - (add-hook 'ruby-mode-hook 'rspec-mode) - (eval-after-load 'rspec-mode '(rspec-install-snippets)) - ;; Use web-mode for erb (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))) -(add-hook 'ruby-mode-hook 'ruby-mode-config) -(add-hook 'ruby-mode-hook 'set-width-80) +;;========== Rspec config ========================= +(defun rspec-ruby-mode-config () + "Use rspec-mode." + (rspec-mode t) + (eval-after-load 'rspec-mode '(rspec-install-snippets))) + +;;========== Robe config ========================== +(defun robe-ruby-mode-config () + "Use robe." + ;; Activate modes + (robe-mode 1) + (company-mode 1) + (rspec-mode 1) + + ;; Activate RVM + (rvm-activate-corresponding-ruby) + + ;; Initalize completion + (set (make-local-variable 'company-backends) + '((company-robe company-capf company-dabbrev-code company-yasnippet + company-files))) + (ac-robe-setup)) + +;;========== Hooks ================================ +(add-hook 'ruby-mode-hook 'editor-ruby-mode-config) +(add-hook 'ruby-mode-hook 'robe-ruby-mode-config) +(add-hook 'ruby-mode-hook 'rspec-ruby-mode-config) ;; Use longer lines for HAML (add-hook 'haml-mode-hook 'set-width-120) diff --git a/packages.el b/packages.el index 1322140..187213e 100644 --- a/packages.el +++ b/packages.el @@ -85,6 +85,9 @@ (unless (package-installed-p 'flycheck) (package-install 'flycheck)) +(unless (package-installed-p 'flymake) + (package-install 'flymake)) + (unless (package-installed-p 'projectile) (package-install 'projectile)) @@ -194,6 +197,9 @@ (unless (package-installed-p 'elpy) (package-install 'elpy)) +(unless (package-installed-p 'company-jedi) + (package-install 'company-jedi)) + (unless (package-installed-p 'pyenv-mode) (package-install 'pyenv-mode)) ;;; packages.el ends here