Oggi concludo la telenovela serie sulla conversione maiuscolo|minuscolo all’interno della clipboard. Le puntate precedenti sono qui e qui.
Avevo pensato di poter utilizzare il comando echo con l’opzione dell’here document ma non ci sono riuscito. Non so se è una mia carenza o il metodo non è praticabile. Sono ricorso a cat, soluzione meno bella perché ho dovuto creare un file temporaneo in /tmp.
Il codice è commentato e semplicissimo (non cambia granché dalla puntata precedente) per cui eccolo, senza preamboli:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/usr/bin/newlisp ;; get state of CapsLock (set 'clON (% (int (slice (string (exec "xset q | grep LED")) -4 2)) 2)) ;; get clipboard content (set 'txt (join (exec "xsel -ob") "\n")) ;; case translate (if (= clON 1) (set 'txt (upper-case txt)) (set 'txt (lower-case txt))) ;; park in a temp file (set 'tmpf "/tmp/Mm") (write-file tmpf txt) ;; put the temp file it in the clipboard (set 'cmd (join (list "cat " tmpf " | xsel -ib"))) (exec cmd) (delete-file tmpf) (exit) |
Si potrebbe ancora modificarlo rendendolo più lispico ma poi si perderebbe la possibilità di confronto con la versione del passo successivo, questo che segue immediatamente.
Se a questo punto qualcuno ponesse la domanda “ma si deve fare con newLISP?” risponderei “certo che no! ecco la versione con Python”.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess, os
# stato di capslock
cmd = "xset q | grep LED"
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
output = (ps.communicate()[0]).strip()
clON = int(output[-2:]) % 2
# contenuto della clipboard
cmd = "xsel -ob"
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
txt = (ps.communicate()[0])
# converto
if clON:
txt = txt.upper()
else:
txt = txt.lower()
# lo parcheggio in un file temporaneo
tmpf = "/tmp/Mm"
f = open(tmpf, 'w')
f.write(txt)
f.close()
# copio il file nella clipboard
#cmd = "cat"
cmd = "cat {0} | xsel -ib".format(tmpf)
os.system(cmd) #, "", shell = True)
os.remove(tmpf)
Sono quasi equivalenti. Ecco un dump del test effettuato.
Sì newLISP converte anche le lettere non ASCII ![]()
Ma siccome è un’inutility il discorso, per me, si chiude qua


Recentemente sono finito invischiato in una cosa che non so bene come raccontare. E che continuava a venirmi in mente anche quando pensavo a altro, insomma ne sono stato completamente invischiato. E vorrei coinvolgere anche voi. Comincio con il presentare l’autore:
Intanto parte con un minicorso del suo interprete Tiddlylisp (tiddlywinks è un vecchio gioco, ormai in disuso, conosciuto da noi come pulci). Tiddlylisp è piccolo ma completo. Certo mancano delle cose che in un interprete serio professionale si danno per scontate; un’istruzione dev’essere contenuta in una riga, per esempio e mancano costrutti usuali. Ma funziona e il corso di Michael è preciso e esauriente. Chi non conosce il Lisp può farsi un’idea precisa, tanto poi se passa a una versione vera scopre che ci sono i dialetti e ogni implementazione è una cosa a se e che ogni utente personalizza la sua copia fino a diventare incompatibile con il resto del mondo.
Questa è la prima parte del post (sì è lungo, molto più lungo di quello che si trova di solito nei blog). Ma adesso viene il bello, cioè no, si continua ma adesso con Python. E c’è il codice e la descrizione che è non banale ma, in fondo, molto più semplice di quello che mi sarei immaginato.
E se si trovano delle risorse su Python tanto vale darci un’occhiata, chissà…
Si può usare J, la mia ultima scoperta?









Certe prof…



Idea (non mia, grazie Lole (il post avresti dovuto scriverlo te (imho))): invece di riferirsi a un file usare un link simbolico allo stesso.





Recentemente mi sono occupato di SymPy, con 4 post noiosi tipo “Uh! vediamo quello che fa!“. 
