#+TITLE: Keybinds in Emacs #+AUTHOR: Leonardo Tamiano #+OPTIONS: num:nil toc:1 #+REVEAL_THEME: cyberpunk #+REVEAL_TRANS: linear #+REVEAL_EXTRA_CSS: local.css * Overview #+REVEAL: split Utilizzando lo schema introdotto nel video precedente possiamo inquadrare i concetti che affronteremo in questo video. #+REVEAL: split #+REVEAL_HTML: * Nozioni Base #+REVEAL: split Introduciamo adesso due requisiti necessari per poter conoscere il funzionamento dei *keybinds* in Emacs. ** Modificatori #+REVEAL: split I *modificatori* sono dei tasti che modificano il comportamento degli altri tasti. Un tipico modificatore è il tasto ~SHIFT~, che ci permette di scrivere le lettere in MAIUSCOLO. #+REVEAL: split In emacs i modificatori più comunemente utilizzati sono i seguenti - *CONTROL*, abbreviato con *CTRL* o *C*. - *META*, abbreviato con *M*. - *ESC*, può essere utilizzato per simulare il *META* premendolo e poi rilasciandolo. - *SHIFT*. Tipicamente però bastano e avanzano i primi due (control e meta). *** Meta? #+REVEAL: split Il nome *meta* potrebbe confondere, dato che nelle tastiere moderne non appare nessun tasto con questo nome. #+REVEAL: split Questo nome, come altri nomi in Emacs, è stato ereditato dalle tastiere del passato, che contenevano anche un tasto meta. #+REVEAL_HTML: #+REVEAL_HTML:

Source: Wikipedia

#+REVEAL: split In ogni caso, il tasto meta non è altro che il moderno tasto *alt* (quello a sinistra). #+REVEAL_HTML: #+REVEAL_HTML:

Source: snappygoat.com

** Notazione #+REVEAL: split I modificatori sono combinati assieme ad altri tasti della tastiera per formare delle sequenze particolari di tasti. #+REVEAL: split Per descrivere queste sequenze viene utilizzata la seguente notazione: #+begin_example C-, per dire: ------------------- tieni premuto il modificatore CONTROL, e premi il tasto . #+end_example #+begin_example M-, per dire: ------------------- tieni premuto il modificatore META, e premi il tasto . #+end_example #+REVEAL: split Ad esempio... #+begin_example C-x ---> Tieni premuto CTRL e premi x C-c ---> Tieni premuto CTRL e premi c M-h ---> Tieni premuto META e premi h #+end_example #+REVEAL: split Certe volte possiamo combinare queste sequenze atomiche tra loro per ottenere sequenze più complesse #+begin_example - , per dire: ----------------------------------- tieni premuto , premi il tasto , rilascia e premi i restanti tasti in . #+end_example #+REVEAL: split Ad esempio... #+begin_example C-x M-n ---> Tieni premuto CTRL, premi x, rilascia CTRL tieni premuto Meta, premi n C-h M-x ---> Tieni premuto CTRL, premi h, rilascia CTRL tieni premuto Meta, premi x #+end_example #+REVEAL: split Nel caso in cui la coppia - successiva condivide lo stesso modificatore della coppia precedente, non dobbiamo rilasciare il modificatore, ma possiamo direttamente premere il prossimo carattere. #+begin_example C-c C-e ---> Tieni premuto CTR, premi 'x' e poi 'e' C-x C-s ---> Tieni premuto CTR, premi 'x' e poi 's' #+end_example * Keybinds Fondamentali #+REVEAL: split Ad alcune *sequenze di tasti* in Emacs possiamo associare un particolare *comando*, identificato tramite il nome simbolico della rispettiva funzione elisp che implementa tale comando. Questa associazione viene effettuata tramite l'operazione di *binding*. #+REVEAL: split Un *keybind* è quindi un tasto (o una particolare sequenza di tasti) a cui è stato associato un comando. #+REVEAL_HTML: Quando premiamo correttamente il keybind, Emacs eseguirà il comando associato al keybind tramite il binding. #+REVEAL: split Andiamo adesso a vedere i keybinds associati ai comandi più importanti in Emacs. ** Generali #+REVEAL: split Tra i keybind fondamentali da sapere, troviamo sicuramente i seguenti |---------+----------------------------| | *Keybind* | *Comando* | |---------+----------------------------| | C-x C-c | save-buffers-kill-terminal | | C-g | keyboard-quit | |---------+----------------------------| ** Movimento #+REVEAL: split Per quanto riguarda il *movimento (base)* del cursore troviamo |---------+---------------| | *Keybind* | *Comando* | |---------+---------------| | C-p | previous-line | | C-n | next-line | | C-b | backward-char | | C-f | forward-char | |---------+---------------| ** Text Editing #+REVEAL: split I comandi di base per fare *text editing* invece sono |---------+-----------------------| | *Keybind* | *Comando* | |---------+-----------------------| | C-x C-f | find-file | | C-x C-v | find-alternative-file | | C-x C-s | save-buffer | | C-x C-w | write-file | |---------+-----------------------| ** Documentazione Interna #+REVEAL: split Riportiamo infine i comandi utilizzati per accedere alla *documentazione interna*. |---------+-------------------| | *Keybind* | *Comando* | |---------+-------------------| | C-h k | describe-key | | C-h f | describe-function | | C-h v | describe-variable | |---------+-------------------| * Esercizi #+REVEAL: split Nel corso dei video proporro per ogni argomento introdotto una serie di esercizi. Consiglio a coloro interessati ad imparare Emacs di provare a svolgere gli esercizi per conto proprio, e solo successivamente vedere come io li svolgo nel video. ** Task #1 #+begin_example Aprire Emacs Aprire nuovo file Copiare il testo che segue nella slide successiva a mano Salvare il file Chiudere Emacs #+end_example #+REVEAL: split Il testo da copiare è il seguente, ed è ripreso dal Castello di Kafka. #+begin_example Amalia invece non si è limitata a sopportare la pena, lei aveva anche l'intelligenza per capirla fino in fondo; noi scorgevamo solo le conseguenze, lei anche la causa, noi speravamo in qualche mezzuccio, lei sapeva che tutto era ormai deciso, noi potevamo bisbigliare fra di noi, lei non poteva che tacere: lei si trovava faccia a faccia con la verità, eppure ha vissuto e sopportato questa vita, oggi come allora. Noi tutti, pur nella nostra miseria, stavamo meglio di lei. #+end_example ** Task #2 #+begin_example Aprire Emacs Aprire file /etc/passwd Salvare il file in ~/my_passwd Modificare il file a piacimento Salvare il file Chiudere Emacs #+end_example ** Task #3 #+begin_example Aprire Emacs Cercare il file ~/nomelungo.txt Annullare il comando precedente prima di aprire il buffer Chiudere Emacs #+end_example ** Task #4 #+begin_example Aprire Emacs Leggere la doc. della funzione "insert-file" Leggere la doc. del keybind "C-h t" Leggere la doc. della variable "inhibit-startup-screen" #+end_example * Extra (codice elisp) #+REVEAL: split Per finire, voglio riportare brevemente come extra del codice elisp che può essere utilizzato per create o modificare i keybinds in Emacs. #+REVEAL: split Il codice è il seguente, e fa utilizzo della funzione ~global-set-key~ #+begin_src emacs-lisp (global-set-key (kbd "C-x t") 'mu4e) (global-set-key (kbd "C-c q") 'query-replace) (global-set-key (kbd "C-c v") 'my/vterm-window-split) #+end_src