Created: 2021-12-25 sab 02:05
Utilizzando lo schema introdotto nel video precedente possiamo inquadrare i concetti che affronteremo in questo video.
Prima di procedere qualche definizione utile…
Il punto (point) è il luogo in cui emacs inserisce il prossimo carattere che scriviamo.
Ogni buffer ha associato il proprio punto.
In elisp il punto è rappresentato come un intero.
La funzione (point)
ritorna l'intero corrispondente al punto nel
buffer corrente.
Per testare il valore del point possiamo eseguire il seguente
codice elisp, andandolo a copiare in un buffer vuoto e chiamando il
comando eval-buffer
.
(defun print-point()
(interactive)
(message "%d" (point))
)
(global-set-key (kbd "C-c C-y") 'print-point)
Senza entrare nel dettaglio, tale codice definisce una funzione che stampa il valore del punto nel buffer in cui ci troviamo. Tale funziona viene bindata al keybind
C-c C-y
.
Esempio di utilizzo (vedere il minibuffer)
Inizio buffer
Fine buffer
Il cursore (cursor) invece rappresenta il "punto grafico", ovvero ciò che possiamo vedere visivamente mentre scriviamo.
Il cursore è il riquadro sopra la lettera i
Possiamo cambiare il tipo di cursore utilizzato tramite la
variabile cursor-type
. I valori possibili sono
t use the cursor specified for the frame nil don’t display a cursor box display a filled box cursor hollow display a hollow box cursor bar display a vertical bar cursor with default width (bar . WIDTH) display a vertical bar cursor with width WIDTH hbar display a horizontal bar cursor with default height (hbar . HEIGHT) display a horizontal bar cursor with height HEIGHT ANYTHING ELSE display a hollow box cursor
Tra i particolari valori i più interessanti sono box
e bar
.
Cursore box
Cursore bar
Quando utilizziamo un cursore tipo box, ovvero quando il cursore appare sopra un carattere, il punto è immediatamente prima del carattere. Questo significa che la successiva lettera sarà scritta alla sinistra di quella coperta dal cursore.
Se invece utilizziamo un cursore di tipo bar, allora il punto è nella stessa posizione del cursore.
I movimenti base del cursore sono i seguenti
Keybind | Comando |
---|---|
C-p | previous-line |
C-n | next-line |
C-b | backward-char |
C-f | forward-char |
Graficamente
Inizialmente i keybinds per muoversi in Emacs potrebbero confondere, specialmente a chi non è abituato a questa tipologia di software (Emacs/Vim/Unix).
Detto questo, c'è una chiara e semplice motivazione dietro a questi keybinds: non allontanare la posizione delle mani dal centro della tastiera
Infatti, il tempo impiegato per muoversi dal centro dalla tastiera al mouse, per quanto piccolo possa essere, diventa significativo quando consideriamo il numero di volte in cui dobbiamo farlo.
Utilizzando i keybinds di Emacs siamo in grado di restare sempre al centro della tastiera, in modo da avere accesso alla maggior parte dei tasti senza dover spostare la mano.
Consideriamo la mia tastiera…
Oltre ai movimenti base, che ci spostano di un carattere alla volta, ci sono altri keybinds che ci permettono di effettuare degli spostamenti più ampi.
Keybind | Comando |
---|---|
M-f | forward-word |
M-b | backward-word |
Keybind | Comando |
---|---|
C-a | (beginning-of-visual-line) |
C-e | (end-of-visual-line) |
Keybind | Comando |
---|---|
M-a | (backward-sentence) |
M-e | (forward-sentence) |
Keybind | Comando |
---|---|
M-{ | (backward-paragraph) |
M-} | (forward-paragraph) |
Oltre a muovere il cursore, è possibile anche muovere lo schermo, ovvero la sezione del buffer visibile. Questa tipologia di movimenti sono molto utili quando abbiamo a che fare con file molto grandi.
Il movimento dello schermo può essere effettuato sia con il mouse che automaticamente muovendo il cursore.
Abbiamo poi i seguenti keybinds
Keybind | Comando |
---|---|
C-v | scroll-down-command |
M-v | scroll-up-command |
M-< | beginning-of-buffer |
M-> | end-of-buffer |
C-l | recenter-top-bottom |
Infine, troviamo i seguenti comandi
Keybind | Comando |
---|---|
- | goto-line |
- | goto-char |
che sono molto utili quando dobbiamo, ad esempio, capire un errore di compilazione.
Assegnare il comando goto-line
ad un keybind a scelta, e
utilizzarlo.
Aprire un file e muoversi nel file utilizzando solamente i keybinds per il movimento base, senza arrows né mouse.
Cambiare lo stile del cursore al valore hbar
.