{"id":445,"date":"2023-04-12T01:14:21","date_gmt":"2023-04-12T00:14:21","guid":{"rendered":"https:\/\/www.maidaccordo.net\/blog\/?p=445"},"modified":"2023-04-12T01:14:40","modified_gmt":"2023-04-12T00:14:40","slug":"why-emacs","status":"publish","type":"post","link":"https:\/\/www.maidaccordo.net\/blog\/2023\/04\/why-emacs\/","title":{"rendered":"Why emacs"},"content":{"rendered":"<h1 id=\"intro\">Intro<\/h1>\n<p>Non ho mai cercato di convincere la gente a usare emacs, perch\u00e9 ho sempre ritenuto che obiettivamente sia un ambiente di lavoro diverso da quello a cui sono abituati la maggior parte degli utenti e perch\u00e9 la curva di apprendimento \u00e8 piuttosto ripida.<\/p>\n<p>Se qualcuno decide di affrontare l\u2019avventura sono abbastanza convinto che alla fine ne avr\u00e0 tratto gran giovamento, tuttavia \u00e8 una scelta personale se investire o meno del tempo a imparare uno strumento nuovo.<\/p>\n<p>Posso per\u00f2 divulgare alcuni aspetti di emacs di cui pochi tra quelli che non lo adoperano sono a conoscenza e che potrebbero essere determinanti per prendere la decisione consapevole di imparare a usarlo.<!--more-->Non star\u00f2 a dilungarmi in dettagli inutili sulle scorciatoie da tastiera, criticate da moltissimi per la complessit\u00e0 e l\u2019anti-intuitivit\u00e0, che per\u00f2 (per lo meno quelle basilari) sono le stesse che adopera la bash. E nemmeno dir\u00f2 quali fantasmagoriche funzionalit\u00e0 sia possibile installare, anche perch\u00e9 io penso di usarne pochissime.<\/p>\n<p>Voglio semplicemente illustrare un interessante caso di uso non banale di alcune delle funzionalit\u00e0 di default.<\/p>\n<h1 id=\"cose-\u00e8-emacs\">Cose \u00e8 emacs<\/h1>\n<p>Nelle parole degli autori:<\/p>\n<blockquote><p>An extensible, customizable, free\/libre text editor \u2014 and more. At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language with extensions to support text editing.<\/p><\/blockquote>\n<p>Cosa vuo dire? Che \u00e8 un editor, perch\u00e9 quello \u00e8 il principale utilizzo del software, ma che dal punto di vista costruttivo \u00e8, per prima cosa, un interprete lisp.<\/p>\n<p>Questo significa che come qualsiasi altro interprete di linguaggio pu\u00f2 essere usato per scrivere script indipendenti, ma anche, cosa certamente pi\u00f9 interessante ai fini di questo scritto, che chiunque senta l\u2019esigenza di una nuova funzionalit\u00e0 pu\u00f2 programmarsela all\u2019interno di emacs o modificarsene una esistente perch\u00e9 risponda alle proprie esigenze. Nel tempo questo ha comportato che per emacs sono nati migliaia di pacchetti aggiuntivi che implementano le funzioni pi\u00f9 disparate.<\/p>\n<p>I denigratori a volte dicono che \u00e8 un sistema operativo, volendo intendere che \u00e8 inutilmente pesante. In realt\u00e0, se comparato con le risorse di calcolo attualmente disponibili a chiunque, \u00e8 leggerissimo (per editare questo file di testo in memoria ha allocato meno di 100kB) e certamente \u00e8 pi\u00f9 leggero di ogni IDE o editor avanzato che possiate reperire. La critica probabilmente risale ai tempi dei 386, visto che gi\u00e0 allora esisteva. Inoltre la sua struttura modulare e la natura stessa del lisp fa s\u00ec che sia l\u2019utente a stabilire per cosa vuole utilizzare emacs, senza caricare in memoria troppe inutili funzioni aggiuntive.<\/p>\n<h1 id=\"cosa-ci-faccio-con-emacs\">Cosa ci faccio con emacs<\/h1>\n<p>Essenzialmente quello per cui \u00e8 nato, edito file di testo semplice. Ma in effetti \u00e8 il software che uso di pi\u00f9 in assoluto, perch\u00e9 \u00e8 cos\u00ec efficace ed efficiente che ti fa capire che per gestire quasi ogni attivit\u00e0 quotidiana bastano file di testo semplice, emacs e pochi strumenti per processare i file.<\/p>\n<p>Per documenti formatati di solito uso file in linguaggio markdown o org-mode. Con pandoc o emacs stesso per processarli. Per il documenti pi\u00f9 lunghi, e che magari possono essere pi\u00f9 strutturati e voglio pi\u00f9 eleganti, uso latex. Di solito, se non in casi rari, non uso fogli di calcolo, quel poco che mi serve o lo faccio col foglio di calcolo interno di emacs oppure in python. Per le email uso un client grafico separato ma per scrivere le email pi\u00f9 lunghe e articolate gli faccio aprire emacs.<\/p>\n<p>In sostanza non \u00e8 improbabile che tenga anche decine di file aperti contemporanemente con emacs, saltando da un file all\u2019altro con pochi tocchi della tastiera.<\/p>\n<p>Ma voglio giungere rapidamente al cuore di quest\u2019articolo, un caso d\u2019uso intenso e per certi versi insolito di emacs.<\/p>\n<h2 id=\"premesse\">Premesse<\/h2>\n<p>Terminologia : in gergo emacs le finestre sul desktop si chiamano frame, le divisioni interne al frame si chiamano finestre, il file in memoria si chiama buffer.<\/p>\n<h2 id=\"emacs-server\">Emacs server<\/h2>\n<p>Il comportamento predefinito di emacs quando apri un file \u00e8 di aprire una nuova istanza del programma. Questo vuol dire che per cambiare finestra o file devi affidarti alla scorciatoie da tastiera del window manager che stai usando. Cambi window manager, cambiano le scorciatoie. Inoltre questa cosa ti costringe ad avere una finestra per ogni file.<\/p>\n<p>Quando invece apri un file da dentro emacs lui non apre una nuovo frame (a meno che non glielo dica esplicitamente) ma crea un nuovo buffer nell\u2019istanza corrente. Questa opzione \u00e8 sempre preferibile perch\u00e9 emacs, che \u00e8 anche un editor che funzione su terminale testuale, non condivide la clipboard di X, sebbene le ultime versioni dialoghino con questa, quindi per esempio non sar\u00e0 possibile copiare selezioni rettangolari tra istanze diverse.<\/p>\n<p>Non sarebbe utile poter dire ad emacs di aprire un file in una istanza gi\u00e0 aperta e magari aprire un frame nuovo?<\/p>\n<p>Indovinate un po\u2019\u2026si pu\u00f2 fare. Si pu\u00f2 far partire un emacs server, ovvero metterlo in ascolto in modo da poter \u201cmandare\u201d i nuovi file aperti ad una istanza gi\u00e0 attiva. Dopo aver fatto partire il server basta agganciarvisi aprendo i nuovi file con comando emacsclient (rimando al manuale ufficiale per i dettagli sia sul server che sul client). Un\u2019altra cosa bella che, se disponete di 2 monitor, si pu\u00f2 fare \u00e8 tenere aperto un frame di emacs su un monitor e mandargli dall\u2019altro tutti i file che si vogliono aprire.<\/p>\n<h2 id=\"tramp-mode\">TRAMP mode<\/h2>\n<p>Nell\u2019ultimo anni, a causa della pandemia, ci siamo trovati pi\u00f9 o meno tutti a lavorare da casa e coloro ai quali servono risorse di calcolo, probabilmente non disponibili a casa, non \u00e8 insolito che debbano usare macchine remote. La connessione avviene il pi\u00f9 delle volte tramite una connessione ssh. Cosa succede se la connessione cade mentre stiamo modificando un file di testo da remoto? Nella maggior parte dei casi il programma si pianta e abbiamo perso tutte le modifiche fatte dopo l\u2019ultimo salvataggio. Ancora una volta emacs ci aiuta molto.<\/p>\n<p>Esiste infatti il tramp mode. \u00c8 un modo, che trovate gi\u00e0 installato su ogni versione recente di emacs, che permette di gestire i file remoti da una istanza locale del programma. In soldoni, per chi non avesse capito, voi lanciate emacs sul vostro pc e gli dite di andare e a prendere un file su un server remoto via ssh. In questa maniera il programma \u00e8 molto pi\u00f9 reattivo di qualsiasi programma che vogliate utilizzare da remoto (dal momento che gira sul vostro pc locale non risentir\u00e0 dei ritardi della rete) e nel caso vada via la connessione non succede nulla, potete continuate a lavorare: lui si riconnetter\u00e0 da solo non appena ritorna la connessione e gli dite di salvare il file. Ibernate il pc, lo risvegliate e il tramp mode \u00e8 sempre l\u00ec, non appena chiedete di salvare lui si riconnette automaticamente al file sul server remoto. Inoltre se apri un file mentre ne stai editando uno remoto, assume che sia sulla stessa directory remota. Compresi tag e file ausiliari :). Un modo molto comodo di lavorare.<\/p>\n<h2>Altri editor<\/h2>\n<p>Farei un torto alla verit\u00e0 se dicessi che emacs \u00e8 l&#8217;unico editor in gradi di fare modifiche da remoto.<\/p>\n<p>Da quello che so, l&#8217;ho provato, Vim ha una pessima interfaccia per farlo. Usa un file temporaneo e lo sovrascrive con scp ogni volta, una semplice interfaccia alla linea di comando. Non assume il nome utente e non legge le impostazioni di rete, Fa peggio del solo scp. Chiede di pigiare invio per ogni comando che accede alla rete. \u00c8 parecchio scomodo.<\/p>\n<p>Un altro editor che lo fa \u00e8 notepad++ sotto windows. Questo non l&#8217;ho mai provato.<\/p>\n<h2>E quindi?<\/h2>\n<p>Se avete un po&#8217; di tempo provateci a imparare emacs, non ve ne pentirete. Ritorna indietro molto pi\u00f9 dello sforzo necessario per imparare a usarlo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro Non ho mai cercato di convincere la gente a usare emacs, perch\u00e9 ho sempre ritenuto che obiettivamente sia un ambiente di lavoro diverso da quello a cui sono abituati la maggior parte degli utenti e perch\u00e9 la curva di &hellip; <a href=\"https:\/\/www.maidaccordo.net\/blog\/2023\/04\/why-emacs\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-445","post","type-post","status-publish","format-standard","hentry","category-hardsoft"],"_links":{"self":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/comments?post=445"}],"version-history":[{"count":5,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/445\/revisions"}],"predecessor-version":[{"id":450,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/posts\/445\/revisions\/450"}],"wp:attachment":[{"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/media?parent=445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/categories?post=445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.maidaccordo.net\/blog\/wp-json\/wp\/v2\/tags?post=445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}