1
Programmazione / Re:Higgins: un lanciatore per gambas
« il: 13 Maggio 2016, 13:45:08 »
Sono riuscito finalmente ad implementare i plugin esterni.
Adesso higgins riconoscerà eventuali eseguibili presenti in: ~/.config/gambas3/higgins/extbin
Il bello è che l' "API" con cui il plugin esterno dialoga con higgins si basa su semplici messaggi di testo.
Questo vuol dire che i plugin esterni possono essere scritti in qualsiasi linguaggio.
Un plugin di esempio che ho scritto è il seguente, in bash:
Questo script si può lanciare anche da linea di comando (che poi è quello che higgins fa), così:
e l'uscita dello script sarà qualcosa del genere:
Higgins parserà l'output del programma e prenderà tutte le informazioni che gli servono per compilare la lista dei risultati.
Più semplice di così!
Altra cosa che ho aggiunto è che ogni plugin può essere abilitato/disabilitato e gli stessi possono essere ordinati in modo da avere prima i risultati che ci interessano maggiormente.
Nella lista dei plugin vengono ovviamente visualizzati anche i plugin esterni.
Adesso higgins riconoscerà eventuali eseguibili presenti in: ~/.config/gambas3/higgins/extbin
Il bello è che l' "API" con cui il plugin esterno dialoga con higgins si basa su semplici messaggi di testo.
Questo vuol dire che i plugin esterni possono essere scritti in qualsiasi linguaggio.
Un plugin di esempio che ho scritto è il seguente, in bash:
Codice: [Seleziona]
#!/bin/bash
#Simple locate plugin example.
#Put me in ~/.config/gambas3/higgins/extbin to use me
#This plugin will search for files using locate command, which has to be installed.
#This plugin will run only when the trigger is used, so:
# to search for "myfile.txt"
# write: l:myfile.txt
# (trigger is "l:")
#This plugin will not search anything lower than 3 characters (minchar=3)
export IFS=$'\n'
trigger="l:" #Search using the trigger? es: l:myfile
minchar=3 #Don't search on queries smaller than that, trigger does not count.
query="$@"
#Do we use a trigger?
if [ -n "$trigger" ] ; then
#...Yes, we do, so exit if not triggered
if [[ $query != $trigger* ]] ; then
exit
fi
#Strip the trigger prefix from the query
query=$(echo $query| sed "s/^$trigger//")
fi
len=${#query}
#Exit if the query is too small
if [ $len -lt $minchar ] ; then
exit ;
fi
#Finally, start the search:
for file in $(locate -i "$query") ; do
echo BEGIN
# For fields description and possible values, please refer to plugins/plugin_999_template
echo Text=$(basename $file)
echo SubText="in " $(dirname $file)"/"
echo Image_file="mimetype://$file"
echo Clipboard_data="$file"
echo Action="GUESS"
echo Action_p="$file"
echo END
done
Questo script si può lanciare anche da linea di comando (che poi è quello che higgins fa), così:
Codice: [Seleziona]
# ~/.config/gambas3/higgins/extbin/locate.sh l:ciao
Codice: [Seleziona]
BEGIN
Text=ciao.srt
SubText=in /home/
Image_file=mimetype:///home/ciao.srt
Clipboard_data=/home/ciao.srt
Action=GUESS
Action_p=/home/ciao.srt
END
BEGIN
Text=ciao.ORIGINAL.srt
SubText=in /home/p2p/.aegisub/autoback/
Image_file=mimetype:///home/p2p/.aegisub/autoback/ciao.ORIGINAL.srt
Clipboard_data=/home/p2p/.aegisub/autoback/ciao.ORIGINAL.srt
Action=GUESS
Action_p=/home/p2p/.aegisub/autoback/ciao.ORIGINAL.srt
END
Più semplice di così!
Altra cosa che ho aggiunto è che ogni plugin può essere abilitato/disabilitato e gli stessi possono essere ordinati in modo da avere prima i risultati che ci interessano maggiormente.
Nella lista dei plugin vengono ovviamente visualizzati anche i plugin esterni.