{"id":120,"date":"2011-03-19T15:07:45","date_gmt":"2011-03-19T15:07:45","guid":{"rendered":"http:\/\/www.budus.it\/Blog\/?p=120"},"modified":"2017-06-18T07:49:57","modified_gmt":"2017-06-18T07:49:57","slug":"emacs-keyboard-macro-come-eseguire-la-stessa-operazione-ripetutamente","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/emacs-keyboard-macro-come-eseguire-la-stessa-operazione-ripetutamente\/","title":{"rendered":"EMACS: Keyboard MACRO &#8211; Come eseguire la stessa operazione ripetutamente"},"content":{"rendered":"<p>In questo breve articolo voglio trattare di una funzionalit\u00e0 di <a title=\"EMACS\" href=\"http:\/\/www.gnu.org\/software\/emacs\/\" target=\"_blank\" rel=\"noopener\">EMACS<\/a>, noto editor &#8211; anche se forse \u00e8 un po&#8217; riduttivo chiamarlo cos\u00ec &#8211; per il mondo UNIX ma disponibile anche su Windows, trattata nella sua documentazione <a title=\"EMACS Keyboard MACRO\" href=\"http:\/\/www.delorie.com\/gnu\/docs\/emacs\/emacs_487.html\" target=\"_blank\" rel=\"noopener\">qui<\/a> e che da la possibilit\u00e0 all&#8217;utente di <em>registrare<\/em> tutto quello che fa per poi ripeterlo esattamente.<\/p>\n<p>Una cosa praticamente uguale a quella che avviene, ad esempio, nei programmi Office.<\/p>\n<p><!--more--><\/p>\n<p>Prima di spiegare il tutto faccio una piccola premessa, per coloro che magari sono poco avvezzi di EMACS e vogliono avvicinarsi a questo fantastico strumento: il software funziona sfruttando le cosiddette <em>keybinding<\/em>, cio\u00e8 le <em>accelerazioni da tastiera<\/em> ed, in particolare, prevede che siano sempre anticipate da uno di questi due tasti: <strong>CTRL<\/strong> e <strong>ALT<\/strong>.<\/p>\n<p>Per semplicit\u00e0, nella sua guida (e anche qui), si associa la lettera <strong>C<\/strong> al <strong>CTRL<\/strong> ed <strong>M<\/strong> ad <strong>ALT<\/strong>; quindi abbiamo che se scrivo <strong>C-x<\/strong> significa: premere il tasto <strong>CTRL<\/strong> e, <span style=\"text-decoration: underline;\">tenendolo premuto<\/span>, premere la lettera <strong>x<\/strong>.<\/p>\n<p>In modo analogo <strong>C-x C-c<\/strong> significa che il tasto <strong>CTRL<\/strong> va tenuto premuto mentre si preme prima la <strong>x<\/strong> e poi la <strong>c<\/strong>.<\/p>\n<p>Diversamente, se c&#8217;\u00e8 scritto <strong>C-x v v<\/strong> significa: premi <strong>CTRL<\/strong>, tienilo premuto mentre premi <strong>x<\/strong>, quindi lo rilasci e premi <strong>v<\/strong> per 2 volte.<\/p>\n<p>Torniamo alle MACRO, come funziona ?<\/p>\n<p>Come prima cosa bisogna avviare la registrazione; lo si fa con: <strong>C-x (<\/strong><\/p>\n<p>La parentesi <strong>(<\/strong> chiaramente va fatta con <strong>SHIFT+8<\/strong>.<\/p>\n<p>Ora, tutto quello che facciamo, viene registrato; quello che scriviamo, comandi EMACS lanciati (con <em>keybindings<\/em> o <em>metacomandi<\/em>, cio\u00e8 quelli che si possono usare con il tasto <strong>ALT<\/strong>) e quant&#8217;altro.<\/p>\n<p>Quando abbiamo finito di eseguire le operazioni che intendiamo ripetere, terminiamo la registrazione con: <strong>C-x )<\/strong><\/p>\n<p>A questo punto, per ripetere la MACRO registrata possiamo usare: <strong>C-x e<\/strong><\/p>\n<p>Potremmo voler dare un nome alla MACRO creata, lo facciamo con <strong>M-x name-last-kbd-macro<\/strong> ed inseriamo il nome che vogliamo dare, confermando con <em><strong>INVIO<\/strong><\/em>.<\/p>\n<p>Il &#8220;name-last-kbd-macro&#8221; \u00e8 uno dei <em>metacomandi<\/em> di cui parlavo prima; EMACS ne ha davvero moltissimi e consentono di gestire tutto (questo software ha una capacit\u00e0 di personalizzazione ed estensione fuori dal normale).<\/p>\n<p>Dare il nome ad una MACRO ci consente di averne pi\u00f9 di una (<strong>C-x e<\/strong> esegue sempre l&#8217;ultima MACRO registrata) che possiamo richiamare con <strong>M-x <em>nome_macro<\/em><\/strong> dove &#8220;<em><strong>nome_macro<\/strong><\/em>&#8221; \u00e8 il nome che abbiamo dato.<\/p>\n<p>Se la MACRO creata ci piace proprio e vogliamo renderla disponibile anche per le future sessioni di EMACS &#8211; infatti, quelle create fino ad ora, vengono perse nel momento in cui chiudiamo il programma &#8211; dobbiamo salvarla.<\/p>\n<p>Per farlo dobbiamo aprire il file <strong>$HOME\/.emacs<\/strong> con: <strong>C-x C-f $HOME\/.emacs<\/strong><\/p>\n<p>Ora dobbiamo dire al programma di inserire la MACRO a cui abbiamo dato il nome con: <strong>M-x insert-kbd-macro<\/strong> e rispondendo alla sua domanda con il nome. Lui aggiunge al file &#8211; magari dobbiamo avere l&#8217;accortezza di esserci spostati, precedentemente, con il cursore alla fine del file &#8211; la <strong><em>definizione LISP<\/em> <\/strong>che corrisponde alle operazioni registrate.<\/p>\n<p>Dovrebbe essere qualcosa di simile a questo:<\/p>\n<pre>(fset 'uda_protect_variable\r\n [C-insert ?\\C-x ?2 C-home ?\\M-% S-insert return S-insert ?\\} home right ?\\{ return ?! ?\\C-x ?o ?\\C-x ?1])<\/pre>\n<p>Infine dobbiamo salvare il file (che rappresenta il file di configurazione di EMACS) con: <strong>C-x C-s<\/strong><\/p>\n<p>Aggiungo solo una cosa: quando si usano i <em>metacomandi<\/em> \u00e8 possibile farsi suggerire da EMACS il completamento, proprio come avviene nel terminale <em><strong>Bash<\/strong><\/em> di Linux (anche se sarebbe pi\u00f9 corretto dire il contrario, dato che questa caratteristica \u00e8 stata ereditata proprio da EMACS, tant&#8217;\u00e8 che \u00e8 una &#8220;modalit\u00e0&#8221; del terminale, alternativa a quella di <strong>vi<\/strong>, altro editor storico del mondo UNIX).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo breve articolo voglio trattare di una funzionalit\u00e0 di EMACS, noto editor &#8211; anche se forse \u00e8 un po&#8217; riduttivo chiamarlo cos\u00ec &#8211; per il mondo UNIX ma disponibile anche su Windows, trattata nella sua documentazione qui e che da la possibilit\u00e0 all&#8217;utente di registrare tutto quello che fa per poi ripeterlo esattamente. Una &hellip; <a href=\"https:\/\/www.budus.it\/Blog\/emacs-keyboard-macro-come-eseguire-la-stessa-operazione-ripetutamente\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;EMACS: Keyboard MACRO &#8211; Come eseguire la stessa operazione ripetutamente&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,25,6],"tags":[74,91,93,90,92],"class_list":["post-120","post","type-post","status-publish","format-standard","hentry","category-development","category-operating-system","category-software","tag-emacs","tag-keybinding","tag-lisp","tag-macro","tag-metacomandi"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":4,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":915,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/120\/revisions\/915"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}