Version 21 (modified by kentaro, 7 years ago)

--

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

simple-hatena-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-modeの起動

はてなダイアリーに日記を書く場合はM-x simple-hatena RETを、はてなグループに日記を書く場合はM-x simple-hatena-group RETを実行します。はてなid、グループ名について入力を求められるので、適切に入力すると、実行日の日付で日記ファイルが開かれます。そこに、ふだんブラウザ等から日記を書くのと同じように、日記を書き込んでいきます。書き方の詳細については、はてなダイアリーライターのドキュメントをご覧ください。

はてなダイアリーのパーマリンクについて

日記を書く際に注意すべきなのは、はてなダイアリーには様々なパーマリンク生成方法があるということです(詳細については「はてなダイアリーガイド「いろいろな見出し」とは - はてなダイアリー」参照のこと)。

simple-hatena-modeは現在のところ、特にタイムスタンプによるパーマリンク形式を利用する場合、便利な機能を備えています。

日記を投稿する

日記を書き上げたら、はてなへ投稿します。はてなダイアリー/グループ日記のいずれにおいても、C-c C-p RETを入力することで、日記が投稿されます。設定ファイルにパスワードを記入しておらず、クッキーによるログインができない場合、パスワードの入力を促すプロンプトが表示されます。

simple-hatena-modeの初期設定の段階等において、トラブル等への対処のためにデバッグ表示が必要な場合、あらかじめC-c C-d RETとしてデバッグモードをオンにしてから実行すると、より詳しいメッセージが表示されます。

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

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

実行日現在の日付で、はてなダイアリー用日記ファイルを開きます。後述するカスタマイズ変数simple-hatena-time-offsetが指定されている場合、その時間分だけ、午前0時からズレた時間から一日が開始するものとみなします。

simple-hatena-default-idが設定されている場合、そのidのダイアリを自動的に開き、設定がない場合は、はてなidをプロンプトから入力する必要があります。

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

実行日現在の日付で、はてなグループ用日記ファイルを開きます。後述するカスタマイズ変数simple-hatena-time-offsetが指定されている場合、その時間分だけ、午前0時からズレた時間から一日が開始するものとみなします。

simple-hatena-default-id、あるいは、simple-hatena-default-groupが設定されている場合、はてな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-electric-asterisk (*)

後述するカスタマイズ変数simple-hatena-use-timestamp-permalink-flagがnil以外の場合、行頭、かつ、ポイントがある位置に、小見出しのタイムスタンプを挿入します。デフォルトで有効になっています。タイムスタンプによるパーマリンクを利用する際に、便利です。

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

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

simple-hatena-change-default-group (C-c C-g)

現在のデフォルトグループを変更します。

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

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

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

現在表示しているバッファの、1日前の日記ファイルを開きます。前置引数を指定した場合、その日数分だけ前の日記ファイルを開きます。例えば、C-u 3 C-c C-bとした場合、3日前の日記ファイルが開かれます。

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

現在表示しているバッファの、1日後の日記ファイルを開きます。前置引数を指定した場合、その日数分だけ後の日記ファイルを開きます。例えば、C-u 3 C-c C-fとした場合、3日後の日記ファイルが開かれます。

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が適切に取り扱います。

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

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

ちなみに、他の環境における挙動について確信を持って述べることはできないものの、kentaroの手元の環境(utf-8で日記ファイルを記述)においては、はてなダイアリー/グループともに、クライアント/サーバのエンコーディングを特に指定しなくても、文字化けすることなく日記の投稿ができています。

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

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")

;; はてダラで使うデフォルトのグループ名(デフォルト値: nil)
(setq simple-hatena-default-group "subtech")

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

;; はてなダイアリーライターのパーマリンクに、タイムスタンプを使うかどう
;; かを指定する(デフォルト値: t)
(setq simple-hatena-use-timestamp-permalink-flag nil)

;; 日付を計算する際に用いるオフセット。たとえば以下のように6に設定する
;; と、午前6時まで前日の日付として扱われる(デフォルト値: nil)
(setq simple-hatena-time-offset 6)

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

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

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

;; はてダラを実行するプロセスのバッファ名(デフォルト値: *SimpleHatena*)
(setq simple-hatena-process-buffer-name "*OtherBufferName*")

キーバインド

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

(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 C-i") 'simple-hatena-change-default-id)
(define-key simple-hatena-mode-map (kbd "C-c C-g") 'simple-hatena-change-default-group)
(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)
(define-key simple-hatena-mode-map (kbd       "*") 'simple-hatena-electric-asterisk)

フォントロック

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

(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))
  • Carbon Emacs (GNU Emacs 22.1.1 (i386-apple-darwin8.9.1, Carbon Version 1.6.0))

TODO

simple-hatena-modeのチケットをご覧ください。

FAQ

誰にも訊かれたわけでもない、脳内FAQ。

Q: ウェブブラウザから書いた日記と、simple-hatena-modeで書いたローカルのファイルの同期はできないの?

A: simple-hatena-modeは、はてなダイアリーライターのUIを担当するのみなので、できません。はてなダイアリーライターが対応したら、追従するつもりです。同期機能が必須なのであれば、hatena-modeをご利用ください。

Q: 下書きを書くための機能はある?

A: 現在のところ、下書きのための機能はありません。はてなダイアリーライターは、YYYY-MM-DD.txtという形式のファイルのみを日記データとみなすので、たとえばdraft.txtといった名前で下書きを書く方法もありますが、それだとsimple-hatena-modeが適用されないので、C-c C-nで遠い未来の日付のファイルを作成し、ファイルの先頭にdeleteという文字を入れた上で、下書きを書くのがよいでしょう。先頭にdeleteがある場合、はてなダイアリーライターは、その日付の日記を削除します。その場合、実際にはてなに削除のためPOSTを行うことになるので、メッセージが出てきてややウザいのですが、細かいことを気にするのはやめましょう。

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

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

更新履歴

ver 0.12 (2007-10-31)

ver 0.11 (2007-10-21)

ver 0.10 (2007-10-19)

ver 0.09 (2007-10-19)

ver 0.08 (2007-10-18)

  • xcezx氏により、simple-hatena-change-default-groupの実行時において、simple-hatena-default-idがnilの場合の改善がされた。

ver 0.07 (2007-10-17)

  • xcezx氏により、デフォルトのグループを変更するsimple-hatena-change-default-group関数が追加された。

ver 0.06 (2007-10-12)

  • xcezx氏により、デフォルトのグループ名を設定するsimple-hatena-default-groupが追加された。

ver 0.05 (2007-10-11)

ver 0.04 (2007-10-10)

  • 投稿時に"Now posting..."というメッセージを出すようにした。

ver 0.03 (2007-10-07)

  • simple-hatena-go-back, simple-hatena-go-forwardで、前置引数により移動する日数を指定できるようにした。

ver 0.02 (2007-10-07)

  • 日記投稿時に、バッファが保存されているかどうかのチェックを入れた(いちいちNo changes need to be savedが出てウザいので)。

ver 0.01 (2007-10-06)

  • 初版公開。

作者

kentaroが作りました。

開発協力者

simple-hatena-mode.elのコピーライトおよびライセンス表示

Copyright (C) 2007 Kentaro Kuribayashi

simple-hatena-mode.el is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

simple-hatena-mode.el is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.