2010.4.21 に取り込んで頂きました ので、以下の修正はもう不要です。
大したハックではありませんが、以下の修正をしました。
修正内容
`t’ でオフラインとオンラインをトグル出来るようにしました。デフォル
トの twittering-toggle-proxy() へのキーバインドを変更しています。接
続状態はミニバッファに表示されたアイコンで分かるようになっています。
`q’ で twittering-mode を終了できるようにしました。
Emacs23 以降で twittering-update-lambda() と
twittering-jojo-mode() を実行すると、文字化けする件を修正しました。
[2009-08-01-1]
の件です。
反映方法
twittering-mode.el を置いたディレクトリに icons というディレクトリ
を作り、plugged.xpm
と unplugged.xpm
を置いてください。これらの画像
は Navi2ch に付属するものです。
修正した twittering-mode.el へのパッチは以下になります。アイコンを
表示させるコードは Navi2ch から、ほぼそのまま流用させて頂きました。
Index: twittering-mode.el
===================================================================
--- twittering-mode.el (revision 138)
+++ twittering-mode.el (working copy)
@@ -296,8 +296,9 @@
(define-key km "H" 'beginning-of-buffer)
(define-key km "i" 'twittering-icon-mode)
(define-key km "s" 'twittering-scroll-mode)
- (define-key km "t" 'twittering-toggle-proxy)
+ (define-key km "t" 'twittering-toggle-offline)
(define-key km "\C-c\C-p" 'twittering-toggle-proxy)
+ (define-key km "q" 'twittering-mode-exit)
nil))
(defvar twittering-mode-syntax-table nil "")
@@ -363,8 +364,102 @@
(set-syntax-table twittering-mode-syntax-table)
(run-hooks 'twittering-mode-hook)
(font-lock-mode -1)
- (twittering-start))
+ (twittering-start)
+ (twittering-offline-init-icons)
+ (twittering-set-mode-line-identification))
+(defvar twittering-mode-line-identification nil)
+
+(defmacro twittering-display-image-p ()
+ '(and (display-images-p)
+ (image-type-available-p 'xpm)))
+
+(defvar twittering-online-image nil)
+(defvar twittering-offline-image nil)
+
+(defvar twittering-online-indicator "[ON] ")
+(defvar twittering-offline-indicator "[--] ")
+(defvar twittering-modeline-online twittering-online-indicator)
+(defvar twittering-modeline-offline twittering-offline-indicator)
+(put 'twittering-modeline-online 'risky-local-variable t)
+(put 'twittering-modeline-offline 'risky-local-variable t)
+
+(defvar twittering-icon-directory
+ (expand-file-name "icons/"
+ (file-name-directory
+ (locate-library "twittering-mode")))
+ "* アイコンファイルが置かれたディレクトリ。nil ならアイコンを使わない。")
+
+;; folder icons. filename relative to twittering-icon-directory
+(defvar twittering-online-icon "plugged.xpm"
+ "*Icon file for online state.")
+(defvar twittering-offline-icon "unplugged.xpm"
+ "*Icon file for offline state.")
+
+(defun twittering-offline-init-icons ()
+ (let ((props (when (display-mouse-p)
+ (list 'local-map (purecopy (make-mode-line-mouse-map
+ 'mouse-2 #'twittering-toggle-offline))
+ 'help-echo "mouse-2 toggles offline mode"))))
+ (if (twittering-display-image-p)
+ (progn
+ (unless twittering-online-image
+ (let ((load-path (cons twittering-icon-directory load-path)))
+ (setq twittering-online-image (find-image
+ `((:type xpm
+ :file ,twittering-online-icon
+ :ascent center)))
+ twittering-offline-image (find-image
+ `((:type xpm
+ :file ,twittering-offline-icon
+ :ascent center))))))
+ (setq twittering-modeline-online
+ (apply 'propertize twittering-online-indicator
+ `(display ,twittering-online-image ,@props))
+ twittering-modeline-offline
+ (apply 'propertize twittering-offline-indicator
+ `(display ,twittering-offline-image ,@props))))
+ (when props
+ (setq twittering-modeline-online
+ (apply 'propertize twittering-online-indicator props)
+ twittering-modeline-offline
+ (apply 'propertize twittering-offline-indicator props))))))
+
+(defun twittering-set-mode-line-identification ()
+ (let ((offline
+ '(twittering-timer twittering-modeline-online twittering-modeline-offline)))
+ (unless twittering-mode-line-identification
+ (setq twittering-mode-line-identification
+ (default-value 'mode-line-buffer-identification)))
+ (setq mode-line-buffer-identification
+ (list offline
+ 'twittering-mode-line-identification)))
+ (force-mode-line-update t))
+
+(defun twittering-toggle-offline ()
+ "twittering-mode の接続をトグルする。"
+ (interactive)
+ (cond
+ (twittering-timer
+ (twittering-stop)
+ (message "Now offline"))
+ (t
+ (twittering-start)
+ (message "Now online")))
+ (twittering-set-mode-line-identification))
+
+(defun twittering-mode-exit ()
+ "twittering-mode を終了する。"
+ (interactive)
+ (when (y-or-n-p "Really exit twittering-mode? ")
+ (if twittering-timer
+ (twittering-stop))
+ (dolist (buf (list twittering-http-buffer
+ twittering-wget-buffer
+ twittering-buffer))
+ (if (get-buffer buf)
+ (kill-buffer buf)))))
+
;;;
;;; Basic HTTP functions
;;;
@@ -971,18 +1066,24 @@
(interactive)
(twittering-http-post
"statuses" "update"
- `(("status" . "\xd34b\xd22b\xd26f\xd224\xd224\xd268\xd34b")
+ `(("status" . ,(if (>= emacs-major-version 23)
+ "\x3bb\x304b\x308f\x3044\x3044\x3088\x3bb"
+ "\xd34b\xd22b\xd26f\xd224\xd224\xd268\xd34b"))
("source" . "twmode"))))
(defun twittering-update-jojo (usr msg)
- (if (string-match "\xde21\xd24b\\(\xd22a\xe0b0\\|\xdaae\xe6cd\\)\xd24f\xd0d6\\([^\xd0d7]+\\)\xd0d7\xd248\xdc40\xd226"
+ (if (string-match (if (>= emacs-major-version 23)
+ "\x6b21\x306b\\(\x304a\x524d\\|\x8cb4\x69d8\\)\x306f\x300c\\([^\x300d]+\\)\x300d\x3068\x8a00\x3046"
+ "\xde21\xd24b\\(\xd22a\xe0b0\\|\xdaae\xe6cd\\)\xd24f\xd0d6\\([^\xd0d7]+\\)\xd0d7\xd248\xdc40\xd226")
msg)
(twittering-http-post
"statuses" "update"
`(("status" . ,(concat
"@" usr " "
(match-string-no-properties 2 msg)
- "\xd0a1\xd24f\xd243!?"))
+ (if (>= emacs-major-version 23)
+ "\x3000\x306f\x3063!?"
+ "\xd0a1\xd24f\xd243!?")))
("source" . "twmode")))))
;;;
P.S.
“C-c C-s” で投稿する時は、ミニバッファ以外を使うようにしたいですねえ。
あと、作者さんにはどうやって連絡を取るのでしょうか。。。
追記(2009-11-21):
作者さんに連絡とれました。
Emacs23 以降で twittering-update-lambda() と
twittering-jojo-mode() を実行すると、文字化けする件は最新の Git
リポジトリでは修正されていました。他 2 つのパッチも取り込んでいただ
けそうな雰囲気です。