Frames, Windows e Buffers (in Emacs)

Leonardo Tamiano

Created: 2021-12-25 sab 02:05

Table of Contents

Overview

Utilizzando lo schema introdotto possiamo inquadrare i concetti che affronteremo in questo video.

Frames

Nel linguaggio di Emacs, per frame si intende la finestra GUI che contiene che contiene il programma in un ambiente grafico come X11.

Due frames aperti.

È possibile modificare le dimensioni del primo frame aperto con il seguente codice LISP

(setq initial-frame-alist '((top . 50)
                            (left . 150)
                            (width . 70)
                            (height . 20)))

Alcuni keybinds per gestire i frame sono i seguenti

Keybind Comando
C-x 5 2 make-frame
C-x 5 o other-frame

Windows

Per Emacs una window (finestra) è una porzione dello schermo visibile.

Un frame di Emacs può essere diviso in più finestre (windows).

Frame diviso in tre windows.

Ciascuna finestra mostra una porzione di un buffer. Oltre al contenuto del buffer (tipicamente testo), a ciascuna finestra sono associate le seguenti informazioni:

  • Modeline.
  • Major Mode / Minor Modes attive.
  • Posizione del point nel buffer.

Informazioni per windows .

In generale è possibile avere più windows contenenti lo stesso buffer.

Due windows aperte sullo stesso bufffer.

In ogni momento è presente un solo cursore, che rappresenta la finestra attiva (active window) su cui si sta lavorando.

Il cursore si trova nella finestra attiva (quella in nalto).

Per gestire le finstre si utilizzano i seguenti keybinds

Keybind Comando
C-x 2 split-window-vertically
C-x 3 split-window-horizontally
C-x o other-window
C-x 0 delete-window
C-x 1 delete-other-window

Oppure i seguenti (meno utili)

Keybind Comando
  delete-windows-on
C-x ^ enlarge-window
  shrink-window
C-x + balance-windows

Buffers

I buffers sono i contenitori di contenuto. In altre parole, sono i luoghi in cui lavoriamo sempre mentre utilizziamo Emacs.

Le finestre (e i frame) sono i modi per mostrare il contenuto di uno o più buffers.

Alcuni buffer sono "speciali", in quanto vengono creati e gestiti interamente da Emacs. Tra questi troviamo il buffer Messages e il buffer scratch.

Tramite il comando C-x C-f possiamo aprire il contenuto di un file all'interno di un nuovo buffer.

Il nome del nuovo buffer corrisponderà al nome del file, a meno di ononimi.

Due file con lo stesso nome, ma in diverse cartelle, aperti contemporanemente.

Tramite il keybind C-x b, che chiama il comando (switch-to-buffer), siamo in grado di

  1. Cambiare il buffer attuale.
  2. Creare un nuovo buffer senza associarlo ad alcun file.

In ogni dato momento vediamo solo una piccola parte dei buffer attivi. Per vedere tutti i buffer attivi ci sono tre modi diversi:

  1. Tramite la buffer list.
  2. Tramite il buffers menu.
  3. Tramite il buffer pop-up menu.

Per accedere alla buffer list possiamo utilizzare il keybind C-x C-b, o, equivalentemente, il comando (list-buffers).

Buffer list.

Il buffers menu invece fa parte della GUI di Emacs.

Buffer menu.

Infine, il buffer pop-up menu fa sempre parte della GUI di Emacs, e può essere attivato premendo CTRL + left mouse click.

Buffer pop-up menu.

Una volta aperta la buffer list, possiamo esegurie vari comandi, tra cui

Keybind Descrizione
1 metti in full screen il buffer puntato
f mostra buffer puntato su finestra attuale
o mostra buffer puntato su altra finestra
d, k mark per deletion

e anche

Keybind Descrizione
s salva il buffer
u unmark
x esegui comandi sui buffer marcati
q quit

In generale, per gestire i buffers al di fuori della buffer list i seguenti keybinds sono utili

Keybind Comando
C-x b switch-to-buffer
C-x C-b list-buffers
C-x k kill-buffer
  rename-buffer
C-x C-q read-only-mode

La read-only-mode è utile quando vogliamo essere sicuri di non modificare il contenuto di un file.

Read only mode

Altri keybind (meno utili) sono

Keybind Comando
C-x s save-some-buffers
  kill-some-buffers