Configure anaconda-mode and company-anaconda
* Add functions to disable or enable anaconda-mode with support * Open Python org-mode source edit-buffers in anaconda-mode.
This commit is contained in:
parent
43049889cf
commit
5c4bcb9a33
64
README.org
64
README.org
@ -975,19 +975,75 @@ option to run different commands on those selections.
|
||||
|
||||
** Python coding
|
||||
|
||||
Here, the focus is on three ways to extend Emacs's built-in ~python-mode~ out of
|
||||
the options listed on the [[https://www.emacswiki.org/emacs/PythonProgrammingInEmacs][Python Programming in Emacs]] wiki page:
|
||||
The [[https://www.emacswiki.org/emacs/PythonProgrammingInEmacs][Python Programming in Emacs]] wiki page lists options to enhance Emacs's
|
||||
built-in ~python-mode~. Here, the focus is on two packages:
|
||||
1. [[https://github.com/pythonic-emacs/anaconda-mode][Anaconda - code navigation, documentation lookup, and completion for Python]].
|
||||
2. [[https://github.com/joaotavora/eglot][Eglot - Emacs polyGLOT: an Emacs LSP client that stays out of your way]]. The
|
||||
maintainer also contributes to Emacs itself and has a deep understanding of
|
||||
[[https://sheer.tj/the_way_of_emacs.html][the Way of Emacs]]. He refuses to add new features without seeing how they fit
|
||||
into [[https://sheer.tj/the_way_of_emacs.html][the Way of Emacs]] as this discussion at [[https://github.com/joaotavora/eglot/issues/523][Eglot github issue: org-mode
|
||||
source code blocks]] shows.
|
||||
into [[https://sheer.tj/the_way_of_emacs.html][the Way of Emacs]] as this discussion on [[https://github.com/joaotavora/eglot/issues/523][org-mode source code blocks]]
|
||||
shows.
|
||||
|
||||
The snippet below initializes [[https://github.com/pythonic-emacs/anaconda-mode][anaconda]]. See [[https://github.com/jorgenschaefer/elpy/blob/8d0de310d41ebf06b22321a8534546447456870c/elpy.el#L2775][elpy-module-company]] for how to
|
||||
handle ~company-backends~ as a local variable and the call to ~advice~ opens
|
||||
Python org-mode edit-buffers in ~anaconda-mode~.
|
||||
#+begin_src emacs-lisp
|
||||
(with-eval-after-load 'python
|
||||
|
||||
(with-eval-after-load 'company
|
||||
(when (and (fboundp 'anaconda-mode)
|
||||
(fboundp 'company-anaconda))
|
||||
(defun my-disable-anaconda-mode ()
|
||||
(when (derived-mode-p 'python-mode)
|
||||
(anaconda-mode -1)
|
||||
(set (make-local-variable 'company-backends)
|
||||
(delq 'company-anaconda
|
||||
(mapcar #'identity company-backends)))
|
||||
(anaconda-eldoc-mode -1)))
|
||||
|
||||
(defun my-enable-anaconda-mode ()
|
||||
(when (derived-mode-p 'python-mode)
|
||||
(anaconda-mode +1)
|
||||
(set (make-local-variable 'company-backends)
|
||||
(cons 'company-anaconda
|
||||
(delq 'company-semantic
|
||||
(delq 'company-capf
|
||||
(mapcar #'identity company-backends)))))
|
||||
(anaconda-eldoc-mode
|
||||
(if (file-remote-p default-directory) -1 1))))))
|
||||
|
||||
(unless (and (fboundp 'my-disable-anaconda-mode)
|
||||
(fboundp 'my-enable-anaconda-mode))
|
||||
(when (fboundp 'anaconda-mode)
|
||||
(defun my-disable-anaconda-mode ()
|
||||
(when (derived-mode-p 'python-mode)
|
||||
(anaconda-mode -1)
|
||||
(anaconda-eldoc-mode -1)))
|
||||
|
||||
(defun my-enable-anaconda-mode ()
|
||||
(when (derived-mode-p 'python-mode)
|
||||
(anaconda-mode +1)
|
||||
(anaconda-eldoc-mode
|
||||
(if (file-remote-p default-directory) -1 1))))))
|
||||
|
||||
(when (fboundp 'my-enable-anaconda-mode)
|
||||
(advice-add 'org-edit-src-code :after #'my-enable-anaconda-mode))
|
||||
|
||||
(when (and (fboundp 'my-disable-anaconda-mode)
|
||||
(fboundp 'my-enable-anaconda-mode))
|
||||
(defun my-toggle-anaconda-mode ()
|
||||
(interactive)
|
||||
(if (bound-and-true-p anaconda-mode)
|
||||
(my-disable-anaconda-mode)
|
||||
(my-enable-anaconda-mode)))))
|
||||
#+end_src
|
||||
|
||||
#+attr_latex: :options bgcolor=LightGoldenrodYellow
|
||||
#+begin_src python :tangle example.py :comments link
|
||||
import numpy
|
||||
import astropy.units as apu
|
||||
|
||||
a = numpy.arange(0, 11)
|
||||
a = numpy.linspace(0, 10, num=11)
|
||||
q = apu.Quantity(a, apu.meter)
|
||||
print(q)
|
||||
|
Loading…
Reference in New Issue
Block a user