This module allows editing with Emacs anywhere in OS X.
See this demo: https://youtu.be/jYUKYpXL6rI
In any text field in any application, one can summon Emacs to edit text:
- User is in a non-Emacs application, and presses the bound keys (see below).
- Emacs opens a buffer for editing.
- User edits buffer via Emacs.
- User presses
C-c C-c
, sending the Emacs buffer back to the originating application window.
Install Hammerspoon, either from [their instructions](https://hammerspoon.org/#how-do-i-install-it) or via Homebrew (e.g., `brew install hammerspoon`).
Place this repository’s folder inside the ~/.hammerspoon/Spoons
directory such that you have the following:
~/.hammerspoon/Spoons/editWithEmacs.spoon
Note, the .spoon
extension is important.
Modify your ~/.hammerspoon/init.lua
and add:
-- Optional configuration of beginEditShellCommand
spoon.editWithEmacs.openEditorShellCommand = "EDITOR -e '(hammerspoon-edit-begin)'"
hs.loadSpoon("editWithEmacs")
if spoon.editWithEmacs then
local bindings = {
edit_selection = { {"alt"}, "1"},
edit_all = { {"alt"}, "2"}
}
spoon.editWithEmacs:bindHotkeys(bindings)
end
Load the hammerspoon.el
file in Emacs.
(load "~/.hammerspoon/Spoons/editWithEmacs.spoon/hammerspoon.el")
To test if you Hammerspoon works from Emacs, call hammerspoon-test
(e.g., M-x hammerspoon-test
).
With the above keybindings, when you press Cmd
+ Alt
+ Ctrl
+ e
, Hammerspoon will copy the content of the current application’s focus, open an Emacs buffer, and paste those contents into the buffer. You then edit the that Emacs buffer and press C-c C-c
to send that back to the originating window.
If you press Shift
+ Cmd
+ Alt
+ Ctrl
+ e
, Hammerspoon cuts the current selected text, and pastes that into the buffer. When you finish editing, Hammerspoon will paste the content of the buffer; which will replace the selected text.
- This method is non-reentrant. This means you can only edit one field at a time. You do not need to send the text back to the text-field. You can use edit-with-emacs again without any undesirable effect.
- It is currently sending commands directly to emacs via the keyboard. Thus, emacs should be ready to accept commands
- If something goes wrong and the text does not appear, you can retrieve it from emacs. Switch to the _hs_edit buffer and you will see the text you were editing. This buffer will be reused
- Please open an issue/pull-request