-- Leo's gemini proxy

-- Connecting to it.omarpolo.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=it

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 $

-- Response ended

-- Page fetched on Thu Mar 28 09:41:30 2024