Compare commits

..

No commits in common. "a371e6c9ae41e04a2ecf45c1984dcf117cd1693b" and "52ee2f6207d1c00198c16e7d7d89b7fc50221615" have entirely different histories.

View File

@ -1463,6 +1463,8 @@ completion function [[info:elisp#Minibuffer Completion][completing-read]]. List
;; C-c bindings (current-global-map) ;; C-c bindings (current-global-map)
(global-set-key (kbd "C-c h") #'consult-history) (global-set-key (kbd "C-c h") #'consult-history)
(global-set-key (kbd "C-c m") #'consult-mode-command) (global-set-key (kbd "C-c m") #'consult-mode-command)
;; C-h bindings (help-map)
(define-key help-map (kbd "a") #'consult-apropos)
;; C-x bindings (ctl-x-map) ;; C-x bindings (ctl-x-map)
(define-key ctl-x-map (kbd "M-:") #'consult-complex-command) (define-key ctl-x-map (kbd "M-:") #'consult-complex-command)
(define-key ctl-x-map (kbd "b") #'consult-buffer) (define-key ctl-x-map (kbd "b") #'consult-buffer)
@ -2044,26 +2046,29 @@ list detailing and motivating each listing:
#+name: lst:set-org-options #+name: lst:set-org-options
#+begin_src emacs-lisp #+begin_src emacs-lisp
(with-eval-after-load 'org (with-eval-after-load 'org
(custom-set-variables
`(org-babel-load-languages
(delq nil '((C . t)
(calc . t)
,(when (fboundp 'grapviz-dot-mode) '(dot . t))
(emacs-lisp . t)
(eshell . t)
,(when (fboundp 'fennel-mode) '(fennel . t))
(fortran . t)
,(when (fboundp 'gnuplot-mode) '(gnuplot . t))
(js . t)
(latex . t)
(lisp . t)
,(when (fboundp 'lua-mode) '(lua . t))
,(when (fboundp 'maxima-mode) '(maxima . t))
(org . t)
(perl . t)
;; The next two functions are not bound during bootstrap.
,(when (and (fboundp 'choose-common-python-interpreter)
(fboundp 'choose-common-python-linter))
'(python . t))
(shell . t)))))
(setopt (setopt
org-babel-load-languages
`((C . t)
(calc . t)
(dot . ,(fboundp 'grapviz-dot-mode))
(emacs-lisp . t)
(fortran . t)
(gnuplot . ,(fboundp 'gnuplot-mode))
(js . t)
(latex . t)
(lisp . t)
(lua . ,(fboundp 'lua-mode))
(maxima . ,(fboundp 'maxima-mode))
(org . t)
(perl . t)
;; The Python setup uses the two functions below.
;; Those functions are not yet bound during bootstrap.
(python . ,(and (fboundp 'choose-common-python-interpreter)
(fboundp 'choose-common-python-linter)))
(shell . t))
org-export-backends '(ascii beamer html icalendar latex odt texinfo) org-export-backends '(ascii beamer html icalendar latex odt texinfo)
org-file-apps '((auto-mode . emacs) org-file-apps '((auto-mode . emacs)
(directory . emacs) (directory . emacs)
@ -2086,13 +2091,13 @@ list detailing and motivating each listing:
("l" . "export latex") ("l" . "export latex")
("q" . "quote") ("q" . "quote")
("s" . "src") ("s" . "src")
("p" . "src python -n -i :session") ("p" . "src python -i :session")
("v" . "verse")))) ("v" . "verse"))))
#+end_src #+end_src
#+caption[Setup =org-babel=]: #+caption[Set =org-babel= options]:
#+caption: Setup =org-babel=. #+caption: Set =org-babel=.
#+name: lst:setup-org-babel #+name: lst:set-org-babel-options
#+begin_src emacs-lisp #+begin_src emacs-lisp
(with-eval-after-load 'ob-core (with-eval-after-load 'ob-core
(setopt org-confirm-babel-evaluate nil)) (setopt org-confirm-babel-evaluate nil))
@ -2506,8 +2511,7 @@ this facility to a level acceptable for my workflow:
blocks to "floating unbreakable with caption" or "non-floating breakable blocks to "floating unbreakable with caption" or "non-floating breakable
without caption" LaTeX environments. This is a partial work-around, but part without caption" LaTeX environments. This is a partial work-around, but part
of my workflow. of my workflow.
2. Fixed in [[https://elpa.gnu.org/devel/engrave-faces.html][engrave-faces-0.3.1.0.20230115.70118]]: listing 2. Listing [[lst:ensure-engrave-faces-with-latex-face-apply-fix]] makes
[[lst:ensure-engrave-faces-with-latex-face-apply-fix]] makes
=engrave-faces-latex-face-apply= handle symbolic color name strings (in =engrave-faces-latex-face-apply= handle symbolic color name strings (in
addition to the hexadecimal strings). Since faces in for instance addition to the hexadecimal strings). Since faces in for instance
src_emacs-lisp{(find-library "org-faces")} and src_emacs-lisp{(find-library src_emacs-lisp{(find-library "org-faces")} and src_emacs-lisp{(find-library
@ -2519,8 +2523,7 @@ this facility to a level acceptable for my workflow:
obtain the same result. Currently, I prefer to tangle listing obtain the same result. Currently, I prefer to tangle listing
[[lst:ensure-engrave-faces-with-attribute-values-fix]] to the =user-init-file= [[lst:ensure-engrave-faces-with-attribute-values-fix]] to the =user-init-file=
instead of listing [[lst:ensure-engrave-faces-with-latex-face-apply-fix]]. instead of listing [[lst:ensure-engrave-faces-with-latex-face-apply-fix]].
3. Fixed in [[https://elpa.gnu.org/devel/engrave-faces.html][engrave-faces-0.3.1.0.20230115.70118]]: listing 3. Listing [[lst:ensure-engrave-faces-with-latex-face-mapper-fix]] makes
[[lst:ensure-engrave-faces-with-latex-face-mapper-fix]] makes
=engrave-faces-latex-face-mapper= handle horizontal and vertical spacing in =engrave-faces-latex-face-mapper= handle horizontal and vertical spacing in
multiple line documentation strings correctly. For instance, without this fix multiple line documentation strings correctly. For instance, without this fix
the mishandling of vertical and horizontal spacing destroys the indentation the mishandling of vertical and horizontal spacing destroys the indentation
@ -2587,7 +2590,6 @@ environments and non-floating breakable LaTeX environments by means of
\\renewcommand\\theFancyVerbLine{ \\renewcommand\\theFancyVerbLine{
\\normalsize\\color{black!40!white}\\arabic{FancyVerbLine}} \\normalsize\\color{black!40!white}\\arabic{FancyVerbLine}}
% In case engrave-faces-latex-gen-preamble has not been run. % In case engrave-faces-latex-gen-preamble has not been run.
\\usepackage{xcolor}
\\providecolor{EfD}{HTML}{f7f7f7} \\providecolor{EfD}{HTML}{f7f7f7}
\\providecolor{EFD}{HTML}{28292e} \\providecolor{EFD}{HTML}{28292e}
% To use \\DeclareTColorBox from the tcolorbox package: % To use \\DeclareTColorBox from the tcolorbox package:
@ -2655,7 +2657,7 @@ environments and non-floating breakable LaTeX environments by means of
#+caption[Fix engraving of symbolic color names in =engrave-faces=]: #+caption[Fix engraving of symbolic color names in =engrave-faces=]:
#+caption: Fix engraving of symbolic colors names in =engrave-faces=. #+caption: Fix engraving of symbolic colors names in =engrave-faces=.
#+name: lst:ensure-engrave-faces-with-attribute-values-fix #+name: lst:ensure-engrave-faces-with-attribute-values-fix
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp
(when (require 'engrave-faces nil t) (when (require 'engrave-faces nil t)
(defun engrave-faces-attribute-values-around (efav-fun &rest args) (defun engrave-faces-attribute-values-around (efav-fun &rest args)
(let ((values (apply efav-fun args)) (let ((values (apply efav-fun args))
@ -2678,7 +2680,7 @@ environments and non-floating breakable LaTeX environments by means of
#+caption: Fix engraving of horizontal and vertical spacing in multiple line #+caption: Fix engraving of horizontal and vertical spacing in multiple line
#+caption: documentation strings. #+caption: documentation strings.
#+name: lst:ensure-engrave-faces-with-latex-face-mapper-fix #+name: lst:ensure-engrave-faces-with-latex-face-mapper-fix
#+begin_src emacs-lisp :tangle no #+begin_src emacs-lisp
(when (require 'engrave-faces-latex nil t) (when (require 'engrave-faces-latex nil t)
(defun engrave-faces-latex-face-mapper-override (faces content) (defun engrave-faces-latex-face-mapper-override (faces content)
"Create a LaTeX representation of CONTENT with FACES applied." "Create a LaTeX representation of CONTENT with FACES applied."
@ -3869,15 +3871,14 @@ Listing [[lst:configure-writegood-mode]] configures [[https://github.com/bnbeckw
:CUSTOM_ID: sec:programming-tools :CUSTOM_ID: sec:programming-tools
:END: :END:
** [[info:eglot#Top][Eglot (info)]] ** [[info:eglot#Top][Eglot (info)]] or [[https://github.com/joaotavora/eglot][Eglot]]
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: sec:eglot :CUSTOM_ID: sec:eglot
:END: :END:
[[https://github.com/joaotavora/eglot#readme][Emacs polyGLOT (Eglot)]] is an Emacs language-server-protocol client that stays [[https://github.com/joaotavora/eglot#readme][Emacs polyGLOT (Eglot)]] is an Emacs language-server-protocol client that stays
out of your way. [[info:eglot#Top][Eglot (info)]] is a builtin since Emacs-29.0.60. The following out of the way. The following listings contribute to a programming language
listings contribute to a programming language mode independent [[https://github.com/joaotavora/eglot][Eglot]] mode independent [[https://github.com/joaotavora/eglot][Eglot]] configuration:
configuration:
1. Listing [[lst:minimal-eglot-setup][minimal Eglot setup]] ensures installation of [[https://github.com/joaotavora/eglot][Eglot]], shows how to get 1. Listing [[lst:minimal-eglot-setup][minimal Eglot setup]] ensures installation of [[https://github.com/joaotavora/eglot][Eglot]], shows how to get
debug information from the [[https://github.com/python-lsp/python-lsp-server][Python LSP server]], and adds key bindings to debug information from the [[https://github.com/python-lsp/python-lsp-server][Python LSP server]], and adds key bindings to
=eglot-mode-keymap=. =eglot-mode-keymap=.
@ -4271,8 +4272,7 @@ install and use [[https://gitlab.com/andreyorst/ob-fennel][ob-fennel]] with the
(ensure-package-installation 'fennel-mode 'quelpa)) (ensure-package-installation 'fennel-mode 'quelpa))
(unless (package-installed-p 'ob-fennel) (unless (package-installed-p 'ob-fennel)
(quelpa '(ob-fennel :repo "andreyorst/ob-fennel" :fetcher gitlab))) (quelpa '(ob-fennel :repo "andreyorst/ob-fennel" :fetcher gitlab)))
(when (ensure-package-selection 'ob-fennel) (ensure-package-selection 'ob-fennel))
(org-babel-do-load-languages 'fennel (fboundp 'fennel-mode))))
#+end_src #+end_src
#+caption[Fennel example]: #+caption[Fennel example]:
@ -4350,11 +4350,9 @@ print(1+1);
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: sec:python-programming :CUSTOM_ID: sec:python-programming
:END: :END:
The [[https://www.emacswiki.org/emacs/PythonProgrammingInEmacs][Python Programming in Emacs]] wiki page lists options to enhance Emacs's 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 Emacs packages and four Python built-in ~python-mode~. Here, the focus is on three packages:
packages: 1. [[https://github.com/joaotavora/eglot][Eglot - Emacs polyGLOT: an Emacs LSP client that stays out of your way]]. The
1. [[#sec:eglot][Eglot - Emacs polyGLOT: a builtin LSP client since Emacs-29.0.60]]. 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 on [[https://github.com/joaotavora/eglot/issues/523][org-mode source code blocks]] 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]]
@ -4362,13 +4360,7 @@ packages:
2. [[https://jedi.readthedocs.io/en/latest/][Jedi]] is a static analysis tool for Python that is typically used in plugins 2. [[https://jedi.readthedocs.io/en/latest/][Jedi]] is a static analysis tool for Python that is typically used in plugins
for editors or integrated development environments. Jedi has a focus on for editors or integrated development environments. Jedi has a focus on
autocompletion and object definition lookup functionality. autocompletion and object definition lookup functionality.
3. [[https://github.com/charliermarsh/ruff#readme][Ruff]] is an extremely fast Python linter and a replacement for [[https://flake8.pycqa.org/en/latest/][Flake8]] with a 3. [[https://github.com/astoff/code-cells.el#readme][Code-cells]] allows to edit [[https://ipython.org/notebook.html][IPython or Jupyter notebooks]] in Emacs with help
variety of its plugins. [[https://notes.crmarsh.com/][Charlie Marsh]] explains why he started [[https://pypi.org/project/ruff/][Ruff]] in the
post [[https://notes.crmarsh.com/python-tooling-could-be-much-much-faster][Python tooling could be much faster]].
4. [[https://github.com/python-lsp/python-lsp-server#readme][Python LSP Server]] is in my opinion the most complete [[https://en.wikipedia.org/wiki/Language_Server_Protocol][Language Server Protocol]]
implementation for Python and it handles [[https://github.com/charliermarsh/ruff#readme][Ruff]] thanks to the [[https://github.com/python-lsp/python-lsp-ruff][python-lsp-ruff]]
plugin.
5. [[https://github.com/astoff/code-cells.el#readme][Code-cells]] allows to edit [[https://ipython.org/notebook.html][IPython or Jupyter notebooks]] in Emacs with help
from either [[https://github.com/mwouts/jupytext][Jupytext]] or [[https://pandoc.org/][Pandoc]]. from either [[https://github.com/mwouts/jupytext][Jupytext]] or [[https://pandoc.org/][Pandoc]].
Here are links covering how to integrate Emacs, Python and a Python LSP Here are links covering how to integrate Emacs, Python and a Python LSP
@ -4404,6 +4396,8 @@ of src_emacs-lisp{(choose-common-python-linter)} from:
1. [[https://github.com/PyCQA/pyflakes][Pyflakes - simple tool which checks Python source files for errors]]. 1. [[https://github.com/PyCQA/pyflakes][Pyflakes - simple tool which checks Python source files for errors]].
2. [[https://flake8.pycqa.org/en/latest/][Flake8 - your tool for style guide enforcement]]. 2. [[https://flake8.pycqa.org/en/latest/][Flake8 - your tool for style guide enforcement]].
3. [[https://github.com/charliermarsh/ruff][Ruff - an extremely fast Python linter written in Rust]]. 3. [[https://github.com/charliermarsh/ruff][Ruff - an extremely fast Python linter written in Rust]].
I use [[https://pypi.org/project/ruff/][Ruff]] to replace [[https://pypi.org/project/flake8/][Flake8]] with a variety of its plugins. [[https://notes.crmarsh.com/][Charlie Marsh]]
explains why he started [[https://pypi.org/project/ruff/][Ruff]] in the post [[https://notes.crmarsh.com/python-tooling-could-be-much-much-faster][Python tooling could be much faster]].
Listing [[lst:pyproject-toml-kickoff][kickoff pyproject.toml proposal]] facilitates dropping a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]] Listing [[lst:pyproject-toml-kickoff][kickoff pyproject.toml proposal]] facilitates dropping a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]
file into Python projects which anyhow should switch to using a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]] file into Python projects which anyhow should switch to using a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]