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