From 5a30c48953994d8beec6c811049a607f444d5b23 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Tue, 29 Aug 2017 00:12:17 +0300 Subject: [PATCH] Figure out a way to do python virtual environments --- .gitignore | 1 + behaviour.el | 3 +++ key-bindings.el | 4 +++- languages.el | 1 + languages/js.el | 27 +++++++++++++++++++++++++++ languages/python.el | 15 ++++++++++++++- packages.el | 4 ++++ windows.el | 2 +- 8 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 languages/js.el diff --git a/.gitignore b/.gitignore index 5f11850..001e001 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ backups elpa *.elc recentf +.python-environments* diff --git a/behaviour.el b/behaviour.el index 6accffe..88b3085 100644 --- a/behaviour.el +++ b/behaviour.el @@ -154,6 +154,9 @@ (company-abbrev company-dabbrev) )) +;; Test, I do not know what it does yet. +(setq company-tooltip-align-annotations t) + ;; Do not required match to continue typing (setq company-require-match 'never) diff --git a/key-bindings.el b/key-bindings.el index 14ffdf4..a763bcb 100644 --- a/key-bindings.el +++ b/key-bindings.el @@ -57,7 +57,9 @@ (require 'dash-at-point) (evil-leader/set-key "d" 'dash-at-point) +;; Force company-yasnippet + (require 'evil) ;;; VIM insert mode things -(define-key evil-insert-state-map "\C-a" 'company-yasnippet) +(define-key evil-insert-state-map "\C-a" 'company-complete) ;;; key-bindings.el ends here diff --git a/languages.el b/languages.el index dea329d..02498dc 100644 --- a/languages.el +++ b/languages.el @@ -13,6 +13,7 @@ (load "~/.emacs.d/languages/elixir.elc") (load "~/.emacs.d/languages/rust.elc") (load "~/.emacs.d/languages/web.elc") +(load "~/.emacs.d/languages/js.elc") ;;; SQL (defun sql-mode-hook () diff --git a/languages/js.el b/languages/js.el new file mode 100644 index 0000000..1a8c809 --- /dev/null +++ b/languages/js.el @@ -0,0 +1,27 @@ +;;; Js -- summary +;;; Commentary: + +;;; Code: + +;;========== Editor config ========================= +(defun editor-config-js () + "Editor configuration for Javascript." + (set-indent 2) + (set-width-80)) + +;;========== Code completion ======================= +(defun completion-config-js () + "Code completion and inspection for Javascript." + (company-mode 1) + (flycheck-mode 1) + (flymake-mode) + (set (make-local-variable 'company-backends) + '((company-tern company-capf company-dabbrev-code company-yasnippet + company-files)))) + +;;========== Hooks ================================= +(add-hook 'js-mode-hook 'editor-config-js) +(add-hook 'js-mode-hook 'completion-config-js) + +(provide 'js) +;;; js.el ends here diff --git a/languages/python.el b/languages/python.el index 18d01f1..eee38a7 100644 --- a/languages/python.el +++ b/languages/python.el @@ -4,6 +4,8 @@ ;;; Code: (require 'elpy) (require 'pyenv-mode) +(require 'company-jedi) + ;;========== Editor config ========================= (defun editor-config-python () "Setup editor for Python." @@ -12,7 +14,18 @@ (setq python-indent-guess-indent-offset 4) (setq python-indent-offset 4)) -;;========== Code completion +;;========== Helper for pyenv ====================== +(defun ssbb-pyenv-hook () + "Automatically activates pyenv version if .python-version file exists." + (f-traverse-upwards + (lambda (path) + (let ((pyenv-version-path (f-expand ".python-version" path))) + (if (f-exists? pyenv-version-path) + (pyenv-mode-set (s-trim (f-read-text pyenv-version-path 'utf-8)))))))) + +(add-hook 'find-file-hook 'ssbb-pyenv-hook) + +;;========== Code completion ======================= (defun completion-config-python () "Code completion and inspection for Python." (elpy-mode 1) diff --git a/packages.el b/packages.el index d0f40e2..4d75327 100644 --- a/packages.el +++ b/packages.el @@ -211,4 +211,8 @@ (unless (package-installed-p 'pyenv-mode) (package-install 'pyenv-mode)) + +;; Javascript +(unless (package-installed-p 'company-tern) + (package-install 'company-tern)) ;;; packages.el ends here diff --git a/windows.el b/windows.el index 24f8d63..dc828e8 100644 --- a/windows.el +++ b/windows.el @@ -36,7 +36,7 @@ (add-to-list 'purpose-user-mode-purposes '(web-mode . code)) (add-to-list 'purpose-user-mode-purposes '(java-mode . code)) (add-to-list 'purpose-user-mode-purposes '(python-mode . code)) -(add-to-list 'purpose-user-mode-purposes '(javascript-mode . code)) +(add-to-list 'purpose-user-mode-purposes '(js-mode . code)) (add-to-list 'purpose-user-mode-purposes '(emacs-lisp-mode . code)) ;; Other files that fall into 'code'