IDEmacs aims to be a set of Emacs configurations that provides an out-of-the-box experience similar (if not identical) to popular GUI IDEs and editors.
Its purpose…
- Programmers coming to Emacs from other IDEs, or even first-time programmers who are only familiar with Office applications.
-
Beginner Common Lisp and Scheme programmers who need the functionality of Emacs (Sly/Geiger + structural editing) without unnecessary setup and having to deal with an alien style of keybindings. In other words, similar to Portacle or Guillén Studio.
- Some might say we should instead improve support for Common Lisp and Scheme in other editors and IDEs. Still others may say that we should work on a better Lisp IDE than Emacs (such as Second Climax or Lem). All great points. IDEmacs is just a band-aid for the current situation, where Emacs + Sly/Geiser is the best Lisp/Scheme IDE.
- Non-programmers who want a fully featured Org, Markdown or LaTeX editor with idiomatic shortcuts and a mouse-friendly GUI.
It provides…
-
GUI and mouse supportIn addition to a keyboard-driven interface.
-
Keybindings that follow popular GUI and IDE conventions.
- CUA mode is only the beginning – a lot of keybinding configuration is required to deliver a stunning experience. And that’s before we even get to IDE-specific keybindings.
- This does not include starter kits that use Evil by default, such as Spacemax or Doom.
-
A full-featured, fast, and configuration-free Emacs experienceLike any starter kit/distro.
- The configuration idiom uses Elisp and includes abundant comments, which are valuable to anyone interested in learning how to configure Emacs using Elisp.
Fully emulating the subtle behavioral differences of a GUI and IDE is desirable, but not a top priority. Given our limited resources, our goal is to do “good enough.”
We hope this will give new users a comfortable starting point, and make them more likely to stay to explore the possibilities of Emacs’ flexibility rather than being driven by the default experience.
VSCode Configuration (WIP)
This is the first and currently the only IDE configuration provided.

VSCode configuration, showing init.el with source vscode-dark-plus Subject, treemacs, centaur-tabs, minimap, idle-highlight-mode, blamer, diff-hlAnd breadcrumb,
Currently, it brings together –
- VSCode Dark Plus Theme
- TreeMax (“Explorer”) for sidebar file browser
- Centaur Tabs for tab bar
breadcrumbTo show file path as breadcrumbsidle-highlight-modeTo automatically highlight occurrences of the symbol at the point- Emulates most of the keybindings listed in the “General”, “Basic Editing”, “Rich Language Editing” and “Multi-Cursor and Selection” sections of the VSCode keyboard shortcuts cheatsheet.
- All editing packages required for emulation, including
whole-line-or-region,expand-region,multiple-cursorsAndsmartparens vcAndmagitfor version controldiff-hlAndblamerTo show in-buffer version control information- An extensive collection of termination packages – Vertico,
orderlessconsult,marginaliaAndcompany, - Lisp editing package –
sly,geiserAndadjust-parens(same as parinfer) eatfor terminals- Wise Emacs defaults, and other goodies –
org-superstar,pdf-tools,undo-tree,helpful,rainbow-mode,
use-package Used to keep code organized.
keybinding coverage
An empty command cell means that we have not associated anything with these keys yet.
General
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-S-p |
show command palette | execute-extended-command |
VSCode also associates F1 with this, but for now we’ll leave it to the Emacs help prefixes. |
C-p |
Quick Open, Go to File | consult-locate |
FIXME – Behavior differs from VSCode. Without a search term, VSCode suggests current and recently opened files. Once a search term is entered, it searches for current and recently opened files and files in the currently opened project. |
C-S-n |
new window/example | make-frame |
|
C-w |
close window/instance | idemacs-kill-buffer-noprompt |
|
C-, |
user settings | customize |
|
C-k C-s |
keyboard shortcuts | For this we will have to create an interface. |
VSCode keyboard shortcuts keys not mentioned in PDF
| keybinding | IDEmacs-VSCode Commands | notes |
|---|---|---|
|
idemacs-escape |
VSCode also tries to provide behavior while acting as C-g |
C-a |
idemacs-select-all |
|
C-k C-o |
treemacs-select-directory |
FIXME – Behavior differs from VSCode. This should not only open a directory in Treemacs but also load the corresponding desktop File for it. |
basic editing
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-x |
cut line (empty selection) | cua-cut-handler |
empty selection behavior is TODO |
C-c |
Copy Line (Empty Selection) | cua-copy-handler |
empty selection behavior is TODO |
M- , M- |
move line up/down | drag-stuff-up , drag-stuff-down |
|
C-S-k |
delete row | whole-line-or-region-kill-region |
|
C-RET , C-S-RET |
insert line below/above | idemacs-open-line , idemacs-open-line-above |
|
C-S-\ |
Go to matching bracket | ||
C-] , C-[ |
Indent/Outdent line | ||
/ |
Go to beginning/end of line | move-beginning-of-line / move-end-of-line |
vanilla Emacs defaults |
C- / C- |
Go te beginning/end of file | beginning-of-buffer / end-of-buffer |
vanilla Emacs defaults |
C- / C- |
Scroll line up/down | scroll-down-line / scroll-up-line |
|
M- (Page Up) / M- (Page Down) |
Scroll page up/down | ||
C-S-[ / C-S-] |
folding/unfolding area | ||
सीके सी-[ , C-k C-] |
Fold/unfold all subregions | ||
C-k C-0 , C-k C-j |
fold/expose all areas | ||
C-k C-c |
add line comment | idemacs-comment-line |
In VSCode, subsequent presses add additional comment characters to the beginning of the line, while IDEmacs-VSCode simply toggles the comment. |
C-k C-u |
Delete line comment | idemacs-comment-line |
In VSCode, pressing subsequent removes extra comment characters from the beginning of the line, while IDEmacs-VSCode toggles the comment only. |
C-/ |
toggle line comment | ||
C-S-a |
toggle comment block | ||
M-z |
toggle word wrap | toggle-truncate-lines |
editing rich languages
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-SPC, C-i |
trigger suggestion | ||
C-S-SPC |
trigger parameter signal | ||
C-S-i |
format the document | ||
C-k C-f |
format selection | ||
|
go to definition | xref-find-definitions |
|
C-S- |
oblique definition | ||
C-k |
open definition of party | ||
C-. |
quick fix | ||
S- |
show reference | xref-find-references |
|
|
rename symbol | ||
C-k C-x |
trim trailing spaces | delete-trailing-whitespace |
|
C-k m |
change file language |
Multi-cursor and selection
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
M- |
insert cursor | mc/toggle-cursor-on-click |
|
M-S- , M-S- |
insert cursor up/down | mc/mark-previous-lines , mc/mark-next-lines |
|
C-u |
Undo the last cursor operation | ||
M-S-i |
Insert cursor at the end of each selected line | mc/edit-ends-of-lines |
|
C-l |
select current row | ||
C-S-l |
Select all occurrences of current selection | mc/mark-all-like-this |
|
C- |
Select all occurrences of current word | mc/mark-all-words-like-this |
|
M-S- |
expand the selection | er/expand-region |
|
M-S- |
shrink selection | er/contract-region |
|
M-S- |
column (box) selection | idemacs-mouse-drag-rectangle |
Display
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
|
toggle fullscreen | toggle-frame-fullscreen |
vanilla emacs default |
M-S-0 |
Toggle editor layout (horizontal/vertical) | ||
C-\= , C-- |
zoom in/out | text-scale-increase , text-scale-decrease |
|
C-b |
toggle sidebar visibility | ||
C-S-e |
Show explorer/focus toggle | idemacs-treemacs |
|
C-S-f |
show search | ||
C-S-g |
show source control | magit-status |
|
C-S-d |
show debug | ||
C-S-x |
show extension | list-packages |
We need to write a better interface. Alpaca may be an option. |
C-S-h |
change files | isearch-query-replace |
We need an incremental, multi-file replacement UI. |
C-S-j |
toggle search description | ||
C-S-c |
Open a new command prompt/ terminal | ||
C-k C-h |
show output panel | ||
C-S-v |
Open Markdown Preview | ||
C-k v |
Open Markdown preview on edge | ||
C-k z |
Zen Mode (Esc to exit) |
find and replace
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-t |
show all symbols | ||
C-g |
go to line | consult-line |
|
C-p |
go to File | consult-locate |
FIXME – Behavior differs from VSCode |
C-S-o |
go to symbol | consult-imenu-multi |
FIXME – Behavior differs from VSCode |
C-S-m |
show problem panel | ||
|
Go to next error or warning | ||
S- |
Go to previous error or warning | ||
C-S- |
Navigate editor group history | ||
C-M-- |
go back | ||
C-S-- |
go ahead | ||
C-m |
toggle tab moves focus |
editor management
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-w |
close editor | idemacs-kill-buffer-noprompt |
FIXME – Behavior differs from VSCode |
C-k f |
close folder | ||
C-\ |
split editor | split-window-right |
|
C-1 , C-2 , C-3 |
Focus on first, second, third editor group | select-window-1, select-window-2, select-window-3 |
FIXME – Behavior differs from VSCode |
C-k C- |
Note to previous editor group | ||
C-k C- |
Focus on next editor group | ||
C-S- |
move editor left | ||
C-S- |
move the editor to the right | ||
C-k |
Move active editor group left/up | ||
C-k |
Move active editor group right/down |
file management
| keybinding | vscode description | IDEmacs-VSCode Commands | notes |
|---|---|---|---|
C-n |
new file | untitled-new-buffer |
|
C-o |
open file | find-file |
|
C-s |
save | save-buffer |
|
C-S-s |
save as | write-buffer |
|
C-w |
to close | idemacs-kill-buffer-noprompt |
|
C-k C-w |
stop everything | ||
C-S-t |
reopen closed editor | ||
C-k Enter |
Keep preview mode editor open | ||
C- |
open next | ||
C-S- |
open previous | ||
C-k p |
Copy path of active file | ||
C-k r |
Reveal active file in Explorer | ||
C-k o |
Show active file in new window/instance |
Need help!
User –
- Use IDEMAX. Pay attention to newcomers as they use IDEmacs.
- Provide your feedback in our Jabber/XMPP rooms or issues.
- Tell others about IDEmacs!
Developers –
- View major issues and to-dos in issues and TODO.org
- Search “FIXME” in the source to find small problems
- pull request
- Tell others about IDEmacs!
prior art
-
https://github.com/seamus-brady/mousemacs
From the author –
I made this disgusting thing so I could learn Lisp without worrying too much about learning Emacs. It was originally conceived for me to use on and then off as I learned Emacs. But I actually liked it better and now it’s my editor in chief.
MouseMac works much like Sublime Text or Visual Studio Code out of the box. But underneath that lies the full power of Emacs. All I did was take all the most useful Emacs packages and wrap them into a mouse-friendly distribution. It’s not perfect and certainly not for everyone, but it may be useful for some people. It comes with a simple plain theme but it’s still Emacs.