Click and script

Transcript

Click and script
Click and script
Roberto Giacomelli
Articolo sul blog http://robitex.wordpress.com
e-mail: giaconet dot mailbox at gmail dot com
15 febbraio 2012
Sommario
In questo post impareremo come personalizzare il menù contestuale in Nautilus, il gestore di
finestre incorporato in Gnome, fino a compilare al volo sorgenti LATEX e compiere moltissime altre
operazioni che possono essere ripetitive.
Indice
1 Il menù contestuale
1
2 Nautilus-scripts
1
3 I nostri comandi personalizzati
3.1 Mandare in stampa un documento
3.2 Elencare file . . . . . . . . . . . . .
3.3 Compilare un sorgente LATEX . . .
3.4 Ottenere il pdf di file di testo . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
3
3
4
4 Conclusioni
4
5 Note tecniche
5
6 Licenza ed informazioni varie
6.1 Distribuzione/Citazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Colophon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5
5
Il menù contestuale
Nelle moderne interfacce grafiche il menù contestuale è un efficace idea che presenta all’utente le
operazioni effettuabili su uno specifico oggetto. Se per esempio si tratta di un file compresso il click destro
sull’icona che lo simboleggia, attiverà un menù contestuale che presenta le apposite voci per l’estrazione
del contenuto.
In Linux, nel Desktop Environment Gnome è possibile associare a questi menù piccoli programmi per
lanciarli comodamente dopo aver selezionato i file d’interesse.
2
Nautilus-scripts
Nautilus è il file manager di Gnome. Grazie al supporto per lo scripting, le operazioni per creare
una nuova voce di menù contestuale sono davvero semplici, allo stesso modo di quelle da svolgere per
creare un nuovo modello di documento come già illustrato in questo post. Basta creare il file con il codice,
assegnargli i permessi di esecuzione e spostarlo nella directory nascosta $HOME/.gnome2/nautilus-scripts.
Come è naturale sui sistemi Linux, possiamo scrivere script in molti linguaggi, da Bash a Python. Noi
utilizzeremo anche Lua pertanto dovrete assicurarvi che sia installato sul vostro sistema.
1
Figura 1: Menù contestuale su un file compresso in Gnome
3
I nostri comandi personalizzati
Ecco in concreto, alcune idee di personalizzazione del menù. Ciascun nuovo comando contestuale
deriva da esigenze della pratica quotidiana. Molte altre idee possono essere realizzate per rendere più
semplice l’utilizzo del pc, per esempio unire più file di testo o spedire documenti ad un indirizzo di posta
elettronica...
3.1
Mandare in stampa un documento
Se desidero lanciare la stampa di un file PDF lo apro con un visualizzatore ed eseguo il comando di
stampa. Se i PDF da stampare sono molti invece, apro il terminale, posiziono la working directory e
lancio la stampa di tutti i PDF presenti con il comando:
1
$ lpr *.pdf
Con qualche conoscenza in più di Bash (il linguaggio standard per l’amministrazione dei sistemi Linux
ma anche di quelli Mac OS X ormai), si costruisce un piccolo e semplicissimo script:
1
2
3
4
5
#!/bin/bash
for arg do
lpr "$arg"
done
Salviamone il contenuto in un file di testo chiamato per esempio goToPrinter, assegniamogli i permessi
di esecuzione (anche dal menù Proprietà) e spostiamolo in $HOME/.gnome2/nautilus-scripts, la
directory nascosta. Di seguito la sequenza dei comandi e l’immagine della sessione corrispondente al
terminale:
1
2
$ chmod +x goToPrinter
$ mv goToPrinter ~/.gnome2/nautilus-scripts
2
Figura 2: Sessione al terminale per la creazione del Nautilus script
3.2
Elencare file
Modificando un poco lo script precedente possiamo ottenere facilmente un file di testo contenente la lista
dei file selezionati sostituendo ad lpr il comando echo e reindirizzandone l’output verso un file. Utilizzeremo
poi la libreria zenity per mostrare un dialogo che mostri all’utente il numero dei file conteggiati.
1
2
3
4
5
6
7
8
9
#!/bin/bash
for arg do
echo "$arg"
done >> listoffiles.txt
zenity --info --width=200 --height=100 \
--title="Conteggio file elencati" \
--text="Numero di file elencati: $# "
3.3
Compilare un sorgente LATEX
Compilare un sorgente LATEX non è un problema se ci si avvale di un editor come TeX Works, oppure
direttamente del terminale, ma se lo possiamo fare con un semplice click destro sulla selezione di file è
davvero elegante. Il codice in Lua provvede a filtrare i file selezionati al momento dell’apertura del menù
contestuale in base all’estensione solitamente assegnata ai sorgenti LATEX.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/lua
-- ottengo la lista dei file selezionati
-- dalla variabile d’ambiente opportuna
local s = os.getenv("NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
-- per ogni file con estensione .tex
-- procedo alla compilazione
for path in string.gmatch(s,"(.-)\n") do
-- estrazione estensione
local ext = string.match(path,"%.(.-)$")
--if
if
se l’estensione esiste allora compilo
se si tratta di un sorgente .tex
ext then
string.lower(ext) == "tex" then
local ps = "(.-)%." .. ext .. "$"
local name = string.match(path,ps)
os.execute(’pdf\LaTeX{} -interaction=nonstopmode "’..name..’"’)
os.remove(name..".log")
os.remove(name..".aux")
end
end
end
-- end of Lua script
3
3.4
Ottenere il pdf di file di testo
Con poche modifiche possiamo adattare il codice precedente per ottenere uno script che converte i file
di testo in formato PDF utilizzando LATEX:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/lua
local docsource = [[
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage[margin=20mm]{geometry}
\usepackage{inconsolata}
\begin{document}
\ttfamily
%s
\end{document}
]]
-- ottengo la lista dei file
local s = os.getenv("NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
for path in string.gmatch(s,"(.-)\n") do
-- estrazione estensione
local ext = string.match(path,"%.(.-)$")
-- se l’estensione esiste allora creo il pdf con \LaTeX{}
if ext then
if string.lower(ext) == "txt" then
local ps = "(.-)%." .. ext .. "$"
local filename = string.match(path,ps)
-- lettura del file
local textfile = io.open(path,"r")
local content = string.gsub(textfile:read("*all"),"\n","\n\n")
local sourcetexfile = string.format(docsource,content)
textfile:close()
-- creazione sorgente
local sf = io.open(filename..".tex","w")
sf:write(sourcetexfile)
sf:close()
os.execute("pdflatex -interaction=nonstopmode "..filename)
os.remove(filename..".log")
os.remove(filename..".aux")
os.remove(filename..".tex")
end
end
end
-- end of Lua script
4
Conclusioni
Il menù contestuale è davvero comodo. In Linux possiamo utilizzare diversi linguaggi di scripting per
creare nuove voci di comandi con cui semplificare il lavoro quotidiano analizzando attentamente le nostre
necessità. Un saluto.
4
5
Note tecniche
Sul sistema devono essere installati e correttamente configurati i pacchetti e gli eseguibili di un sistema
TEX ed un interprete Lua. Gli esempi potrebbero richiedere leggere modifiche per distribuzioni Linux
diverse da Ubuntu 10.04.
6
Licenza ed informazioni varie
Questo articolo come tutto il materiale didattico/divulgativo del blog http://robitex.wordpress.com è
rilasciato sotto licenza Creative Commons “Attribuzione-Non commerciale-Non opere derivate” 2.5 Italia,
il cui testo integrale con valore legale è consultabile a questo indirizzo. Ciò significa che:
1. Bisogna sempre attribuire la paternità del materiale a http://robitex.wordpress.com;
2. Non si può usare il materiale per fini commerciali;
3. Non si può alterare o trasformare i contenuti, ne’ usarne stralci per creare altre opere.
Se esplicitamente indicato nei commenti iniziali, il codice relativo a programmi software è rilasciato
nella specifica licenza.
6.1
Distribuzione/Citazioni
Ogni volta che usi o distribuisci parti ridistribuibili quest’opera devi farlo secondo i termini con cui esse
sono state rilasciate e avendo cura di comunicare tali termini con chiarezza. Ricorda di inserire sempre un
hyperlink alla risorsa che ridistribuisci o citi.
Il modo migliore per dimostrarmi il vostro apprezzamento è semplicemente quello di linkare direttamente
le pagine del blog, senza copiare gli articoli in altri siti, oltre naturalmente a lasciare un commento. Ci
sono però casi in cui vorreste poter estrapolare alcune parole dai miei articoli per incuriosire i vostri lettori.
In quel caso la prassi convenuta e che, grazie a tutti i blogger seri, viene coscienziosamente rispettata, è
questa:
• Creare un “blockquote”, ossia un campo in cui è inserita una citazione;
• Inserire nel blockquote solo il primo periodo (le prime poche frasi) di un articolo, diciamo fino ad
arrivare al link “Leggi il resto. . . ”;
• Linkare la rimanente parte dell’articolo all’originale su http://robitex.wordpress.com.
Grazie per la collaborazione.
6.2
Colophon
Questo documento è stato composto con
LaTeX attraverso uno script in Lua chiamato wp2pdf che elabora il file originale html del post pubblicato
sul blog in WordPress. Si tratta di una versione migliorata del codice pubblicato sul blog stesso. Per
saperne di più contattatemi via posta elettronica all’indirizzo nel titolo del documento, o lasciate un
commento sul blog.
5