diff --git a/README.org b/README.org index bd446c4..9217d1f 100644 --- a/README.org +++ b/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)