Emacs Notes
Table of Contents
- Resources
- Linking to info pages
- How to read key commands
- Basic movement keys
- Using marks for navigation
- Keyboard macros
- Keyboard macro counters
- Recursively search for a file by name
- Recurively search file files with given content
- File Local Variables
- Directory Local Variables
- Dired Edit Mode
- C Indent Style
- Buttons
- Optional / Variadic Function Arguments
- View Emacs Build Information
- Convert from decimal to hex
- Using Emacs Serial Terminal
Resources
- Emacs manual,
C-h ito access info pages from within Emacs - Mastering Emacs blog and book
- Discovering Emacs Podcast Notes
Linking to info pages
- The info function passed with the file or node will load the info section
(info "elisp")
- When you want to go to a specifc node a info file place the file name in parenthesis
(info "(elisp) Simple Macro")
- The path to a particular node can be seen in the mode line in the info buffer
- If viewing in Emacs you can evaluate the S-Expression with
C-x C-e - This will take you straight to the info page
How to read key commands
Cmeans the control keyMmeans the meta or alt / option keySmeans shift keysmeans super or windows or command key- Combinations of keys are listed with hypens between them
C-M-xmeans press Control Alt and x all at the same time- Key chords are defined with spaces between them
C-c C-cmeans press Control and c at the same time then press then release then press them again- There is no timeout between chord keys
- When you start typing a chord you will see the progress through the chord in the echo area
Basic movement keys
C-fmove forward one characterC-bmove back by one characterM-fmove forword by one wordM-bmove backward by one wordC-emove to the end of the current lineC-amove to the beginning of the current lineM-emove to the end of the current sentenceM-amove to the beginning of the current sentenceM-mmove to the first non-whitespace character on the lineM->move to end of bufferM-<move to beginning of buffer
Using marks for navigation
- To add to the mark ring use
C-SPC C-SPC - To jump to mark use
C-u C-SPC - More info here
(info "(emacs) Mark Ring")
- If you want to clear the mark ring use
(setq mark-ring nil)to empty the variable
Keyboard macros
- Execute this lisp function to load the info page on keyboard macros (info "(emacs) Keyboard Macros")
- To start recording a keyboard macro use
C-x (or<F3> - Once recording has started you will see
Defin the mode line - If you press
C-gyou will cancel recording the keyboard macro - Once you have finished typing the macro commands press
C-x )or<F4> - To repeat the macro continue pressing
<F4> - Use the function
name-last-kbd-macroto give a name to the macro at the top of the ring - Once named you can invoke a keyboard macro like any other interactive function with
M-x <NAME_OF_MACRO> - If you want to see the lisp behind the macro you can run
M-x insert-kbd-macro
Keyboard macro counters
- Each keyboard macro has a counter that increments each time it is inserted
- To insert the current counter value in the buffer use
C-x C-k C-corkmacro-insert-counter
Recursively search for a file by name
Use M-x find-name-dired it will prompt you for a folder to recursively search then it prompt you for the file name.
Recurively search file files with given content
Use M-x rgrep it wil prompt for the thing you are looking for in the files, followed by the wildcard of the files to include(ivy will do a completing read for this and prepend the current path but just type the wild card pretending it is not there) and lastly the base directory.
File Local Variables
- EmacsWiki: File Local Variables
- It is possible to set the value of a variable local only to a file in Emacs
- When you do this, Emacs will prompt you if you want to set those variables before actually doing it
- This might be handy in an org mode file with a lot of code blocks, so you want to inhibit the evaluation check
- Use
M-x add-file-local-variableto interactively add a file local variabel to a buffer
Directory Local Variables
- You can similarly add directory local variables with
M-x add-directory-local-variable - This link covers using hooks with buffer / directory local variables
Dired Edit Mode
C-x C-qenters dired edit mode- In this mode you can edit the names of files as you would in a normal buffer
- When finished type
C-c C-cthis will execute all the queued changes
C Indent Style
- When in
c-modeuse the commandc-set-style(C-c .) to change the indent style gnustyle is the default and uses 2 spaces for indent- The
Buttons
- Info page on buttons, (info "(elisp) Buttons")
- Below is code that creates a hello world button that displays the message "Hello, World"
(defun ajr-hello-world-button-pressed (button) (message "Hello, World!")) (define-button-type 'ajr-hello-world-button 'action 'ajr-hello-world-button-pressed 'follow-link t 'help-echo "Click to say \"Hello, World!\"") (insert-button "Hello, World" :type 'ajr-hello-world-button)
Optional / Variadic Function Arguments
Optional
- Info page on argument lists, (info "(elisp) Argument List")
- Use the
&optionalkeyword to indicate a param is not required - When an optional value is not supplied it will be
nil - Required arguments cannot follow optional ones in the argument list
Variadic / Rest
- When the last argument of the argument list is
&rest <NAME_OF_REST_VAR>the function will accept any number of arguments - The rest variables will be stored in a list with the given name
- The below example shows using higher order functions with optional params
(defun ajr-example-opt-var-low (a b &optional c &rest d) (append (list a) (list b) (list c) d)) (defun ajr-example-opt-var-high (&optional c &rest d) (ajr-example-opt-var-low "higher" "order" c d)) (ajr-example-opt-var-high "args" 1 2 3 4 5 6 7 8 "...")
View Emacs Build Information
- To view the version of Emacs you are current using run the
emacs-versionfunction - To view the features compiled in read the
system-configuration-featuresvariable
Convert from decimal to hex
(format "%x" 123)
Using Emacs Serial Terminal
- Mastering Emacs: Running Shells in Emacs Overview
- Emacs has a serial terminal capable of talking to serial devices on your computer
- To start the serial terminal use
M-x serial-term - This will use
termmode so you will need to useC-c C-jto enter line mode andC-c C-kto return to char mode