Sasume
:
Je veux bien que tu détailles les plus intéressantes.
KParts
Les "composants" KDE, par exemple Konsole (émulateur de terminal) et Kate (éditeur) sont embarqués dans KDevelop, KPDF (viewer PDF), Kghostview (viewer PS), Kwrite, et plein d'autres sont embarqués dans Konqueror, KMail et KOrganizer sont embarqués dans Kontact, etc etc... du coup le code écrit pour ces composants est réutilisé un maximum, et l'intégration est vraiment pratique.
Un exemple pratique : sous Konqueror, je click sur un .tar.bz2, Ark (gestionnaire d'archives) s'ouvre dans la même fenêtre où j'ai clické et me liste les fichiers de l'archive, je click sur un .c de l'archive, Kate s'ouvre toujours dans la même fenêtre, et m'affiche le code source avec coloration syntaxique et code folding... on peut difficilement faire plus rapide pour regarder vite fait le code qui se trouve dans une archive compressée sur internet.
DCOP
La communication inter-processus passe par un bus central, et les applications KDE sont scriptables à volonté à travers une interface accessible avec la commande "dcop". Voici des exemples pour bien comprendre comment ça marche.
Dans un terminal, je lance "dcop" pour savoir avec quelles applications je peux communiquer.
mystic:~$ dcop
KWeatherService
kwin
kicker
konqueror-20786
amarok
kded
applet_proxy-14314
kpager
kmix
knotify
kio_uiserver
kalarmd
kcookiejar
konsole-1354
konqueror-20170
klauncher
khotkeys
kopete
kmail
kdesktop
klipper
ksmserver
kaccess
Là par exemple, je vois KWeatherService (c'est l'applet qui affiche la météo dans la barre de lancement). Je veux donc savoir qu'est-ce que je peux faire avec :
mystic:~$ dcop KWeatherService WeatherService
QCStringList interfaces()
QCStringList functions()
QString temperature(QString stationID)
QString dewPoint(QString stationID)
QString relativeHumidity(QString stationID)
QString heatIndex(QString stationID)
QString windChill(QString stationID)
QString wind(QString stationID)
QString pressure(QString stationID)
QPixmap currentIcon(QString stationID)
QPixmap icon(QString stationID)
QString currentIconString(QString stationID)
QString iconFileName(QString stationID)
QString date(QString stationID)
QString visibility(QString stationID)
QStringList cover(QString stationID)
QStringList weather(QString stationID)
QString stationName(QString stationID)
QString stationCountry(QString stationID)
QString longitude(QString stationID)
QString latitude(QString stationID)
QStringList findStations(float lon,float lat)
QString sunRiseTime(QString stationID)
QString sunSetTime(QString stationID)
void update(QString stationID)
void updateAll()
void forceUpdate(QString stationID)
void removeStation(QString stationID)
void addStation(QString stationID)
QStringList listStations()
void exit()
Ceci est l'interface de l'applet KWeather. Je peux recuperer la liste des stations météo que j'ai configuré, et tout un tas d'informations (il fait 7°C à Paris-Orly) :
mystic:~$ dcop KWeatherService WeatherService "listStations"
LFPO
LFPB
mystic:~$ dcop KWeatherService WeatherService "stationName" "LFPO"
Paris-Orly
mystic:~$ dcop KWeatherService WeatherService "temperature" "LFPO"
7°C
Autre exemple, je veux binder une touche multimedia de mon clavier (ou une gesture) à la fonction "Play" de Amarok (lecteur audio) :
mystic:~$ dcop amarok default
QCStringList interfaces()
QCStringList functions()
void play()
void playPause()
void stop()
void next()
void prev()
void pause()
void seek(int s)
int trackTotalTime()
int trackCurrentTime()
void addMedia(KURL)
void addMediaList(KURL::List)
QString nowPlaying()
bool isPlaying()
void setVolume(int volume)
void volumeUp()
void volumeDown()
void enableOSD(bool enable)
Je n'ai plus qu'à binder la touche à la commande "dcop amarok default play".
De la même façon, je liste ma "contact list" et envoie des messages à travers Kopete (client de messagerie instantanée multi-protocole), j'ouvre une fenêtre pour composer un mail à travers KMail, etc.. et tout ça à partir d'un script shell si je veux.
KIO (kioslave)
A chaque fois que je peux entrer une URL pour browser un répertoire (que ce soit dans Konqueror, lorsque j'ouvre ou j'enregistre un fichier, etc...) j'ai le choix entre de nombreux protocoles qui sont centralisés par KIO.
Exemple dans KWrite, je fais "File -> Open...", j'ai la fenêtre standard d'ouverture de fichiers, dans la barre d'URL je mets "
ftp://login@ftpperso.free.fr" et après m'avoir demandé mon mot-de-passe, je me retrouve sur mon compte ftp chez free, et j'ouvre le fichier que je veux. Quand je sauvegarde le fichier il est directement sauvegardé sur le ftp. Pour le ftp c'est assez classique, mais KIO supporte beaucoup d'autres protocoles (plus de 40 chez moi).
C'est grace à celà que je peux naviguer dans des archives compressées sous Konqueror comme si c'était des répertoires, je peux naviguer sur des systemes de fichiers distants (à travers NFS, SMB, telnet, SSH) sans les monter dans mon arborescence, etc...
Services partagés
La correction orthographique généralisée dans toutes les textbox (que ce soit sous Konqueror, KMail, ou autre), c'est bien pratique. Les mêmes boites de dialogues pour l'impression, l'ouverture/enregistrement de fichiers, la configuration des raccourcis clavier, dans toutes les applications KDE, c'est agréable. Avoir les mêmes polices, les mêmes widgets et les mêmes icônes partout, c'est également agréable. Du drag&drop qui marche entre toutes les applications, c'est pratique. Etc etc. Tout ça n'est pas facile à avoir dans un environnement Linux "classique" avec Mozilla, Emacs, Enlightenment, etc...
Pour voir d'autres petits détails pratiques sous KDE :
http://static.kdenews.org/mirrors/www.lugod.org/presentations/kde-user-persp/.