Rendere Emacs totalmente portabile sotto Windows

Rendere Emacs totalmente portabile sotto Windows

emacs-pendrive.png

Figura 1: Emacs + Chiavetta USB = Emacs Portable

1 Emacs per Windows è portabile, ma non troppo

Emacs non ha bisogno di presentazioni: è semplicemente un capolavoro di ingegneria informatica.

Pur essendo nativo nel mondo Unix, Emacs è disponibile anche in versione Windows ed è distribuito già in modalità portabile, ovvero senza necessità della tipica installazione all'interno del sistema operativo.

Tuttavia la portabilità di Emacs per Windows si limita, in mancanza di specifica configurazione, alla versione base. Appena si cerca di personalizzare il programma o di installare qualche estensione, Emacs aggiunge tracce di codice nel punto in cui si trova la home del sistema operativo che, solitamente, è collocata nel disco fisso, ovvero nel tradizionale Disco C del computer, con conseguente perdita della portabilità.

Il principio fondamentale della portabilità è, infatti, quello della totale separazione tra i programmi presenti sul dispositivo esterno ed il sistema operativo del computer utilizzato, volta in volta, come host.

Per rendere Emacs totalmente portabile sotto Windows non è, quindi, sufficiente estrarre il programma in una pendrive USB, occorre anche modificare la configurazione per farlo puntare sempre all'interno della chiavetta stessa.

In rete si trovano varie soluzioni, ma alcune non superano totalmente il vaglio dell'assoluta portabilità che, in Windows, è reso un po' più complicato dall'attribuzione variabile delle lettere ai drive esterni nelle varie macchine in cui potrebbe essere inserita la chiavetta.

In altri termini una stessa chiavetta USB potrebbe essere individuata con la lettera E, F, G… in diversi computer e ciò renderebbe impossibile creare un sistema di lancio valido per tutte, a meno che… questo è proprio l'oggetto dell'articolo che state leggendo.

2 Una soluzione di base: creare un file batch all'interno della cartella bin

Una interessante soluzione si trova descritta in questa pagina.

Ecco il procedimento passo-passo provato personalmente:

  1. Creare una cartella del disco esterno denominata emacshome
  2. Creare un file .bat denominato runemacs.bat nella sottocartella bin di Emacs
  3. Nel file .bat inserire il codice seguente:

set HOME=%~dp0..\..\emacshome "%~dp0runemacs.exe" %*

A questo punto basta lanciare Emacs dal file .bat al posto del relativo .exe e la home sarà sempre all'interno dello stesso dispositivo, anche nel caso di variazione della lettera di riferimento assegnata dal sistema.

Tuttavia si tratta di una soluzione di base per un motivo molto semplice: obbliga a cercare la lettera del drive attribuita alla chiavetta, ad aprire la sottocartella /bin/, a scorrere l'elenco dei files fino a runemacs.bat e, soltanto dopo i precedenti passaggi, a lanciare il file batch.

Non è, certamente, una soluzione veloce!

Neppure è sufficiente creare un collegamento al file batch dalla cartella radice della chiavetta in quanto non possiamo sapere a priori la lettera che sarà assegnata alla nostra chiavetta nei diversi computer in cui potrebbe essere inserita.

Occorre, quindi, una soluzione drive letter free, ovvero che consenta il lancio del file batch con qualsiasi lettera associata alla chiavetta.

3 Seconda parte della soluzione: sistema di lancio valido per qualsiasi lettera di drive associata alla chiavetta

Una prima soluzione, non molto efficiente, è quella di utilizzare un altro batch alla radice della chiavetta per chiamare il batch creato all'interno della bin.

Se Emacs si trovasse in una cartella denominata emacs-26.2-i686, allora il batch (che potremmo chiamare, ad esempio, run.bat) situato alla radice della chiavetta che richiami l'altro batch situato all'interno della cartella bin potrebbe avere il seguente contenuto testuale:

/emacs-26.2-i686/bin/runemacs.bat

Il file batch collocato alla radice della pendrive avrebbe il compito di lanciare l'altro batch situato all'interno della cartella bin.

Però questa soluzione comporta il passaggio da due batch separati ed ogni passaggio nel batch rallenta la chiamata dell'eseguibile finale (rammento che l'eseguibile finale è runemacs.exe).

Una soluzione decisamente più efficiente è quella di modificare il file batch all'interno della bin in modo da lanciare direttamente l'eseguibile di Emacs dalla base della pendrive senza necessità di un doppio passaggio tra due diversi file batch.

Ecco la soluzione, ovvero il runemacs modificato da utilizzare nella RADICE della chiavetta con qualsiasi lettera associata al drive (sempre con il presupposto che la cartella in cui è collocato Emacs sia denominata emacs-26.2-i686):

set HOME=%~dp0emacshome
"%~dp0/emacs-26.2-i686/bin/runemacs.exe" %*

Con questa soluzione si ottiene il lancio di Emacs direttamente dalla radice (home) a prescindere dalla lettera del drive assegnata alla chiavetta con la contestuale modifica della home interna al programma stesso.

In caso di aggiornamento ad altra versione di Emacs occore soltanto modificare il nome della cartella nella seconda riga.

4 Non è finita: possiamo creare anche una cartella Documenti valida per tutte le lettere di drive

Dopo avere configurato una cartella home interna alla chiavetta ed avere neutralizzato le lettere assegnate alla chiavetta stessa, possiamo sfruttare questa stessa configurazione per creare una cartella Documenti aventi le stesse caratteristiche.

Basta creare la cartella Documenti sotto la cartella radice come sopra configurata: ovvero ~/Documenti (notare la tilde ~ che rappresenta simbolicamente la home).

La cartella drive-free può essere utilizzata, ad esempio, per la configurazione del monitoraggio di Org-Mode inserendo in .emacs la seguente stringa di testo:

(setq org-agenda-files '("~/Documenti"))

In questo modo la cartella Documenti sarà monitorata dai comandi di Org-Agenda ed il relativo contenuto potrà essere direttamente richiamato, ad esempio, con il comando C-c a t.

5 Versione 32bit per tutti i computer

Come ultimo tocco per avere un sistema con la più ampia portabilità è opportuno utilizzare la versione 32bit di Emacs.

Il sistema operativo Windows a 32bit è, infatti, ancora diffuso, soprattutto nei computer portatili, e l'utilizzo della versione a 32bit del programma ne consente il lancio nei sistemi operativi sia a 32 che a 64 bit mentre la versione a 64 bit non è retrocompatibile.

Grazie per l'attenzione.

Autore: Franco Pasut

Emacs 25.2.2 (Org mode 8.2.10)

Commenti

Post popolari in questo blog

PCT e collegamenti ipertestuali tra atti e documenti in Word, Writer e LaTeX

Atti giudiziari: utilizzare le variabili al posto dei nomi propri in Word, Writer e LaTeX