Emacs Twittering-mode: Favs und Zeilenumbruch

Kleines Update zum tw-mode: Zum “faven” eines Tweet, kann man M-x twittering-favorite benutzen (bzw. M-x twittering-unfavorite zum “entfaven”), während sich der Cursor auf dem Tweet in der Timeline befindet.

Wer häufiger favt, kann sich hierfür Kürzel definieren. Die unten stehenden Zeilen müssen hierzu in die ~/.emacs einfügt werden

(let ((km twittering-mode-map))
  (define-key km (kbd "*") 'twittering-favorite)
  (define-key km (kbd "/") 'twittering-unfavorite)
  nil)

um mit den Tasten * und / faven bzw. entfaven zu können.

Um automatisch den Visual-Line-Mode für twittering-mode zu benutzen (z. B. bei kleiner Spaltenbreite) muss zusätzlich

(add-hook 'twittering-mode-hook 'turn-on-visual-line-mode)

in ~/.emacs einfügt werden.

Emacs twittering-mode Benachrichtigungen

Wer sich gern von der Arbeit abhalten lässt oder einfach nichts besseres zu tun hat (wie ich), wird sich über die folgenden Zeilen freuen: Der Emacs twittering-mode (den ich hier und hier bereits vorgestellt habe) kann jetzt maximale Aufmerksamkeit fordern. Ich will kurz zwei Wege vorstellen, mit denen man sich über neue Tweets informieren lassen kann.

Emacs Minibuffer

Diese Variante ist eher unaufdringlich: Bei Eingang eines neuen Tweets, wird dieser mit dem Namen der :Timeline und des [Absender] im Minibuffer am unteren Ende des Emacsfensters angezeigt. Folgende Zeilen müssen hierzu in ~/.emacs eingefügt werden,

(add-hook 'twittering-new-tweets-hook (lambda ()
  (dolist (el twittering-new-tweets-statuses)
    (message
      (concat (twittering-timeline-spec-to-string twittering-new-tweets-spec) " ["
        (cdr (assoc 'user-screen-name el)) "] "
	(cdr (assoc 'text el)))))
    ))

was einen, sogenannten hook erzeugt, der beim eintreffen neuer Tweets ausgeführt wird. Das Ergebnis ist im Bild oben zu sehen.

Update: Emacs Modeline  (Danke an @cvmat)

Noch unaufdringlicher ist es, die Anzahl ungelesener Tweets in der Modeline anzeigen zu lassen (siehe Bild oben, tw(46)). Hierzu nach (require 'twittering-mode) folgende Zeile in ~/.emacs einfügen:

(twittering-enable-unread-status-notifier)

Desktop notification

Für echte Desktop notification benötigt man ein Hilfsprogramm. Unter Linux liegt den meisten Distributionen notify-send bei. Ich benutze hier Scientific Linux 6.2, wo man das Paket libnotify aus dem Standardrepository installieren muss. Folgender Code muss ~/.emacs hinzugefügt werden

(add-hook 'twittering-new-tweets-hook (lambda ()
  (let ((n twittering-new-tweets-count))
    (if (> n 10)
	(start-process "twittering-notify" nil "notify-send"
		       "-i" "/home/%USER%/.emacs.d/twittering-mode/misc/twitter-icon.svg"
	  (twittering-timeline-spec-to-string twittering-new-tweets-spec)
	  (format "You have %d new tweets" n ))
      (dolist (el twittering-new-tweets-statuses)
	(start-process "twittering-notify" nil "notify-send"
		       "-i" "/home/%USER%/.emacs.d/twittering-mode/misc/twitter-icon.svg"
	  (concat
	   (twittering-timeline-spec-to-string twittering-new-tweets-spec)
	   "\n"
	   (cdr (assoc 'user-screen-name el)))
	  (cdr (assoc 'text el))))
      ))))

%USER% muss durch den eigenen Benutzernamen ersetzt werden. Die Pfade im Codesnippet setzen voraus, dass die Installation von twittering-Mode nach dieser Anleitung vorgenommen wurde. Für jeden neuen Tweet (in jeder geöffneten Timeline) wird jetzt eine Sprechblase 5s lang auf dem Bildschirm erscheinen. Man kann selbstverständlich auch beide hooks nacheinander ausführen lassen. Wer offengelassene (Lisp-) Klammern findet, kann sie behalten. Und jetzt, frohes Ablenken-lassen.

Emacs twittering-mode aufhübschen

Hier nur eine kleine Anregung zur Formatierung der Timeline des Emacs twittering-modes: Diese wird über die Variable twittering-status-format kontrolliert. Folgende Zeile in ~/.emacs einfügen und schon wirkt die Timeline aufgeräumter und lesbarer:

(setq twittering-status-format "%i %FACE[bold]{%S} %FACE[shadow]{@%s}\n%FOLD[  ]{%t\n%FACE[shadow]{%RT{Retweeted by @%s} %@}}\n")

%i steht für Avatar-Icon und kann in der Timeline optional mit i ein- und ausgeschaltet werden oder durch setzen von

(setq twittering-icon-mode t)

dauerhaft aktiviert werden. (Ich bevorzuge die Timeline ohne Bilder – siehe Screenshot). Hier noch ein Listing aller Formatierungsanweisungen aus dem Quellcode:

%s - screen_name
%S - name
%i - profile_image
%d - description
%l - location
%L - \" [location]\"
%r - \" sent to user\" (use on direct_messages{,_sent})
%r - \" in reply to user\" (use on other standard timeline)
%R - \" (retweeted by user)\"
%RT{...} - strings rendered only when the tweet is a retweet.
 The braced strings are rendered with the information of the
 retweet itself instead of that of the retweeted original tweet.
 For example, %s for a retweet means who posted the original
 tweet, but %RT{%s} means who retweeted it.
%u - url
%j - user.id
%p - protected?
%c - created_at (raw UTC string)
%C{time-format-str} - created_at (formatted with time-format-str)
%@ - X seconds ago
%T - raw text
%t - text filled as one paragraph
%' - truncated
%FACE[face-name]{...} - strings decorated with the specified face.
%FILL[prefix]{...} - strings filled as a paragraph. The prefix is optional.
You can use any other specifiers in braces.
%FOLD[prefix]{...} - strings folded within the frame width.
 The prefix is optional. This keeps newlines and does not
 squeeze a series of white spaces.
 You can use any other specifiers in braces.
%f - source
%# - id

Emacs twittering-mode

An Twitter-Clients für Linux mangelt es eigentlich nicht. Wer aber schon immer gern einen Command-Line-Client haben wollte, oder beim täglichen arbeiten den Emacs ungern verlässt, dem sei twittering-mode (twmode) empfohlen. Ich will die Installation unter Linux (Scientific Linux 6.2) kurz umreißen (sollte auf dem Mac ähnlich funktionieren; unter Windows muss man auf die mitgelieferten Command-Line-Tools zurückgreifen):

Voraussetzungen:

Als erstes die benötigten Abhängigkeiten (Emacs-23 *lol*, curl, wget, gnutls-utils, openssl, gnupg) installieren. Weiterhin wird ein Webbrowser gebraucht — Auf dem Desktop sicher kein Problem; auf der Konsole empfiehlt sich w3m mit w3m.el. Folgender Befehl installiert die Abhängigkeiten unter RHEL 6

# yum install emacs curl wget gnutls-utils openssl gnupg2

Wenn twittering-mode vom Github-Repository installiert werden soll (was ich empfehle), muss ausserdem Git installiert werden:

# yum install git

Installation

Es empfiehlt sich Emacserweiterungen nach ~/.emacs.d zu installieren, was im folgenden auch beherzigt werden soll.

$ cd ~/.emacs.d
$ git clone git://github.com/hayamiz/twittering-mode.git

Zur Emacs-Konfigurationsdatei ~/.emacs muss folgendes hinzugefügt werden:

(add-to-list 'load-path "~/.emacs.d/twittering-mode")
(require 'twittering-mode)

Jetzt Emacs starten und den Twittering-Mode mit M+x twit[1] starten. TWmode meldet sich mit Authorization via OAuth.

Wer browse-url-generic-program in der Emacskonfiguration gesetzt hat, kann hier y drücken, ansonsten n drücken und den Link unter 1. anklicken oder via Copypaste im Browser der Wahl öffnen. Den angezeigten PIN-Code in den Emacs-Minibuffer eingeben und los geht’s mit Twitter im Emacs:

Dauerhafte Authorisierung:

Um nicht bei jedem Start von twmode erneut gegen Twitter autorisieren zu müssen, kann man folgende Zeilen in die Emacskonfiguration ~/.emacs aufnehmen:

(require 'epa-file)
(epa-file-enable)
(setq twittering-use-master-password t)

Hierzu wird GnuPG und EasyPG benötigt. Zumindest letzteres ist in Emacs 23 standardmäßig integeriert und kann durch die beiden führenden Zeilen im obigen Listing aktiviert werden [Update: Für Emacs 23 werden die zwei führenden Zeilen nicht benötigt — Sie schaden aber auch nicht. Dank an @cvmat]. Der oauth-access-token wird verschlüsselt unter ~/.twittering-mode.gpg gespeichert. Beim Start von twmode fragt pinentry die Passphrase zum Tokenfile ab und erlaubt hiermit die automatische Authorisierung gegen Twitter.

Wichtige Kommandos:

u
Neuer Tweet
d
Neue Direct Message
Enter
Reply
F4
URL Verkürzung via tinyurl
C-c Enter
Retweet mit Zitat
C-u C-c Enter
Retweet
g
Timeline aktualisieren
g
Timeline aktualisieren
f
Timelines durchblättern
V
Beliebige Timeline
L
Timeline beliebiger Liste
C-c C-u
Eigene Timeline
C-c C-f
Following Timeline
C-c C-r
Reply Timeline (Antworten auf eigene Tweets)
C-c C-d
Direct Messages Timeline

C bedeutet Control. Zum Suchen von Begriffen in Tweets öffnet man eine neue Timeline (V) mit :search/SUCHBEGRIFF/.

[1] M+x bedeutet Meta und x gleichzeitig drücken. Meta ist auf PC-Tastaturen meistens auf der Alt und auf Mac-Tastauren auf cmd. In jedem Fall sollte die Tastenfolge Esc, x (nacheinander) funktionieren.