hatena-modeを複数のアカウントに対応してみました
utf8 にしてから,再投稿すると,なぜか投稿記事が文字化けをしてしまっていたので,おかしくなったエントリーを一旦削除しました m(_ _)m
なぜ文字化けするのか,小 2 時間くらいぐちゃぐちゃやっているうちに,hatena-mode.el を複数のアカウントに対応してみました.
複数アカウント対応だったら,simple-hatena-mode を使えばよいのだけれども,hatena-mode のサックリ感というかお手軽さがたまらないので,未だに hatena-mode をしばしば使っている.
以下に安直な対応を晒します.笑ってやってください.
--- hatena-mode.el.orig 2008-07-06 03:03:33.000000000 +0900 +++ hatena-mode.el 2008-07-06 03:45:59.000000000 +0900 @@ -1,4 +1,5 @@ ;;; hatena-mode.el --- major mode for Hatena::Diary (http://d.hatena.ne.jp) +;;; Time-stamp: <2008-07-06 03:45:59 munepi> ;; Created: Thu Jun 17 2004 ;; Keywords: blog emacs @@ -8,7 +9,7 @@ ;; http://d.hatena.ne.jp/dev-null ;; and all users -(defconst hatena-version "0.9.7" "Version number of hatena.el") +(defconst hatena-version "0.9.7-mp1" "Version number of hatena.el") ;; 1) 適当なディレクトリにこのファイルをおく. @@ -17,7 +18,10 @@ ;; 2) .emacs に次の 4 行を追加する. ;; (setq load-path (cons (expand-file-name "~/elisp") load-path)) ;; (load "hatena-mode") -;; (setq hatena-usrid "your username on Hatena::Diary") +;; ;;(setq hatena-usrid "your username on Hatena::Diary"); obsolete!!! +;; (setq hatena-usrid-list ;; list of your acounts on Hatena::Diary +;; '(("hoge") ("foo")) +;; ) ;; (setq hatena-plugin-directory "~/elisp") ;; `hatena-use-file' を non-nil にするとパスワードを base64 で ;; 暗号化してファイルに保存しますが、"人間が見てすぐわからない"ぐらいの @@ -51,7 +55,7 @@ ;; `hatena-browser-function' に 'browse-url とかやると日記をポスト ;; した後その日 url を引数としてブラウザを呼びます. ;; `hatena-insert-webdiary' はてなバッファで実行すると、現在 web に -;; アップされているファイルを取ってくる。 o +;; アップされているファイルを取ってくる。 ;; ;; 4) 上位モード ;; hatena-mode はデフォルトで html-mode に被せています。これを @@ -103,6 +107,8 @@ (defun hatena (&optional date) "Hatena::Diary ページを開く. " (interactive) + (when (not hatena-usrid) + (hatena-read-usrid)) (unless (file-exists-p hatena-directory) (make-directory hatena-directory t)) (if (not date) @@ -124,6 +130,23 @@ nil) ) +(defun hatena-read-usrid nil + "Read a usrid on mini buffer and return its usrid." + (interactive) + (let* ((selected (car hatena-usrid-list)) + (default (car selected))) + (setq hatena-usrid + (completing-read + (format "Select User ID (%s): " default) hatena-usrid-list + nil " " default) + ) + (if (string-match hatena-usrid "") + (setq hatena-usrid default)) + (setq hatena-directory + (concat (file-name-as-directory hatena-directory) hatena-usrid "/")) + ) + ) + (define-derived-mode hatena-mode html-mode "Hatena" "はてなモード. " (font-lock-add-keywords 'hatena-mode @@ -160,7 +183,8 @@ (setq auto-mode-alist (append (list - (cons (concat hatena-directory hatena-fname-regexp) 'hatena-mode)) + (cons (concat hatena-directory hatena-fname-regexp) 'hatena-mode) + (cons (concat hatena-directory "\\([A-z0-9]*\\)/" hatena-fname-regexp) 'hatena-mode)) auto-mode-alist)) @@ -320,7 +344,7 @@ (call-process hatena-curl-command nil nil nil "-k" "-c" hatena-cookie "-x" hatena-proxy - "-d" (concat "key=" hatena-usrid) + "-d" (concat "name=" hatena-usrid) "-d" (concat "password=" password) "-d" (concat "autologin=1") "-d" (concat "mode=enter") --- hatena-vars.el.orig 2008-07-06 03:03:56.000000000 +0900 +++ hatena-vars.el 2008-07-06 03:49:22.000000000 +0900 @@ -10,6 +10,11 @@ :prefix "hatena-" :group 'hatena) +(defcustom hatena-usrid-list nil + "List of Hatena::Diary usrid list." + :type 'string + :group 'hatena) + (defcustom hatena-usrid nil "hatena-mode のユーザー名" :type 'string