#+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