All Projects → dmgerman → editWithEmacs.spoon

dmgerman / editWithEmacs.spoon

Licence: other
Use emacs to edit any text field/text box in emacs

Programming Languages

lua
6591 projects
emacs lisp
2029 projects

Edit with emacs Everywhere

Introduction

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:

  1. User is in a non-Emacs application, and presses the bound keys (see below).
  2. Emacs opens a buffer for editing.
  3. User edits buffer via Emacs.
  4. User presses C-c C-c, sending the Emacs buffer back to the originating application window.

Installation

Hammerspoon

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

Emacs

Load the hammerspoon.el file in Emacs.

(load "~/.hammerspoon/Spoons/editWithEmacs.spoon/hammerspoon.el")

Testing installation

To test if you Hammerspoon works from Emacs, call hammerspoon-test (e.g., M-x hammerspoon-test).

How to use

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.

Limitations

  • 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

Bugs/fixes?

  • Please open an issue/pull-request
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].