Questo post sembra chiedere quasi esattamente cosa vuoi.
La soluzione migliore per utilizzare YAD sembra soddisfare i tuoi requisiti.
Ad esempio la seguente riga:
data="$(yad --title="Desktop entry editor" --text="Simple desktop entry editor" --form --field="Type:CB" --field="Name" --field="Generic name" --field="Comment" --field="Command:FL" --field="Icon" --field="In terminal:CHK" --field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE --button="WebUpd8:2" --button="gtk-ok:0" --button="gtk-cancel:1")"
crea una finestra di dialogo contenente:
- campi di testo
- selezioni a discesa
- caselle di controllo
- pulsanti
che assomiglia a:
L'output è tutto messo su yad stdout e echo "$data"
assomiglia a:
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
Ora puoi "analizzare" l'output con alcuni strumenti cmdline come cut
o awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
Quindi ti rimane solo la logica dell'applicazione.
Installazione Ubuntu:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
EDIT:incentrato sulla conversione della GUI in opzioni della riga di comando
Dopo aver ricevuto un voto negativo, penso di aver interpretato la risposta nel modo sbagliato. Il punto chiave che vuole è la conversione dalla GUI all'interfaccia delle opzioni di cmdline.
Non conosco una soluzione esistente e poiché dopo 7 giorni di taglia ancora nessuna risposta, possiamo presumere che non esista una soluzione esistente.
Pertanto, il meglio che possiamo fare è aiutare l'OP a creare una soluzione da solo. Credo che, poiché non ci sono molti casi di opzioni della riga di comando, sarà sufficiente uno script ragionevolmente piccolo.
Ecco un esempio di Python + Tk
#!/usr/bin/env python
import Tkinter
import tkFileDialog
class Option(object):
def __init__(self, optype, name, widget=Tkinter.Entry):
self.optype = optype
self.name = name
if self.optype == 'switch':
self.widget = Tkinter.Checkbutton
else:
self.widget = widget
## INPUT -------------------------------------------------------
options = [
Option("key-value", "--text="),
Option("switch", "-s"),
Option("positional", "pos0"),
Option("positional", "pos1", tkFileDialog.askopenfilename),
]
## END -------------------------------------------------------
def askopenfilename(filename):
filename.set(tkFileDialog.askopenfilename())
# Build command
def ok_func():
cmd = "cmd_line"
for option in options:
if option.optype == "key-value":
val = tkvars[option.name].get()
if val:
cmd += ' '
cmd += '%s"%s"' % (option.name, val)
elif option.optype == "switch":
cmd += ' '
if tkvars[option.name].get() == 1:
cmd += option.name
elif option.optype == "positional":
val = tkvars[option.name].get()
if val:
cmd += ' '
cmd += val
print cmd
tkvars = {}
app = Tkinter.Tk()
grid = Tkinter.Frame()
row = 0
# Build GUI
for option in options:
Tkinter.Label(grid, text=option.name).grid(row=row, column=0, sticky='W')
if option.widget == Tkinter.Entry:
tkvars[option.name] = Tkinter.StringVar()
widget = Tkinter.Entry(
grid,
textvariable=tkvars[option.name]
)
elif option.widget == Tkinter.Checkbutton:
tkvars[option.name] = Tkinter.IntVar()
widget = Tkinter.Checkbutton(
grid,
variable = tkvars[option.name],
onvalue = 1
)
elif option.widget == tkFileDialog.askopenfilename:
tkvars[option.name] = Tkinter.StringVar()
widget = Tkinter.Button(
grid,
text='Browse',
command=lambda: askopenfilename(tkvars[option.name])
)
widget.grid(row=row, column=1, sticky='W')
row += 1
grid.pack()
Tkinter.Button(app, text="ok", command=ok_func).pack()
Tkinter.Button(app, text="quit", command=app.quit).pack()
app.mainloop()
Per eseguire su Ubuntu 12.04 eseguire prima:
sudo apt-get install python-tk
Schermata:
Comando generato per lo screenshot:
cmd_line --text="asdf" -s qwer /path/to/file
Comportamento:
- se il valore di
--text=
è vuoto allora viene omesso - le opzioni vengono visualizzate solo se la casella di controllo corrispondente è selezionata
Se vuoi implementare una nuova funzionalità in cima a quel codice, ti consiglio di farlo qui. Se diventa abbastanza buono, dividiamo in un nuovo repository e rendiamolo pip installabile.