with-editor

Homepage: https://github.com/magit/with-editor

Author: Jonas Bernoulli

Updated:

Summary

Use the Emacsclient as $EDITOR

Commentary

This library makes it possible to reliably use the Emacsclient as
the `$EDITOR' of child processes.  It makes sure that they know how
to call home.  For remote processes a substitute is provided, which
communicates with Emacs on standard output/input instead of using a
socket as the Emacsclient does.

It provides the commands `with-editor-async-shell-command' and
`with-editor-shell-command', which are intended as replacements
for `async-shell-command' and `shell-command'.  They automatically
export `$EDITOR' making sure the executed command uses the current
Emacs instance as "the editor".  With a prefix argument these
commands prompt for an alternative environment variable such as
`$GIT_EDITOR'.  To always use these variants add this to your init
file:

  (define-key (current-global-map)
    [remap async-shell-command] #'with-editor-async-shell-command)
  (define-key (current-global-map)
    [remap shell-command] #'with-editor-shell-command)

Alternatively use the global `shell-command-with-editor-mode',
which always sets `$EDITOR' for all Emacs commands which ultimately
use `shell-command' to asynchronously run some shell command.

The command `with-editor-export-editor' exports `$EDITOR' or
another such environment variable in `shell-mode', `eshell-mode',
`term-mode' and `vterm-mode' buffers.  Use this Emacs command
before executing a shell command which needs the editor set, or
always arrange for the current Emacs instance to be used as editor
by adding it to the appropriate mode hooks:

  (add-hook 'shell-mode-hook  #'with-editor-export-editor)
  (add-hook 'eshell-mode-hook #'with-editor-export-editor)
  (add-hook 'term-exec-hook   #'with-editor-export-editor)
  (add-hook 'vterm-mode-hook  #'with-editor-export-editor)

Some variants of this function exist, these two forms are
equivalent:

  (add-hook 'shell-mode-hook
            (apply-partially #'with-editor-export-editor "GIT_EDITOR"))
  (add-hook 'shell-mode-hook #'with-editor-export-git-editor)

This library can also be used by other packages which need to use
the current Emacs instance as editor.  In fact this library was
written for Magit and its `git-commit-mode' and `git-rebase-mode'.
Consult `git-rebase.el' and the related code in `magit-sequence.el'
for a simple example.

Dependencies

Reverse dependencies