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
|
** Python coding
|
||||||
|
|
||||||
Here, the focus is on three ways to extend Emacs's built-in ~python-mode~ out of
|
The [[https://www.emacswiki.org/emacs/PythonProgrammingInEmacs][Python Programming in Emacs]] wiki page lists options to enhance Emacs's
|
||||||
the options listed on the [[https://www.emacswiki.org/emacs/PythonProgrammingInEmacs][Python Programming in Emacs]] wiki page:
|
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
|
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
|
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
|
[[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
|
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]]
|
||||||
source code blocks]] shows.
|
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
|
#+attr_latex: :options bgcolor=LightGoldenrodYellow
|
||||||
#+begin_src python :tangle example.py :comments link
|
#+begin_src python :tangle example.py :comments link
|
||||||
import numpy
|
import numpy
|
||||||
import astropy.units as apu
|
import astropy.units as apu
|
||||||
|
|
||||||
|
a = numpy.arange(0, 11)
|
||||||
a = numpy.linspace(0, 10, num=11)
|
a = numpy.linspace(0, 10, num=11)
|
||||||
q = apu.Quantity(a, apu.meter)
|
q = apu.Quantity(a, apu.meter)
|
||||||
print(q)
|
print(q)
|
||||||
|
Loading…
Reference in New Issue
Block a user