La mia domanda si basa su this answer by Trey Jackson a this question from SyntaxT3rr0r.Lasciare la regione selezionata dopo l'operazione emacs
Trey propone la seguente funzione per l'incremento di ciascun numero a due cifre nell'area selezionata di un buffer Emacs.
(defun add-1-to-2-digits (b e)
"add 1 to every 2 digit number in the region"
(interactive "r")
(goto-char b)
(while (re-search-forward "\\b[0-9][0-9]\\b" e t)
(replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))
Vorrei utilizzare questa funzione per i miei scopi. Tuttavia, vorrei aumentare i numeri più volte in successione. Il problema con la funzione, nella sua forma attuale, è che prima di ogni invocazione, devo selezionare nuovamente la regione con il mio mouse.
La mia domanda è: Come si può modificare la funzione di Trey in modo che lasci la regione selezionata dopo l'invocazione? (Il mio obiettivo finale è quello di assegnare questa funzione ad un tasto di scelta rapida (si parla di Ctrl + ↑) in modo che io, se tengo la ctrl e ↑ tasti premuti, tutti i numeri a due cifre in la mia regione selezionata aumenterà continuamente.)
A proposito, sono a conoscenza di this answer by Brian Campbell, che suggerisce di utilizzare nuovamente exchange-point-and-mark
per selezionare una regione selezionata in precedenza. Tuttavia, l'ho provato, e in questo caso non sembra essere d'aiuto.
+1 ma si noti che ciò che è stato incollato qui non è una macro ma una funzione. * defun * in elisp definisce una funzione, non una macro:) (Ho modificato la tua domanda e cambiato "macro" in "funzione"). Nota che le macro nei dialetti Lisp sono una bestia diversa del tutto:) – TacticalCoder
forse un suggerimento stupido ma ... Anche se non vedi la regione selezionata dopo la prima chiamata al tuo collegamento, non puoi semplicemente chiamare di nuovo il metodo e ancora? Sul mio sistema i numeri continuano a salire e in su con la funzione scritta così com'è. – TacticalCoder
Oh davvero? Hm, questo non succede per me. Metto in evidenza una regione con il mio mouse, poi faccio 'Mx add-1-to-2-digit', che incrementa i numeri, e poi digito' Mx add-1-to-2-digit' di nuovo, e questa volta non accade nulla. Cosa stiamo facendo in modo diverso, mi chiedo? –