diff --git a/Cask b/Cask index 11943c35f..be65d51ee 100644 --- a/Cask +++ b/Cask @@ -169,6 +169,7 @@ ;; Python -- modules/module-python.el (depends-on "anaconda-mode") (depends-on "nose") +(depends-on "company-jedi") ;; Ruby -- modules/module-regex.el (depends-on "pcre2el") diff --git a/modules/module-python.el b/modules/module-python.el index 310ebff12..b1052ef32 100644 --- a/modules/module-python.el +++ b/modules/module-python.el @@ -1,22 +1,32 @@ ;;; module-python.el (use-package python - :mode ("\\.py\\'" . python-mode) + :mode ("\\.py\\'" . python-mode) :interpreter ("python" . python-mode) - :commands python-mode + :commands python-mode :init (add-hook! python-mode '(narf|enable-tab-width-4 emr-initialize flycheck-mode)) - (setq python-indent-offset 4 - python-environment-directory narf-temp-dir - python-shell-interpreter "ipython") + (setq-default + python-indent-offset 4 + python-environment-directory narf-temp-dir + python-shell-interpreter "ipython") :config (define-env-command! python-mode "python --version | cut -d' ' -f2") - (define-key python-mode-map (kbd "DEL") nil)) ; interferes with smartparens + + ;; interferes with smartparens + (define-key python-mode-map (kbd "DEL") nil) + + (after! company + (require 'company-jedi) + (unless (file-exists-p (concat python-environment-directory python-environment-default-root-name)) + (jedi:install-server)) + (define-company-backend! python-mode (jedi)))) (use-package nose :commands nose-mode - :preface (defvar nose-mode-map (make-sparse-keymap)) - :init (associate! nose-mode :pattern "/test_.+\\.py\\'") + :preface (defvar nose-mode-map (make-sparse-keymap)) + :init + (associate! nose-mode :pattern "/test_.+\\.py\\'") :config (bind! :map nose-mode-map (:prefix "," @@ -32,17 +42,14 @@ :diminish anaconda-mode :defines (anaconda-mode-map anaconda-nav-mode-map) :functions (anaconda-mode-running-p) - :init (add-hook! python-mode '(anaconda-mode eldoc-mode)) + :init + (add-hook! python-mode '(anaconda-mode eldoc-mode)) :config (bind! :map anaconda-mode-map :m "gd" 'anaconda-mode-goto-definitions) (bind! :map anaconda-nav-mode-map :n [escape] 'anaconda-nav-quit) (advice-add 'anaconda-mode-doc-buffer :after 'narf*anaconda-mode-doc-buffer) - (after! company - (require 'company-anaconda) - (define-company-backend! python-mode (anaconda))) - (after! emr (mapc (lambda (x) (let ((command-name (car x)) @@ -50,8 +57,8 @@ (region-p (caddr x)) predicate) (setq predicate (lambda () (and (anaconda-mode-running-p) - (not (use-region-p)) - (not (sp-point-in-string-or-comment))))) + (not (use-region-p)) + (not (sp-point-in-string-or-comment))))) (emr-declare-command (intern (format "anaconda-mode-%s" (symbol-name command-name))) :title title :modes 'python-mode :predicate predicate))) '((view-doc "view documentation" t)