💾 Archived View for it.omarpolo.com › articoli › pillole-di-emacs-016 captured on 2023-03-20 at 17:43:24. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-11-30)

-=-=-=-=-=-=-

016 — Pillole di Emacs: copy-from-above-command

copy-from-above-command è una di quelle piccole gemme che sembrano banali, ma sono in realtà implementate con molta attenzione e sono difficili da trovare in editor non “storici” come Emacs.

Quello che fa è copiare i caratteri dalla precedente riga non vuota, a partire dalla posizione del cursore. Messa così non sembra molto comoda, ma immaginiamo di trovarci in una situazione del genere

x = do_stuff(5)
y =

con il cursore subito dopo l’uguale. Eseguendo ‘M-x copy-from-above-command RET’ emacs in automatico copierà “do_stuff(5)”, lasciando il cursore a fine riga.

EmacsWiki “Copy from above”

Prendendo l’idea dalla wiki di emacs, ho bindato la freccia in su e quella in giù a delle varianti di copy-from-above-command (con qualche modifica ovviamente)

(define-key prog-mode-map [up] #'copy-from-above-command)

(defun op/dup-line ()
  "Duplicate the current line, using `copy-from-above-command'."
  (interactive)
  (save-excursion
    (forward-line 1)
    (open-line 1)
    (copy-from-above-command))
  (call-interactively #'next-line))
(define-key prog-mode-map [down] #'op/dup-line)

op/dup-line in particolare mi piace perché a differenza di altri metodi per copiare una riga, mantiene il cursore nella stessa colonna.

Mentre lavoravo al codice per la gestione degli zip ho dovuto spesso scrivere righe di codice simili, come ad esempio

memcpy(&crc, entry + 16, sizeof(crc));
memcpy(&size, entry + 20, sizeof(size));
memcpy(&osize, entry + 24, sizeof(osize));

crc = le32toh(crc);
size = le32toh(size);
osize = le32toh(osize);

e tra copy-from-above-command e op/dup-line è stato piuttosto veloce come operazioni.

$BlogIt: index.gmi,v 1.1 2021/10/20 07:43:16 op Exp $