Donnerstag, März 22, 2012

Emacs Jabber.el und XMonad

Ich habe schon sehr lange irssi mit irssi-xmpp als meinen Jabber-Client verwendet. Jetzt verwende ich aber seit einiger Zeit sehr gerne Emacs und dieser verfügt über sehr viel Funktionalitäten. Man kann mit ihm auch per Jabber kommunizieren.

Wenn man ein Debian-System verwendet kann man Jabber für Emacs folgendermaßen installieren:

$ aptitude install emacs-jabber

Danach kann Jabber schon verwendet wenn man einige Grundeinstellungen trifft. Man muß z.B. den Server angeben.

(setq jabber-account-list
      '(("user.name@gmail.com/emacs"
         (:network-server . "talk.google.com")
         (:connection-type . ssl))))

Wenn man nun Emacs startet kann man mit jabber-connect sich mit diesem Server verbinden, man muß lediglich noch das Paßwort eingeben. Das Problem bei dieser Lösung ist es, das der Window-Manager nicht mitbekommt wenn sich ein Event ereignet im Emacs. Hier kann man sich eine Funktion schreiben die mir in XMonad behilflich ist. Ich verwende dazu dzen2 und erstelle folgendes Skript:

#!/bin/bash
echo $1 | dzen2 -p $2

Dieses Skript kann man dann mit 2 Parametern aufrufen. Der erste Parameter ist der Text der angezeigt werden soll und der zweite ist die Zeit wie lange diese Nachricht angezeigt werden soll. Jetzt muß man Emacs nur noch sagen, das er diese Funktion aufrufen soll wenn eine neue Nachricht über Jabber eintrifft.

Hier verwenden wir die Liste jabber-alert-message-hooks. Hier kann man alle Funktionen angeben die aufgerufen werden wenn so ein Event auftritt. Zunächst schreiben wir uns eine Funktion die das Shell-Skript aufruft.

(setq jabber-dzen2-notify-time 4)

(defun jabber-dzen2-notify (message)
  (start-process "notify" nil "notify.sh" message
                 (number-to-string jabber-dzen2-notify-time)))

(defun jabber-message-dzen2 (from buffer text proposed-alert)
  (jabber-dzen2-notify (concat "[" (jabber-jid-displayname from) "]: "
  text)))

Wenn ein Event eintritt soll jetzt die Funktion jabber-message-dzen2 aufgerufen werden, die wiederum die Funktion jabber-dzen2-notify aufruft die eine dzen2-Nachricht auf dem Bildschirm darstellt. Jetzt muß man nur mehr diese Funktion dem Hook mitteilen.

(add-to-list 'jabber-alert-message-hooks 'jabber-message-dzen2)

Danach sieht man immer eine dzen2-Nachricht wenn eine neue Nachricht über Jabber kommt.

Keine Kommentare:

Kommentar veröffentlichen