Version 4 (modified by kentaro, 6 years ago)

--

simple-hatena-mode - Emacs interface to Hatena::Diary Writer

simple-htena-modeについて

このパッケージは、「はてなダイアリーライター」をEmacsから使えるようにし、はてなダイアリー/グループ日記を簡単に更新するためのメジャーモード、simple-hatena-modeを提供します。simple-hatena-modeは、html-helper-modeの派生モードとして定義されていますので、html-helper-modeが提供する各種機能も利用できます。

同様の機能を提供するelispについては、すでにいくつかのものがありますが、simple-hatena-modeには、それらと比べて以下の利点があります。

  • 複数のアカウントに対応。
  • それぞれのアカウントのグループ日記に対応。

本パッケージの利用に際して問題がある場合は、以下に挙げる先行実装を試してみることをオススメします。また、simple-hatena-mode.elの作成に際しては、大いに参考にさせていただきましたことを申し添えます。ありがとうございました。

simple-hatena-modeが提供するコマンド

simple-hatena (キーバインド設定なし)

実行日現在の日付で、はてなダイアリー用日記ファイルを開きます。simple-hatena-default-idが設定されている場合、そのidのダイアリを開き、設定がない場合は、アカウントをプロンプトから入力する必要があります(候補補完あり)。

simple-hatena-group (キーバインド設定なし)

実行日現在の日付で、はてなグループ用日記ファイルを開きます。simple-hatena-default-idが設定されている場合、そのidのグループダイアリを開き、設定がない場合は、アカウントを入力する必要があります。いずれの場合も、グループ名をプロンプトから入力する必要が(候補補完あり)。

simple-hatena-version (C-c C-v)

simple-hatena-mode.elのヴァージョンを表示します。

simple-hatena-submit (C-c C-p)

日記をはてなダイアリ/グループへ投稿します。

simple-hatena-trivial-submit (C-c C-c)

日記を「ちょっとした更新」で投稿します。

simple-hatena-timestamp (C-c *)

ポイントがある位置に、小見出しのタイムスタンプを挿入します。

simple-hatena-change-default-id (C-c C-i)

現在のデフォルトidを変更します。

simple-hatena-find-diary-for (C-c C-n)

プロンプト入力により指定された日付(YYYY-MM-DD)の、現在表示しているバッファと同一の文脈における日記ファイル(アカウントおよびdiary/groupが一致するもの)を開きます。

simple-hatena-go-back (C-c C-b)

現在表示しているバッファの、1日前の日記ファイルを開きます。

simple-hatena-go-forward (C-c C-f)

現在表示しているバッファの、1日後の日記ファイルを開きます。

simple-hatena-toggle-debug-mode (C-c C-d)

はてなダイアリーライターのデバッグモードをオン/オフします。

simple-hatena-exit(C-c C-e)

simple-hatena-modeが適用されたバッファを、変更されている場合は保存した上で、 全て削除します。

はてなダイアリーライターの設定

はてなダイアリーライターのインストール

まずは、はてなダイアリーライターをインストールする必要があります。配布サイトよりダウンロードし、適当な場所に配置してください。PATHの通った場所にhw.plという名前で置き、シェルから

$ hw.pl

とするだけで実行可能な状態(PATHの通った場所に起き、+xする等)にしておくと、Emacsの設定ファイルで、はてなダイアリーライターの場所を設定する必要がなくなるため、便利です。また、はてダラ自体の設定については、配布ページにて詳しく解説されていますので、そちらを参照してください。

はてなダイアリーライター用設定ファイル

アカウントごとのダイアリーおよびグループ日記のそれぞれについて、設定ファイルを用意する必要があります。その際、下記に述べるディレクトリ配置や、カスタマイズ可能変数のデフォルト値に従うと、はてなダイアリーライターの設定についても、省力化できます。

全てデフォルトに従った場合:

  • はてなダイアリー設定ファイルの必須項目
    • パスワード
    • クライアントのエンコーディング
    • サーバのエンコーディング
  • はてなグループ設定ファイルの必須項目
    • パスワード
    • グループ名
    • クライアントのエンコーディング
    • サーバのエンコーディング

はてなダイアリーライター用データの配置

simple-hatena-mode.elを使うにあたっては、あらかじめ決まった方法で、ディレクトリを配置する必要があります。変更できる項目もありますが、デフォルト値に従うと、設定をせずに済むので、楽です。

  1. ルートディレクトリとなる、.hatenaディレクトリ(デフォルト値・変更可)以下に、はてなダイアりーライターで利用する各種データを配置します。
  1. ルートディレクトリ直下に、はてなidと同名のディレクトリを、アカウントの数だけ作成し、さらにその下に、それぞれについてdiaryディレクトリを作成します。
  1. グループ日記を利用する場合は、diaryディレクトリと同階層にgroupディレクトリを作成し、その下にグループと同名のディレクトリを、グループの数だけ作成します。
  1. diaryディレクトリ以下、および、グループ名ディレクトリ以下に、はてダラ設定ファイルconfig.txt(はてダラおよびsimple-hatena-modeのデフォルト値・変更可)を配置します。

以上の設定を行った結果、アカウントおよびグループが以下の通りだとすると、ディレクトリ配置は下図のようになります。

アカウント
hatena-id-1, hatena-id-2
グループ
group-1(hatena-id-1, hatena-id-2), group-2(hatena-id-1), group-3(hatena-id-2), group-4(hatena-id-2)
    .hatena
      |
      |-- hatena-id-1
      |   |-- diary
      |   |   `-- config.txt
      |   `-- group
      |       |-- group-1
      |       |   `-- config.txt
      |       `-- group-2
      |           `-- config.txt
      `-- hatena-id-2
          |-- diary
          |   `-- config.txt
          `-- group
              |-- group-1
              |    `-- config.txt
              |-- group-3
              |   `-- config.txt
              `-- group-4
                  `-- config.txt

simple-hatena-mode.elのインストール

Subversionを用いてダウンロードする場合は、以下のようにしてください(Subversionを用いてダウンロードすることを推奨します)。

$ svn co http://svn.coderepos.org/share/lang/elisp/simple-hatena-mode/simple-hatena-mode.el

~/.emacs.d/elisp/にダウンロードした場合、その場所にload-pathが通っていなければ、まずは、以下を設定ファイルに追記します。

(setq load-path
     (cons "~/.emacs.d/elisp/" load-path))

その上で、次のようにしてsimple-hatena-modeを読み込んでください。

(require 'simple-hatena-mode)

simple-hatena-modeの設定

基本的な設定は、上記の前準備に従い、デフォルト値を活用した場合、以上で終了です。その他、各種のカスタマイズ用変数が用意されています。

また、simple-hatena-modeを利用するはてなidがひとつしかない、あるいは、主にひとつのidをよく使うという場合は、以下のようにしてデフォルトのはてなidを設定しておくと、いちいちidを入力せずに済むので、楽です。

(setq simple-hatena-default-id "your-id")

各種設定用変数

;; はてダラスクリプトのパス(デフォルト値: hw.pl)
(setq simple-hatena-bin "~/bin/hw.pl")

;; はてダラデータを置くディレクトリ(デフォルト値: ~/.hatena)
;; 最後のスラッシュを入れないようにしてください
(setq simple-hatena-root "~/.mydiary")

;; はてダラで使うデフォルトのはてなid(デフォルト値: nil)
(setq simple-hatena-default-id "antipop")

;; はてなダイアリーライターのユーザエージェントオプション(デフォルト値: simple-hatena-mode/vヴァージョン番号)
(setq simple-hatena-option-useragent "Hatena::Diary::Writer")

;; はてなダイアリーライターのデバッグモードオプション(デフォルト値: nil)
(setq simple-hatena-option-debug-flag t)

;; はてなダイアリーライターのタイムアウトオプション(デフォルト値: 30秒)
(setq simple-hatena-option-timeout "60")

;; はてなダイアリーライターのクッキーオプション(デフォルト値: t)
(setq simple-hatena-option-cookie-flag nil")

キーバインド

デフォルトでは、以下の通り設定されています。好みに応じて、変更してください。

(define-key simple-hatena-mode-map (kbd "C-c C-v") 'simple-hatena-version)
(define-key simple-hatena-mode-map (kbd "C-c C-p") 'simple-hatena-submit)
(define-key simple-hatena-mode-map (kbd "C-c C-c") 'simple-hatena-trivial-submit)
(define-key simple-hatena-mode-map (kbd "C-c   *") 'simple-hatena-timestamp)
(define-key simple-hatena-mode-map (kbd "C-c C-i") 'simple-hatena-change-default-id)
(define-key simple-hatena-mode-map (kbd "C-c C-n") 'simple-hatena-find-diary-for)
(define-key simple-hatena-mode-map (kbd "C-c C-b") 'simple-hatena-go-back)
(define-key simple-hatena-mode-map (kbd "C-c C-f") 'simple-hatena-go-forward)
(define-key simple-hatena-mode-map (kbd "C-c C-d") 'simple-hatena-toggle-debug-mode)
(define-key simple-hatena-mode-map (kbd "C-c C-e") 'simple-hatena-exit)

フォントロック

デフォルトでは、以下の通り設定されています(デフォルトの色は、開発の進捗にともない調整されることがありますので、実際にはここに挙げたものと違う色がデフォルトとなっているかもしれません)。好みに応じて、変更してください。

(defface simple-hatena-slag-face
  '((((class color) (background light)) (:foreground "IndianRed"))
    (((class color) (background dark)) (:foreground "wheat")))
  "小見出しの*タイムスタンプorスラッグ*部分のフェイス。")

(defface simple-hatena-subtitle-face
  '((((class color) (background light)) (:foreground "DarkOliveGreen"))
    (((class color) (background dark)) (:foreground "wheat")))
  "小見出しのフェイス。")

(defface simple-hatena-inline-face
  '((((class color) (background light)) (:foreground "MediumBlue" :bold t))
    (((class color) (background dark)) (:foreground "wheat" :bold t)))
  "id記法や[keyword:Emacs]等のface")

(defface simple-hatena-markup-face
  '((((class color) (background light)) (:foreground "DarkOrange" :bold t))
    (((class color) (background dark)) (:foreground "IndianRed3" :bold t)))
  "はてなのマークアップのフェイス。")

(defface simple-hatena-link-face
  '((((class color) (background light)) (:foreground "DeepPink"))
    (((class color) (background dark)) (:foreground "wheat")))
  "リンクのフェイス。")

フック

simple-hatena-modeは、以下に挙げる3種類のフックを用意しています。より細かいカスタマイズを必要とする際に、利用してください。

  • 起動時(simple-hatena-mode-hook)
  • 日記の投稿直前(simple-hatena-before-submit-hook)
  • 日記の投稿直後(simple-hatena-after-submit-hook)

さらに進んだ使い方

はてな記法入力支援

hatenahelper-modeを利用すると、キーボードショートカットにより、一部のはてな記法を簡単に入力できます。simple-hatena-modeにて利用する場合は、load-pathの通った場所にhatedarahelper-mode.elをインストールした後、先述の設定の後に以下の設定を追加します。

(require 'hatenahelper-mode)
(add-hook 'simple-hatena-mode-hook
          '(lambda ()
             (hatenahelper-mode 1)))

動作確認環境

  • Putty + Ubuntu + GNU Emacs 23.0.51.1 (i686-pc-linux-gnu, multi-tty)
  • Meadow3 (GNU Emacs 22.1.1 (i386-mingw-nt5.1.2600))

開発者kentaroは主にPutty + Ubuntu + Emacsで使用していますので、開発の進捗にともない、他の環境では動かなくなったりすることがあります。

TODO

  • ディレクトリ配置・設定ファイルセットアップ支援。simple-hatena-setupを実行し、プロンプトから適宜入力するだけで、ディレクトリがセットアップされるようにする。
  • 特定のディレクトリ内の.elを自動的に読み込んで、フィルタをbefore/afterフックで実行する仕組み。はてな記法以外にも、独自の便利記法等を、設定無しで使えるようにできると良さそう。たとえば、wikipedia:EmacsとかでWikipediaへのリンクを張れるようなものとか(というかそれ、パクリだけど)。

いっしょに作ってくださる方を募集しています

「ここはこうした方がいいんじゃね?」とか「おまえはすっこんでろ!俺がこのコードたたき直してやる!」という方は、是非ともCodeReposのコミッタになっていただき、開発に参加してください。elispわからな過ぎて、やりたいことがあっても、なかなか実装にまで至りません><

更新履歴

ver 0.01 (2007-10-06)

  • 初版公開。

作者について

kentaroが作りました。