Emacs
Table of Contents
Emacs
Last time I compiled Emacs (Emacs 29.4):
./configure --with-imagemagick --with-x-toolkit=gtk3 --with-modules --with-json --with-native-compilation --with-xwidgets
Code snippets
General
- Disable
Meta
behavior in Emacs for right Option key
Rif.: apple.stackexchange.com
(when (eq system-type 'darwin) (setq mac-right-option-modifier 'none))
- Generic function to get JSON data from a URI
(require 'json) (defun get-json-data (url) (with-current-buffer (url-retrieve-synchronously url) (goto-char (+ 1 url-http-end-of-headers)) (json-read-object)))
- Org 2 Webjump list
Convert a list of bookmarks (expressed in a org document) in a data structure suitable for webjump.
(require 'cl) (defun get-webjump-sites () "converts a org document in a data structure suitable for webjump" (let ((regex "\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]\\]")) (with-current-buffer (get-file-buffer "~/Dropbox/stefanorodighiero.net/links.org") (loop for i in (org-map-entries 'org-entry-properties nil 'file) for item-string = (cdr (assoc "ITEM" i)) if (string-match regex item-string) collect `(,(match-string 2 item-string) . ,(match-string 1 item-string))))))
Elfeed
Download the image under the cursor
(defun shr-download-image () "Downloads the image under point" (interactive) (let ((url (get-text-property (point) 'image-url))) (if (not url) (message "No image under point!") (url-copy-file url (expand-file-name (url-file-nondirectory url) "~/Pictures/elfeed/"))))) (define-key elfeed-show-mode-map "D" #'shr-download-image)
Helm
An example of a custom-made Helm menu based on current buffer contents
(defun helm-subroutines () (interactive) (helm :sources '(((name . "Perl subroutines") (volatile) (headline "^sub ")))))
Switch theme
Disables all enabled themes before activating the new one:
(defun switch-theme (theme) (interactive (list (intern (completing-read "Switch to custom theme: " (mapcar 'symbol-name (custom-available-themes)))))) (dolist (curr custom-enabled-themes) (disable-theme curr)) (load-theme theme))
Increase text size
Increase text size for all the existing buffers matching a certain major-mode.
(defun increase-text-scale-in-buffer-group (major-mode-name) "Increment text scale for all buffers matching a give major mode name" (interactive (list (intern (completing-read "Select major mode from the list: " (remove-duplicates (mapcar (lambda (b) (buffer-local-value 'major-mode (get-buffer b))) (buffer-list))))))) (cl-loop for buffer in (buffer-list) when (string= (buffer-local-value 'major-mode (get-buffer buffer)) major-mode-name) do (with-current-buffer buffer (text-scale-increase 1))))
Create thumbnail
(defun create-thumbnail (filename) (let* ((dir (file-name-directory filename)) (basename (file-name-base filename)) (extension (downcase (file-name-extension filename))) (thumb-filename (concat dir basename "-thumb." extension))) (call-process "convert" nil nil nil "-resize" "25%" filename thumb-filename) thumb-filename))
Clone indirect buffer in another frame
Rif.: Superuser
(global-set-key [?\C-x ?5 ?c] '(lambda(newname display-flag) "Like `clone-indirect-buffer-other-window' but display in another frame." (interactive (progn (if (get major-mode 'no-clone-indirect) (error "Cannot indirectly clone a buffer in %s mode" mode-name)) (list (if current-prefix-arg (read-buffer "Name of indirect buffer: " (current-buffer))) t))) (save-window-excursion (let ((newbuf (clone-indirect-buffer newname display-flag))) (switch-to-buffer-other-frame newbuf)))))
Dired
Rif.: Emacswiki
(setq dired-dwim-target t)
org-babel: create a SQLite DB based on a table
In a sqlite
src block:
#+begin_src sqlite :db /tmp/test.db :var orgtable=log :colnames yes drop table if exists sleep; create table sleep (day text, up text, in_bed text); .mode csv sleep .import $orgtable sleep #+end_src
Keys and commands
General
Key sequence | Command | Elisp function |
---|---|---|
C-x r t |
Rectangle: prefix | |
C-c C-x C-v |
Toggle inline image mode | |
M-g M-g |
Goto line… | |
C-u C-x C-e |
Eval and insert output at point | |
M-0 C-k |
Kill and yank backwards | |
C-s C-w |
Appends the rest of the word under the cursor to the search pattern | |
C-fx C-m f |
Set the file coding-system of the current buffer |
- To search and replace across files in a project
M-x
counsel-projectile-ag
. When we're ok with the list found,M-q
. The user will be asked for the string to use to replace the occurrences, then guided through the places where the change will take place, for review. It can be useful to then useprojectile-save-project-buffers
.
Dired
Key sequence | Command | Elisp function |
---|---|---|
+ |
Create directory | |
m/u |
Mark/Unmark for deletion | |
Q | Search&replace on marked files | |
C-x C-q |
Edit mode | |
C-c C-c |
(in edit mode) Apply changes | |
C-c C-k |
(in edit mode) Cancel | |
# |
Flag all auto-save files (files whose names start and end with ‘#’) for deletion | |
~ |
Flag all backup files (files whose names end with ‘~’) for deletion | |
% & |
Flag for deletion all files with certain kinds of names which suggest you could easily create those files again. |
Org-mode
Key sequence | Command | Elisp function |
---|---|---|
C-c c |
Capture | |
C-c C-w |
Refile | (org-refile) |
C-c C-t |
Toggle state | |
C-c C-d |
Add deadline | |
C-c / |
Sparse tree | (org-sparse-tree) |
C-c C-x b |
Show the current subtree in an indirect buffer | (org-tree-to-indirect-buffer) |
Markdown mode
Key sequence | Command | Elisp function |
---|---|---|
C-c C-s b |
Insert blockquote | (markdown-insert-blockquote) |
C-c C-c p |
Preview |
eww
Key sequence | Command | Elisp function |
---|---|---|
H |
Show browsing history | |
l |
(eww-back-url) |
|
w |
Copy current page URL | (eww-copy-page-url) |
Helm
Key sequence | Command | Elisp function |
---|---|---|
C-x c C-x C-f |
(helm-find-files) |
|
C-Space |
Mark buffers in helm-mini | |
M-S-d | Delete marked buffers in helm-mini |
SLIME
Key bindings
Key sequence | Command | Elisp function |
---|---|---|
C-M-i |
Complete symbol | |
C-M-x |
Evaluate the current toplevel form | slime-eval-defun |
<Leader> !p |
Change package |
<Leader>
is comma (,)
.
Snippets
This comes from #lisp IRC channel: "when you are in a slime repl window, slime-process
will return that instance process", so
(switch-to-buffer (process-buffer (slime-process)))