GitHub - freetonik/castlemacs: Modern, minimalist Emacs for macOS ⌘
source link: https://github.com/freetonik/castlemacs
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.org
Castlemacs: modern, minimalist Emacs for macOS ⌘
Features
- Compatibility with common macOS keybindings
- Ergonomic keybindings that follow simple, sensible rules
- Easy windows management and movement
- Easy movement between points in the file and between files
- Multiple cursors, project manager, Git front end, file tree, terminal
- Handy spellchecker, built-in thesaurus and word definition lookup
- A handful of tiny, useful helper functions
Quick Start
brew install the_silver_searcher aspell mv ~/.emacs.d ~/.emacs.d.bak git clone https://github.com/freetonik/castlemacs ~/.emacs.d
Table of Contents
- Intro
- FAQ
- Installation
- Usage
- Why this name?
Intro
Emacs is an extensible, customizable text editor a framework for creating any text editor you want. The goal of Castlemacs is to build a simple, modern and minimalist Emacs setup tailored to macOS while following these
Core principles
- Be beginner-friendly. Anyone should be able to start using Castlemacs just like they can start using VS Code, Sublime, etc.
- Respect macOS. Common system-wide keybindings work as you expect.
- Respect Emacs. Never break vanilla Emacs compatibility. Always provide a way to go “full Emacs” if user so desires.
- No layers of complexity. No custom configuration layers, no DSL, nothing new. Simple
init.el
, packages installed and configured viause-package
. - Go minimal when possible. For example, use lightweight
avy
instead of full-featuredHelm
.
FAQ
Is Castlemacs compatible with non-macOS systems?
Yes! Nothing binds Castlemacs to macOS except for some conventions. As long as you have some key on your keyboard that can play a role of Super
(e.g. windows
key), you’re good to go.
I don’t know Emacs. Can I use Castlemacs or is it hard?. You don’t need to know Emacs, but it will help. The goal of this project is to make a setup that is suitable for absolute beginners.
Is this similar to Spacemacs? No. Spacemacs is a big, custom distribution with additional layers on top of Emacs. Castlemacs is simply a pre-configured Emacs. You don’t need to learn anything new if you know your way around Emacs.
Will Castlemacs support <something>? Probably, unless it goes against the Core Principles. Feel free to open an issue.
Does this setup work well in the terminal? It works, but it is not built for terminal use, since one of the Core Principles is to behave like a native macOS application.
Why is it called Castlemacs? See Why this name?
Installation
Install Emacs
Best option: download the binary from here. Here is the direct link to download version 26.1-mac-7.1, which is the latest version as of today (Sep 19, 2018).
Unzip and move the file to Applications
, just like any other mac app.
Alternative option 1: Install Emacs via brew. This will build Emacs from source. It might take some time and can possibly fail.
brew tap railwaycat/emacsmacport brew install emacs-mac
Alternative option 2: Install Emacs via brew cask.
brew tap railwaycat/emacsmacport brew cask install emacs-mac
Why not “official” build?
A canonical version of Emacs for macOS can be found at https://emacsformacosx.com/. However, this version has a number of disadvantages:
- Due to some build options related to graphics, certain extensions like Powerline produce incorrect colors (RGB space issue)
- No emoji support (if you’re into this kind of stuff)
- No sub-pixel smooth scrolling
- No native support for
org-protocol
Install dependencies
Castlemacs relies on The Silver Searcher to quickly search within a project. Install it:
brew install the_silver_searcher
Castlemacs requires aspell
, a Free and Open Source spell checker. Install it:
brew install aspell
Install Castlemacs
Backup current Emacs config (if exists), then clone Castlemacs from Github:
mv ~/.emacs.d ~/.emacs.d.bak git clone https://github.com/freetonik/castlemacs ~/.emacs.d
Launch Emacs and wait for several minutes. On the first launch it will download and install packages. When it’s done and the status line in the bottom stops outputting text, restart Emacs.
Don’t worry about warning messages on the first launch, they will go away after first restart.
Setup keyboard
I highly recommend changing Caps Lock to Control by going to System Preferences → Keyboard → Modifier Keys. This way you will have a more comfortable Control under your left pinky.
Usage
Modifier keys
Castlemacs takes advantage of two facts:
Command
key is used in macOS for all major system shortcuts, so users have muscle memory;- Emacs recognizes a
Super
key, but almost never uses it by default.
So, Command
key becomes Super
s
MetaLeft Alt ⌥M
ControlControl ⌃C
In this document we’ll refer to keys with their common macOS names: Cmd, Alt, Ctrl.
Basics
Basic combinations with Command
work as expected.
Escape
Cancel current actionC-g
Cmd-z
Undoc-_
Cmd-Shift-z
RedoN/ACmd-s
Save fileC-x C-s
Cmd-Shift-s
Save file asC-x C-w
Cmd-o
Open fileC-x C-f
Cmd-a
Select whole bufferC-x h
Cmd-q
Quit EmacsC-x C-c
Cmd-Shift-p
Open command paletteM-x
Ctrl-x c
Open config fileN/ANavigation
Basic movement
Buttons I, J, K, L form a natural alternative to arrow keys. You can move around by holding Cmd while using these keys, without leaving the home row (press Cmd with your right thumb).
(See http://tonsky.me/blog/cursor-keys/ for some background and motivation.)
BindingDescriptionEmacs defaultAlternativeCmd-i
Go upC-p
Arrow UPCmd-k
Go downC-n
Arrow DOWNCmd-j
Go leftC-b
Arrow LEFTCmd-l
Go rightC-f
Arrow RIGHTMoving text
Hold Alt
to move current line up or down. This is sometimes called “bubbling”.
Alt-UP
Move line upAlt-DOWN
Move line downSimple jumping within text
Cmd
or Fn
with arrows work just like everywhere else in macOS. Holding Shift
selects the region under movement.
Cmd-LEFT
Beginning of line†C-a
Cmd-RIGHT
End of lineC-e
Cmd-UP
Beginning of bufferM-<
Cmd-DOWN
End of bufferM->
Fn-UP
Page upC-v
Fn-DOWN
Page downM-v
Fn-Alt-UP
Page up other windowC-M-v
Fn-Alt-DOWN
Page down other windowC-M-S-v
† “Beginning of line” is a smart command. It moves cursor to the first non-whitespace character. Press it again, and it moves cursor to the real beginning of line. You can keep pressing it to jump cursor between those two positions.
Smart jumping within buffer and between buffers
Many commands in Emacs write the current position into a mark ring. For example, if you were editing line 6, then performed a search with Cmd+f
, did something and want to come back, press Cmd+,= to go back to line 6. =Cmd+.
to go forward.
Cmd-⸴
Go to prev. markC-u SPC
Cmd-.
Go to next markN/ACmd-<
Go to prev. bufferC-x LEFT
Cmd->
Go to next bufferC-x RIGHT
Holding Shift
‘lifts’ the meaning of this movement, and instead of jumping to a previous/next position in the current buffer, it jumps to a previous/next buffer in current window.
Search and replace
BindingDescriptionEmacs defaultCmd-f
Search in fileC-s
Cmd-r
Visual replaceN/ACmd-Alt-f
Visual replaceN/A
Editing
Words and lines
BindingDescriptionEmacs defaultCmd-RET
New line belowN/ACmd-Shift-RET
New line aboveN/ACmd-/
Comment lineC-x C-;
Cmd-j
Join with next line or join all lines in regionN/AAlt-u
Upcase current word or regionM-u (same)
Alt-l
Downcase current word or regionM-l (same)
Alt-c
Capitalize wordM-c (same)
Deleting text
BindingDescriptionEmacs defaultAlt-BACKSPACE
Delete word backwardsN/AAlt-Shift-BACKSPACE
Delete word forwardsM-d
Cmd-BACKSPACE
Delete current lineN/ACtrl-k
Delete to end of lineCtrl-k
Ctrl-d
Delete characterCtrl-d
Multiple cursors
BindingDescriptionCmd-d
Select next occurrence†Cmd-Shift-d
Select all occurrencesAlt-Cmd-d
Add cursor to each line in region† When no text is selected, Cmd-d
adds new cursor to the next line.
While multiple cursors are active:
BindingDescriptionC-g
or ESC
Quit multiple cursors modeCtrl-’
Hide/show lines where cursors are activeCtrl-v
and Alt-v
Scroll the screen to center on each cursorLearn about all features of multiple cursors at https://github.com/magnars/multiple-cursors.el
Indentation
Emacs is pretty good at indenting stuff automatically. Pressing TAB
on a line or region will indent it as needed. Castlemacs assumes that we never use tabs, only spaces, and use 2 spaces by default in most languages.
TAB
Indent current line or region correctlyC-x TAB
Rigidly change indentation of line or regionRegion
Command with apostrophe expands selection. Holding shift contracts it.
BindingDescriptionCmd-’
Expand regionCmd-Shift-’
Contract regionWindow Management
Note that in Emacs-talk, a pane is called a window
.
Splitting windows
These bindings are based on default Emacs conventions, but save you one keypress. Also, Cmd-w
closes current window just like a browser tab.
Cmd-1
Kill other windowsC-x 1
Cmd-2
Split horizontallyC-x 2
Cmd-3
Split verticallyC-x 3
Cmd-0
Kill current windowC-x 0
Cmd-w
Kill current windowC-x 0
Moving between windows
Move left and right just like in iTerm. Hold shift to make it up and down.
BindingDescriptionAlternativeCmd-[
Move leftCtrl-Cmd-LEFT
Cmd-]
Move rightCtrl-Cmd-RIGHT
Cmd-Shift-[
Move upCtrl-Cmd-UP
Cmd-Shift-]
Move downCtrl-Cmd-DOWN
Restoring window configuration
This is winner-mode
. It captures the current window configuration and allows you to restore it after it gets changed by some Emacs action.
Cmd-Alt-[
Restore previous configurationC-c LEFTCmd-Alt-]
Go to next configuration (undo restore)C-c RIGHTProject Management
Castlemacs uses Projectile for project management. There are a lot of features, and most of them are discoverable from the so-called “command map”.
BindingDescriptionEmacs defaultCtrl-Cmd-p
Open projectile command mapC-c p
Ctrl-Cmd-p
p
Switch projectC-c p p
Cmd-p
Find file in projectC-c p f
Cmd-Shift-f
Search in projectC-c p s s
Note that ‘Emacs default’ doesn’t make much sense in this context, since Projectile is not part of Emacs. I try to provide commonly used combinations for these cases: C-c p
is what Projectile’s author suggests, for example, and many configs follow this suggestion.
While in search mode:
BindingDescriptionCtrl-Alt-m
Preview current fileCtrl-Alt-n
Next file and previewCtrl-Alt-p
Previous file and previewESC
Quit searchGit
Git gutter
Changes to the current file are shown in the gutter on left side. You can change the appearance of those symbols: search for git-gutter
section in init.el
. To see a list of all available colors run Alt-x counsel-colors-emacs
. See Git-gutter docs for more info.
Magit
Castlemacs uses Magit, a wonderful package that aspires to be a complete Git porcelain.
BindingDescriptionCmd-g
Magit statusFrom this status window you can do everything. Here are the basic commands available within Magit status window:
BindingDescriptions
Stage current file or chunkc
Open commit windowF
Open pull windowP
Open push windowThere are cheat sheets available within Magit. Refer to Magit User Manuals for more info.
Terminal (shell)
There is a toggleable popup shell which is actually a full blown terminal emulator (ansi-term
). It uses your system default shell and loads the appropriate environment.
Cmd-=
Toggle shellFile tree and open buffers
BindingDescriptionCmd-b
Switch to another buffer or open recent fileCmd-Shift-b-=
Toggle filetreeProgramming
Languages and modes
Emacs supports many programming languages by default. Castlemacs adds support for YAML, Markdown, Web mode (HTML, CSS, PHP, templating, etc), Emmet.
Feel free to add more features by sending a PR or opening an issue.
Code completion
Code completion popup shows up immediately when possible. When popup is active:
BindingDescriptionEnter
Select current candidateAlt-DIGIT
Quickly complete with one of first 10TAB
Complete common partF1
Show documentation for selected candidateCtrl-w
Show source for selected candidateNote that not all backends support the last two commands.
This feature is provided by Company mode package. Learn more about Company mode at http://company-mode.github.io/
Emmet
BindingDescriptionCtrl-Enter
or Ctrl-j
Expand EmmetLearn more about emmet mode.
Spellchecking, thesaurus, definition
Spellchecking
Spellchecking requires an external command to be available. See Install dependencies.
BindingDescriptionEmacs defaultCmd-\
Correct current word via popupN/ACmd-Ctlr-\
Correct current word via listM-$
The last three lines in the popup allow to add current word to your personal dictionary or accept it as correct for current session (as long as Emacs is open) or current buffer.
When correcting via list, you can press i
to quickly add the word to your personal dictionary.
Note that personal dictionary is located at ~/.aspell.LANG.pws
by default.
Thesaurus
You can quickly search for synonyms. This requires an internet connection since the package uses https://www.powerthesaurus.org/ as backend.
BindingDescriptionCmd-Shift-\
Search for synonyms of current wordSelect a synonym and press Enter
to replace word.
Word definition
This requires an internet connection.
BindingDescriptionAlt-\
Define current word
Org mode
Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system. Learn more about Org at https://orgmode.org/. (Caution! This is a black hole!)
Castlemacs provides some nice defaults:
- Visually indent sections
- Tab in source blocks acts like in corresponding major mode
- Code highlighting works in code blocks
- When TODO changes state, history goes to logbook
- When TODO becomes DONE, current time and date are recorded
- Shift selection with arrows work (unless you’re in a spot where Org mode’s default actions kick in)
Put your org files in ~/org
. If you use Dropbox or similar cloud provider, I suggest storing your actual org folder there, and providing a symlink like so:
ln -s ~/Dropbox/Org ~/org
Org agenda looks inside all the files in ~/org
Why this name?
Castlemacs takes advantage of the heavily used Command key on macOS. The Command key icon ⌘ is a ‘looped square’: it’s known as the place of interest sign when used on information signs, a practice which started in Finland in the 1950s, spreading to the other Nordic countries in the 1960s.
The symbol is derived from a shape of a castle. Here, for example, is the Borgholm Castle in Sweden:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK