Homepage: https://github.com/magit/with-editor
Author: Jonas Bernoulli
Updated:
Use the Emacsclient as $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: (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.