Terzo post in poco tempo, mi ci sto (ri)mettendo d’impegno a quanto pare.
Recentemente ho ripreso a programmare e mi è preso il vezzo di creare uno script che creasse un separatore per il mio codice, qualcosa del tipo
######---------- GESTORE EVENTI ----------######
Dato il testo centrale del separatore (in questo caso “GESTORE EVENTI”) lo script mi crea un separatore come sopra che occupi esattamente le 72 colonne di uno script Python; In pratica mi ‘centra’ il testo nel separatore.
Lo script, che riporto qui in basso, è abbastanza banale (e andrebbe raffinato), ciò che invece mi ha creato problemi è stato il capire come fare a passare il separatore appena creato alla clipboard di Linux, in modo che possa essere facilmente inserito con un CTRL-V nel mio editor preferito.
Pensavo che Python avesse un sistema bult-in per un operazione così banale, ma così non è. I suggerimenti trovati in rete consigliavano di usare pyperclip (da installare, non presente nei repository della mia Fedora 21) o xclip. Ho ovviamento optato per quest’ultimo.
Lo snippet trovato (per windows) e riadattato, è il seguente:
import subprocess def copy2clip(txt): cmd='echo "' + txt +'"|xclip -selection clipboard' return subprocess.check_call(cmd, shell=True) copy2clip('now this is on my clipboard')
In pratica tramite subprocess si simula l’invio del comando echo “nostro divisore” e tramite la pipe lo si passa a xclip (N.B., xclip, non clip come in Windows).
I parametri finali del comando servono a selezionare la clipboard relativa al CTRL-V, altrimenti di default xclip passa il testo alla clipboard che si attiva con il tasto centrale del mouse o con SHIFT + INS.
Se vuoi vedere lo script completo clicca su continua
# crea un divisore per il mio codice # il divisore divide le varie sezioni del mio codice # il divisore è di 72 caratteri ed è del tipo: # 6#10-nspazi testo nspazi10-6# # es. ######---------- DIVISORE ----------###### #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys, subprocess MAX_DIM = 36 def crea_divisore(t): if len(t) > MAX_DIM: print("stringa troppo lunga (>36) per creare un divisore") else: #calcolo gli spazi da aggiungere ad inizio (e fine) n_spazi = int( (36-len(t) )/2 ) s = "######----------" + " "*n_spazi + t.upper() + " "*n_spazi\ + "----------######" return s def copy2clip(txt): """ copia txt nella clipboard """ cmd = 'echo "' + txt + '" |xclip -selection clipboard' return subprocess.check_call(cmd, shell=True) testo = sys.argv[1] divisore = crea_divisore(testo) print (divisore) copy2clip(divisore) print ("Il divisore è ora copiato nella clipboard")