Zdá se, že tento příspěvek se ptá téměř přesně na to, co chcete.
Zdá se, že nejlepší řešení pomocí YAD pokrývá vaše potřeby.
Například následující jedna vložka:
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")"
vytvoří dialog obsahující:
- textová pole
- rozbalovací výběr
- zaškrtávací políčka
- tlačítka
vypadá to takto:
Výstup je celý umístěn na yad stdout a echo "$data"
vypadá nějak takto:
Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|
Nyní můžete výstup "analyzovat" pomocí nějakého nástroje cmdline, jako je cut
nebo awk
:
a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"
Pak už zbývá jen aplikační logika.
Instalace Ubuntu:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad
EDIT:zaměření na převod GUI na možnosti příkazového řádku
Po obdržení záporného hlasu si myslím, že jsem si odpověď vyložil špatně. Klíčovým bodem, který chce, je převod z GUI na rozhraní možností cmdline.
Nevím o existujícím řešení, a protože ani po 7 dnech odměny stále žádná odpověď, můžeme předpokládat, že žádné existující řešení neexistuje.
Proto to nejlepší, co můžeme udělat, je pomoci OP vytvořit řešení sám. Domnívám se, že vzhledem k tomu, že není tolik případů možností příkazového řádku, bude postačovat přiměřeně malý skript.
Zde je příklad 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()
Chcete-li spustit na Ubuntu 12.04, nejprve proveďte:
sudo apt-get install python-tk
Snímek obrazovky:
Příkaz vygenerovaný pro snímek obrazovky:
cmd_line --text="asdf" -s qwer /path/to/file
Chování:
- pokud je hodnota
--text=
je prázdný, pak je vynechán - Přepínače se zobrazí, pouze pokud je zaškrtnuto příslušné políčko
Pokud chcete implementovat novou funkci nad tento kód, doporučuji vám to udělat zde. Pokud bude dostatečně dobrý, rozdělte se na nové repo a udělejte jej pip instalovatelný.