View previous topic :: View next topic |
Author |
Message |
mouser Veteran
Joined: 10 Aug 2004 Posts: 1419 Location: Milano
|
Posted: Fri Oct 12, 2007 2:49 pm Post subject: [HOW-TO] Trasformare GEdit in un IDE |
|
|
Buongiorno a tutti!
Oramai da qualche tempo sono diventato gnomo convinto e cerco di seguire sempre di più gli sviluppi di questo (IMHO) ottimo DE.
Quello che però cerco di evitare è di avere troppi software. In pratica mi piace avere un singolo software per ogni cosa che devo fare e non software specializzati per fare in diversi modi la stessa cosa.
Visto che, probabilmente, non sono stato proprio limpidissimo faccio un'esempio.
Utilizzo con allegria e soddisfazione GEdit come editor di testo e non ho mai accettato l'idea di dover utilizzare un'altro programma per scrivere codice!!! Ne ho provati diversi, ma alla fine l'integrazione con GNOME, il Look&Feel, e la pulizia di interfaccia che mi offre GEdit non ha mai trovato uguali.
E questo mi ha portato a sviluppare con GEdit e compilare a manina le cose utilizzando il gcc, debuggare lanciando a mando il gdb e così via. Non che questa sia una cosa cattiva, anzi, solo che la comodità che in genere offre un'IDE di programmazione è proprio quella di poter compilare il codice premendo un tasto, lanciare il debugger con un'altro ed eseguire le applicazione senza dover continuamente saltare da una finestra all'altra.
Sicuramente molti di voi mi diranno: "C'è VI, testina, da li fai tutti". E' vero, però ammetto che in una situazione aziendale nel quale devo tenere sott'occhio sempre la posta, l'IM, i feed RSS dei Gechi ed il forum di gentoo (hmm, forse quest'ultime cose non sono proprio aziendali... ), avere qualcosa che mi permetta di lavorare in ambiente grafico mi viene comodo.
Ho scoperto un softwarino e delle opzioni di GEdit che mi hanno cambiato la vita ed infatti ecco come
Trasformare GEdit in un IDE
nel mio caso, in un IDE per C
ovviamente lo potete trasformare in un'IDE per qualsiasi cosa, ma io developpo in C e quindi vi spiego quello
per prima cosa emergiamo un bel debugger grafico (in realtà è un frontend per gdb ) per GNOME, nemiver:
Code: | # echo "dev-util/nemiver ~x86" >> /etc/portage/package.keywords
# echo "dev-cpp/libgtksourceviewmm ~x86" >> /etc/portage/package.keywords
# echo "dev-cpp/gtkmm ~x86" >> /etc/portage/package.keywords
# echo "dev-cpp/glibmm ~x86" >> /etc/portage/package.keywords
# emerge -av nemiver |
e, già che ci siamo, installiamo anche zenity che ci servirà in seguito:
Code: | # echo "gnome-extra/zenity ~x86" >> /etc/portage/package.keywords
# emerge -av zenity |
Terminata la compilazione apriamo il nostro GEdit e vediamo la magia:
Strumenti -> Strumenti esterni
credo che in inglese sia
Tools -> Extern tools
ma non ne sono sicuro, attendo conferma
In questa schermata possiamo inserire degli script di shell ed associarli ad alcuni shortcut da tastiera.... L'ideale per trasformare GEdit in un'ottimo IDE.
Per esempio, le tre funzioni che ho implementato, e che qui vi propongo sono le seguenti:
- Compila
- Compila ed Esegui
- Compila Esegui e Debugga
ed ecco a voi i tre script, dopodichè ve ne illustrerò il funzionamento:
Compila
Code: | #!/bin/sh
MAIN="`cat .gedit | grep main: | awk '{print $2}' 2> /dev/null`"
if [ ${#MAIN} -eq 0 ]; then
MAIN=$GEDIT_CURRENT_DOCUMENT_NAME
fi
OUTPUT="`cat .gedit | grep output: | awk '{print $2}' 2> /dev/null`"
if [ ${#OUTPUT} -eq 0 ]; then
FILE="`echo $GEDIT_CURRENT_DOCUMENT_NAME | cut -d'.' -f1`"
OUTPUT="`zenity --entry --title "Nome eseguibile" --text "Inserire nome eseguibile:" --entry-text="$FILE"`"
if [ ${#OUTPUT} -eq 0 ]; then
OUTPUT="a.out"
fi
fi
LISTLIB="`cat .gedit | grep lib: | awk '{print $2}' 2> /dev/null`"
if [ ${#LISTLIB} -eq 0 ]; then
LIB=""
else
LIB="`pkg-config --cflags --libs $LISTLIB`"
fi
echo "Compilo:"
echo "gcc -o $OUTPUT $LIB $MAIN"
gcc -o $OUTPUT $LIB $MAIN
if [ $? -ne 0 ]; then
zenity --error --title "Errore" --text "Compilazione fallita!"
else
zenity --info --title "Completato" --text "Compilazione completata con successo!"
fi
exit |
Compila ed Esegui
Code: | #!/bin/sh
MAIN="`cat .gedit | grep main: | awk '{print $2}' 2> /dev/null`"
if [ ${#MAIN} -eq 0 ]; then
MAIN=$GEDIT_CURRENT_DOCUMENT_NAME
fi
OUTPUT="`cat .gedit | grep output: | awk '{print $2}' 2> /dev/null`"
if [ ${#OUTPUT} -eq 0 ]; then
FILE="`echo $GEDIT_CURRENT_DOCUMENT_NAME | cut -d'.' -f1`"
OUTPUT="`zenity --entry --title "Nome eseguibile" --text "Inserire nome eseguibile:" --entry-text="$FILE"`"
if [ ${#OUTPUT} -eq 0 ]; then
OUTPUT="a.out"
fi
fi
LISTLIB="`cat .gedit | grep lib: | awk '{print $2}' 2> /dev/null`"
if [ ${#LISTLIB} -eq 0 ]; then
LIB=""
else
LIB="`pkg-config --cflags --libs $LISTLIB`"
fi
echo "Compilo:"
echo "gcc -o $OUTPUT $LIB $MAIN"
gcc -o $OUTPUT $LIB $MAIN
if [ $? -ne 0 ]; then
zenity --error --title "Errore" --text "Compilazione fallita!"
else
echo
echo "Compilazione completata con successo! Eseguo..."
./$OUTPUT
fi
exit |
Compila Esegui e Debugga
Code: | #!/bin/sh
DEBUGGER="`which nemiver 2> /dev/null`"
if [ $? -ne 0 ]; then
zenity --error --title "Errore" --text "Debugger 'nemiver' non trovato. Impossibile eseguire il comando."
exit
fi
MAIN="`cat .gedit | grep main: | awk '{print $2}' 2> /dev/null`"
if [ ${#MAIN} -eq 0 ]; then
MAIN=$GEDIT_CURRENT_DOCUMENT_NAME
fi
OUTPUT="`cat .gedit | grep output: | awk '{print $2}' 2> /dev/null`"
if [ ${#OUTPUT} -eq 0 ]; then
FILE="`echo $GEDIT_CURRENT_DOCUMENT_NAME | cut -d'.' -f1`"
OUTPUT="`zenity --entry --title "Nome eseguibile" --text "Inserire nome eseguibile:" --entry-text="$FILE"`"
if [ ${#OUTPUT} -eq 0 ]; then
OUTPUT="a.out"
fi
fi
LISTLIB="`cat .gedit | grep lib: | awk '{print $2}' 2> /dev/null`"
if [ ${#LISTLIB} -eq 0 ]; then
LIB=""
else
LIB="`pkg-config --cflags --libs $LISTLIB`"
fi
echo "Compilo:"
echo "gcc -o $OUTPUT $LIB $MAIN"
gcc -o $OUTPUT $LIB $MAIN
if [ $? -ne 0 ]; then
zenity --error --title "Errore" --text "Compilazione fallita!"
else
echo
echo "Compilazione completata con successo! Eseguo..."
$DEBUGGER ./$OUTPUT
fi
exit |
Ecco qui.
In pratica questi script vanno a lavorare all'interno della directory nella quale state lavorando (fondamentalmente quella in cui si trova il file che avete aperto) e cercano la presenza di un file .gedit
Nel caso non ci sia quel file viene proposta la richiesta di inserire il nome dell'eseguibile (in automatico viene impostato il nome del file senza l'estensione) e viene eseguito un semplicissimo:
Code: | gcc -o nomefile nomefile.estensione |
La vera comodità nasce nel momento in cui andate a creare il file .gedit. Eccovene un esempio:
Code: | $ cat .gedit
main: main.c
output: MioProgramma
lib: gtk+-2.0
lib: libglade-2.0 |
in questo caso lo script va ad estrarre il nome del file principale (main) del "progetto" (nel mio caso il nome del file contenente la funzione main() ), il nome dell'output, e la lista delle librerie necessarie e, sempre nel mio caso, parsando il contenuto del file va ad eseguire:
Code: | $ gcc -o MioProgramma `pkg-config --libs --cflags gtk+-2.0 libglade-2.0` main.c |
che viene ovviamente trasformato in
Code: | $ gcc -o MioProgramma -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/libglade-2.0 -I/usr/include/libxml2 -lglade-2.0 -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 main.c |
Andando a compilare il programma esattamente come a me serviva.
Ovviamente, non c'è limite alle librerie che posso inserire nel file .gedit, l'unica cosa da ricordarsi è che dalle indicazione del tipo (main:, output:, lib:) bisogna inserire uno spazio, altrimenti lo script non rileva il valore passato
Questi script, inoltre, utilizzano zenity per stampare l'avviso di corretta/non corretta compilazione, in modo che avete un'impatto immediato di cosa è successo.
Ovviamente la differenza tra i 3 script sopra riportati è:
- Compila: Esegue la compilazione con gcc
- Compila ed Esegui: Esegue la compilazione con gcc e, se va a buon fine, esegue il programma.
- Compila Esegui e Debugga: Esegue la compilazione con gcc e, se va a buon fine, esegue nemiver passandogli il programma appena compilato.
Come sempre, spero di essere stato utile e di avervi dato spunti per la scrittura dei vostri script ed IDE!!!
Ciriciao
mouser |
|
Back to top |
|
|
MeMyselfAndI l33t
Joined: 15 Nov 2005 Posts: 784 Location: Between the monitor and the chair
|
Posted: Fri Oct 12, 2007 3:07 pm Post subject: |
|
|
Un precisazione : gli external tool sono disponibili previa abilitazione del plugin in Preferences->Plugins |
|
Back to top |
|
|
mouser Veteran
Joined: 10 Aug 2004 Posts: 1419 Location: Milano
|
Posted: Fri Oct 12, 2007 3:21 pm Post subject: |
|
|
MeMyselfAndI wrote: | Un precisazione : gli external tool sono disponibili previa abilitazione del plugin in Preferences->Plugins |
Grazie della precisazione
Ciriciao
mouser |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Sat Oct 13, 2007 9:32 am Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE |
|
|
mouser wrote: |
Oramai da qualche tempo sono diventato gnomo convinto e cerco di seguire sempre di più gli sviluppi di questo (IMHO) ottimo DE. |
ma sei lo stesso mouser di questo multi-tip! _________________ LP |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Sat Oct 13, 2007 8:04 pm Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE |
|
|
lucapost wrote: | mouser wrote: |
Oramai da qualche tempo sono diventato gnomo convinto e cerco di seguire sempre di più gli sviluppi di questo (IMHO) ottimo DE. |
ma sei lo stesso mouser di questo multi-tip! |
non solo! E' lo stesso mouser che quando gli dissi "ho usato zenity per tirar fuori due box del cavolo" mi disse "ma per quello c'e' xdialog!
eh, come passa il tempo
Coda |
|
Back to top |
|
|
skypjack l33t
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Sun Oct 14, 2007 7:14 am Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE |
|
|
mouser wrote: |
Sicuramente molti di voi mi diranno: "C'è VI, testina, da li fai tutti"
|
Da poco ho scoperto che c'è pure emacs, che fa molto di più!
Scherzi a parte, ebbravo mouser ... |
|
Back to top |
|
|
riverdragon Veteran
Joined: 14 Sep 2006 Posts: 1269 Location: Verona
|
Posted: Sun Oct 14, 2007 1:48 pm Post subject: |
|
|
Ma l'utilità è principalmente per i programmi grafici o sbaglio?
Funziona anche con i programmi da linea di comando? |
|
Back to top |
|
|
mouser Veteran
Joined: 10 Aug 2004 Posts: 1419 Location: Milano
|
Posted: Tue Oct 16, 2007 8:01 am Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE |
|
|
lucapost wrote: | ma sei lo stesso mouser di questo multi-tip! |
Yees
Infatti sul mio portatile Compaq 486DX con 32MB di Ram e 2,1G di Disco uso il framebuffer
codadilupo wrote: | non solo! E' lo stesso mouser che quando gli dissi "ho usato zenity per tirar fuori due box del cavolo" mi disse "ma per quello c'e' xdialog! |
Non me ne fate passare una, nè
Comunque, a mia discolpa posso dire che a differenza di xdialog, zenity è più integrato con GNOME.
riverdragon wrote: | Ma l'utilità è principalmente per i programmi grafici o sbaglio?
Funziona anche con i programmi da linea di comando? |
Quelli che puoi andare a creare sono script di shell, quindi l'unico limite è la fantasia
Ciriciao
mouser |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|