diff --git a/lisp/ein-completer.el b/lisp/ein-completer.el index 489cbd5..7f4ca8a 100644 --- a/lisp/ein-completer.el +++ b/lisp/ein-completer.el @@ -38,8 +38,8 @@ (when (require 'auto-complete nil t) (require 'ein-ac)) (cond - ((and (or ein:use-auto-complete - ein:use-auto-complete-superpack) + ((and (or (eql ein:completion-backend 'ein:use-ac-backend) + (eql ein:completion-backend 'ein:use-ac-jedi-backend)) (ein:eval-if-bound 'auto-complete-mode) (fboundp 'ein:completer-finish-completing-ac)) #'ein:completer-finish-completing-ac) @@ -67,7 +67,7 @@ (beg (ein:completer-beginning matched-text)) (word (if (and beg matches) (completing-read "Complete: " matches - nil nil matched-text)))) + nil nil matched-text)))) (when word (delete-region beg end) (insert word)))) @@ -115,13 +115,13 @@ must be `t' to enable this option. This variable has effect on notebook buffers and connected buffers." :type 'boolean - :group 'ein) + :group 'ein-completion) (defun ein:complete-on-dot-install (map &optional func) (if (and ein:complete-on-dot (featurep 'auto-complete) - (or ein:use-auto-complete - ein:use-auto-complete-superpack)) + (or (eql ein:completion-backend 'ein:use-ac-backend) + (eql ein:completion-backend 'ein:use-ac-jedi-backend))) (define-key map "." (or func #'ein:completer-dot-complete)) (define-key map "." nil))) diff --git a/lisp/ein-notebook.el b/lisp/ein-notebook.el index a0782f2..93b94f8 100644 --- a/lisp/ein-notebook.el +++ b/lisp/ein-notebook.el @@ -673,9 +673,11 @@ notebook buffer then the user will be prompted to select an opened notebook." (defun ein:notebook-complete-dot () "Insert dot and request completion." (interactive) - (if (and ein:%notebook% (ein:codecell-p (ein:get-cell-at-point))) - (ein:completer-dot-complete) - (insert "."))) + (unless (or (eql ein:completion-backend 'ein:use-company-backend) + (eql ein:completion-backend 'ein:use-company-jedi-backend)) + (if (and ein:%notebook% (ein:codecell-p (ein:get-cell-at-point))) + (ein:completer-dot-complete) + (insert ".")))) (defun ein:notebook-kernel-interrupt-command () "Interrupt the kernel. @@ -1654,8 +1656,20 @@ This hook is run regardless the actual major mode used." (defun ein:notebook-mode () (funcall (ein:notebook-choose-mode)) - (ein:complete-on-dot-install - ein:notebook-mode-map 'ein:notebook-complete-dot) + (case ein:completion-backend + (ein:use-ac-backend (ein:complete-on-dot-install ein:notebook-mode-map 'ein:notebook-complete-dot) + (auto-complete-mode +1)) + (ein:use-ac-jedi-backend (jedi:setup) + (add-to-list 'ein:connect-mode-hook 'ein:jedi-setup) + (auto-complete-mode +1)) + (ein:use-company-backend (require 'ein-company) + (add-to-list 'company-backends 'ein:company-backend) + (company-mode +1)) + (ein:use-company-jedi-backend (warn "Support for jedi+company currently not implemented. Defaulting to just company-mode") + (require 'ein-company) + (add-to-list 'company-backends 'ein:company-backend) + (company-mode +1)) + (t (warn "No autocompletion backend has been selected - see `ein:completion-backend'."))) (ein:aif ein:helm-kernel-history-search-key (define-key ein:notebook-mode-map it 'helm-ein-kernel-history)) (ein:aif ein:anything-kernel-history-search-key diff --git a/lisp/ein-subpackages.el b/lisp/ein-subpackages.el index dad9d71..2116de6 100644 --- a/lisp/ein-subpackages.el +++ b/lisp/ein-subpackages.el @@ -31,19 +31,36 @@ (declare-function ein:ac-config-once "ein-ac") (declare-function ein:smartrep-config-once "ein-smartrep") +(defcustom ein:completion-backend 'ein:use-ac-backend + "Determines which completion backend to used in opened EIN notebooks. -(defcustom ein:use-auto-complete nil - "Set to `t' to use preset auto-complete configuration. -Use `ein:use-auto-complete-superpack' when you need more powerful -auto completion." - :type 'boolean - :group 'ein) +After changing the value of this variable it is recommended that +you restart Emacs. The available completion backends are: + +* ein:use-ac-backend : Use auto-complete with IPython's builtin completion engine. +* ein:use-ac-jedi-backend : Use auto-complete with the Jedi backend. +* ein:use-company-backend : Use company-mode with IPython's builtin completiong engine. +* ein:use-company-jedi-backends : Use company-mode with the Jedi backend (currently not implemented). +" + :type '(radio + (const :tag "Auto-Complete" 'ein:use-ac-backend) + (const :tag "Auto-Complete + Jedi" 'ein:use-ac-jedi-backend) + (const :tag "Company Mode" 'ein:use-company-backend) + (const :tag "Company Mode + Jedi" 'ein:use-company-jedi-backend)) + :group 'ein-completion) + +;; (defcustom ein:use-auto-complete nil +;; "Set to `t' to use preset auto-complete configuration. +;; Use `ein:use-auto-complete-superpack' when you need more powerful +;; auto completion." +;; :type 'boolean +;; :group 'ein-completion) (defcustom ein:use-auto-complete-superpack nil "Set to `t' to use preset a little bit hacky auto-complete configuration. When this option is enabled, cached omni completion is available." :type 'boolean - :group 'ein) + :group 'ein-completion) (defcustom ein:use-smartrep nil "Set to `t' to use preset smartrep configuration. @@ -68,16 +85,23 @@ When this option is enabled, cached omni completion is available." (defun ein:subpackages-load () "Load sub-packages depending on configurations." - (when (or ein:use-auto-complete - ein:use-auto-complete-superpack) - (require 'ein-ac) - (ein:ac-config-once ein:use-auto-complete-superpack)) + (case ein:completion-backend + ((ein:use-ac-backend ein:use-ac-jedi-backend) + (require 'ein-ac) + (ein:ac-config-once ein:use-auto-complete-superpack)) + (t (if (boundp 'ein:use-auto-complete) + (progn + (warn "ein:use-auto-complete has been deprecated. Please see `ein:completion-backend' for configuring autocompletion in ein.") + (setq ein:completion-backend 'ein:use-ac-backend) + (require 'ein-ac) + (ein:ac-config-once ein:use-auto-complete-superpack))))) (when ein:use-smartrep (require 'ein-smartrep) (ein:smartrep-config-once)) (when ein:load-dev (require 'ein-dev))) + (defun ein:subpackages-reload () "Reload sub-packages." (interactive)