Introduction

Welcome to Neomacs, the structural Lisp system!

Run command by name: execute-command (M-x). Quit Neomacs: kill-neomacs (C-x C-c). Show index of manual: M-x manual. Describe key: M-x describe-key.

Managing windows and buffers

Buffer commands: switch-to-buffer (C-x b), delete-buffer (C-x k)

Window commands: other-window (C-x o), split-window-below (C-x 2), split-window-right (C-x 3), close-window (C-x 0), delete-other-windows (C-x 1)

See window management commands and buffer management commands for more details.

Switch to *scratch* buffer to play with some Lisp!

Editing files

Command (C-x C-f): find-file (path)
Edit file at PATH.

To get started, see motion, editing commands, undo commands and clipboard commands.

Motion: forward-node (C-f), backward-node (C-b), forward-word (M-f), backward-word (M-b), forward-element-end (C-M-f), backward-element (C-M-b), next-line (C-n), previous-line (C-p), scroll-down-command (C-v), scroll-up-command (M-v).

Search: search-forward (C-s), search-backward (C-r).

Undo: undo-history (C-x u). Once undo history view is active, use undo-command (p), redo-command (n), previous-branch (b), next-branch (f) to time travel.

Clipboard: cut-element (C-w), copy-element (M-w), paste (C-y), paste-pop (M-y), set-selection (C-space).

Hacking Lisp

Inside lisp-mode buffers (e.g. the *scratch* buffer): eval-last-expression (C-x C-e), eval-print-last-expression (C-c C-p). Unprintable objects are printed as presentations, which looks like this: #<OBJECT ...>. Pressing enter on presentations opens the inspector.

Compile top-level form or file: compile-defun (C-c C-c), lisp-compile-file (C-c C-k).

Lookup definition of focused symbol: goto-definition (M-.).

Enable Neomacs debugger: M-x toggle-debug-on-error. Inside the debugger, press a to abort, press c to continue, press v on a stack frame to view its function definition.

Use the terminal (Linux)

M-x term to open the terminal emulator. The terminal opens in insert mode by default, which sends most key strokes to the terminal and synchronize the cursor with the terminal. A few key strokes (e.g. C-x and C-c) are not sent to the terminal, to send them, use term-quote-send-key (C-q). To scroll back and copy contents, press C-c C-j to turn off terminal-insert-mode. Once you are done, press C-c C-k to enable terminal-insert-mode again.

Browsing Web

Command (C-x C-l): find-url (url-or-query)
Open or search for URL-OR-QUERY.

Open links: add-hint (M-g g), add-hint-ctrl (M-g M-g). Refresh: revert-buffer (s-u). Copy URL: web-copy-url (C-c w). Full screen mode to reduce distraction: toggle-fullscreen (C-c C-f).

History navigation: web-go-backward (C-c b), web-go-forward (C-c f). There is also a global history accessible via list-web-history and is used for find-url completion.

Adblocker is enabled on Neomacs startup by default. To temporarily disable/re-enable it, M-x install-adblocker/M-x uninstall-adblocker. To disable it on startup, add the following to your init.lisp: (setq *startup-hooks* (remove 'install-adblocker *startup-hook*))

Configuration

Neomacs loads the config file (uiop:xdg-config-home "neomacs" "init.lisp") (usually located at ~/.config/neomacs/init.lisp on Unix-like systems) on startup if it exists. You can put Lisp code in the config file to customize Neomacs. You can also evaluate Lisp expressions in the *scratch* buffer to try out customization, which takes effect immediately and throughout the current Neomacs session.

Example of customizing style: (set-style 'default '(:color "#f00")). To revert this change, evaluate (apply-theme :default). See Styles for more details.

Turning off funny sound effects: (setq *error-hook* 'do-nothing *quit-hook* 'do-nothing)

Example of adding key binds: (define-keys :global "s-o" 'find-file). See Defining keys for more details.

Some keyboard layout might need to set input method to function fully (e.g. dead keys). Enabling dead keys for Spanish: (setq *input-method-function* 'simple-input-method)