IDEmacs/IDEmacs: Making Emacs beginner-friendly, via configurations that emulate mainstream IDEs

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…

  1. Programmers coming to Emacs from other IDEs, or even first-time programmers who are only familiar with Office applications.
  2. 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.
  3. Non-programmers who want a fully featured Org, Markdown or LaTeX editor with idiomatic shortcuts and a mouse-friendly GUI.

It provides…

  1. GUI and mouse supportIn addition to a keyboard-driven interface.

  2. 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.
  3. 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.

https://codeberg.org/IDEmacs/IDEmacs/media/branch/production/img/Screenshot%20from%202024-06-27%2000-51-42.png

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 –

  1. VSCode Dark Plus Theme
  2. TreeMax (“Explorer”) for sidebar file browser
  3. Centaur Tabs for tab bar
  4. breadcrumb To show file path as breadcrumbs
  5. idle-highlight-mode To automatically highlight occurrences of the symbol at the point
  6. 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.
  7. All editing packages required for emulation, including whole-line-or-region, expand-region, multiple-cursorsAnd smartparens
  8. vc And magit for version control
  9. diff-hl And blamer To show in-buffer version control information
  10. An extensive collection of termination packages – Vertico, orderlessconsult, marginaliaAnd company,
  11. Lisp editing package – sly, geiserAnd adjust-parens (same as parinfer)
  12. eat for terminals
  13. 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 –

  1. Use IDEMAX. Pay attention to newcomers as they use IDEmacs.
  2. Provide your feedback in our Jabber/XMPP rooms or issues.
  3. Tell others about IDEmacs!

Developers –

  1. View major issues and to-dos in issues and TODO.org
  2. Search “FIXME” in the source to find small problems
  3. pull request
  4. Tell others about IDEmacs!

prior art

  1. 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.



Leave a Comment