* With-Editor

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:

#+begin_src emacs-lisp
  (keymap-global-set "<remap> <async-shell-command>"
                     #'with-editor-async-shell-command)
  (keymap-global-set "<remap> <shell-command>"
                     #'with-editor-shell-command)
#+end_src

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:

#+begin_src emacs-lisp
  (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)
#+end_src

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

#+begin_src emacs-lisp
  (add-hook 'shell-mode-hook
            (apply-partially 'with-editor-export-editor "GIT_EDITOR"))
  (add-hook 'shell-mode-hook 'with-editor-export-git-editor)
#+end_src

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.

#+html: <br><br>
#+html: <a href="https://github.com/magit/with-editor/actions/workflows/compile.yml"><img alt="Compile" src="https://github.com/magit/with-editor/actions/workflows/compile.yml/badge.svg"/></a>
#+html: <a href="https://github.com/magit/with-editor/actions/workflows/manual.yml"><img alt="Manual" src="https://github.com/magit/with-editor/actions/workflows/manual.yml/badge.svg"/></a>
#+html: <a href="https://snapshots.melpa.org/#/with-editor"><img alt="MELPA Snapshots" src="https://snapshots.melpa.org/packages/with-editor-badge.svg"/></a>
#+html: <a href="https://releases.melpa.org/#/with-editor"><img alt="MELPA Releases" src="https://releases.melpa.org/packages/with-editor-badge.svg"/></a>
#+html: <a href="https://elpa.nongnu.org/nongnu/with-editor.html"><img alt="NonGNU ELPA" src="https://emacsair.me/assets/badges/nongnu-elpa.svg"/></a>
