Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOW-TO] Trasformare GEdit in un IDE
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1418
Location: Milano

PostPosted: Fri Oct 12, 2007 2:49 pm    Post subject: [HOW-TO] Trasformare GEdit in un IDE Reply with quote

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... :roll: :roll:), 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 :P

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 :D

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 :wink:
_________________
Della serie: "Informatica for dummies":

Io: "Premi il tasto Invio" - Risp: "Ma il tasto Invio è quello con scritto Enter sopra?"
Io: "Scrivi T maiuscolo" - Risp: "Questa tastiera non ha le lettere maiuscole..."
Back to top
View user's profile Send private message
MeMyselfAndI
l33t
l33t


Joined: 15 Nov 2005
Posts: 784
Location: Between the monitor and the chair

PostPosted: Fri Oct 12, 2007 3:07 pm    Post subject: Reply with quote

Un precisazione : gli external tool sono disponibili previa abilitazione del plugin in Preferences->Plugins
Back to top
View user's profile Send private message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1418
Location: Milano

PostPosted: Fri Oct 12, 2007 3:21 pm    Post subject: Reply with quote

MeMyselfAndI wrote:
Un precisazione : gli external tool sono disponibili previa abilitazione del plugin in Preferences->Plugins

Grazie della precisazione :D

Ciriciao
mouser :wink:
_________________
Della serie: "Informatica for dummies":

Io: "Premi il tasto Invio" - Risp: "Ma il tasto Invio è quello con scritto Enter sopra?"
Io: "Scrivi T maiuscolo" - Risp: "Questa tastiera non ha le lettere maiuscole..."
Back to top
View user's profile Send private message
lucapost
Veteran
Veteran


Joined: 24 Nov 2005
Posts: 1412
Location: <ud|me|ts> - Italy

PostPosted: Sat Oct 13, 2007 9:32 am    Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE Reply with quote

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! :lol: :lol: :lol:
_________________
LP
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3134

PostPosted: Sat Oct 13, 2007 8:04 pm    Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE Reply with quote

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! :lol: :lol: :lol:


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! :lol:

eh, come passa il tempo :-P

Coda
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Sun Oct 14, 2007 7:14 am    Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE Reply with quote

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ù! :P
Scherzi a parte, ebbravo mouser ... :wink:
Back to top
View user's profile Send private message
riverdragon
Veteran
Veteran


Joined: 14 Sep 2006
Posts: 1269
Location: Verona

PostPosted: Sun Oct 14, 2007 1:48 pm    Post subject: Reply with quote

Ma l'utilità è principalmente per i programmi grafici o sbaglio?
Funziona anche con i programmi da linea di comando?
Back to top
View user's profile Send private message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1418
Location: Milano

PostPosted: Tue Oct 16, 2007 8:01 am    Post subject: Re: [HOW-TO] Trasformare GEdit in un IDE Reply with quote

lucapost wrote:
ma sei lo stesso mouser di questo multi-tip! :lol: :lol: :lol:

Yees :lol: :lol:
Infatti sul mio portatile Compaq 486DX con 32MB di Ram e 2,1G di Disco uso il framebuffer :wink:

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! :lol:

Non me ne fate passare una, nè :roll: :roll:
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 8) 8)

Ciriciao
mouser :wink:
_________________
Della serie: "Informatica for dummies":

Io: "Premi il tasto Invio" - Risp: "Ma il tasto Invio è quello con scritto Enter sopra?"
Io: "Scrivi T maiuscolo" - Risp: "Questa tastiera non ha le lettere maiuscole..."
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
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