Movable Type:: Emacs フロントエンド「mapae *1」は,Emacs (Meadow を含む) で Movable Type のエントリを投稿,修正するツールです.また,sugi 氏が xyzzy 対応版に移植してくださっています.現在の機能は以下の通りです.なお,基本機能については,@Nifty によるココログにも対応しています.
- 基本機能
- エントリの新規投稿,修正
- カテゴリ指定
- タイトル一覧取得
- 更新 Ping 送信
- 独自に送信機能を備えています.この機能により, 投稿後正しく表示されることを自分の目で確認してから 更新 Ping を送信することができます.)
- Trackback URL 取得
- Trackback Ping の URL を直接指定するだけでなく,それが rdf で含まれている URLから取得 できます.それを用いて Ping を送信するのは,Movable Type の仕事です.
- ファイルのアップロード
- XML 整形式の確認 *2
- はてなダイアリーキーワードへのリンク生成
- 簡易プレビュー
- mapae.pm 拡張機能
- プレビュー
- 部分再構築
目次
1. はじめに
Movable Type:: Emacs フロントエンド「mapae *1」は,Emacs で Movable Type のエントリを投稿,修正するツー ルです.現在の機能は以下の通りです.
- 基本機能
- エントリの新規投稿,修正
- カテゴリ指定
- タイトル一覧取得
- 更新 Ping 送信
- 独自に送信機能を備えています.この機能により, 投稿後正しく表示されることを自分の目で確認してから 更新 Ping を送信することができます.)
- Trackback URL 取得
- Trackback Ping の URL を直接指定するだけでなく,それが rdf で含まれている URL *2から取得 できます.それを用いて Ping を送信するのは,Movable Type の仕事です.
- ファイルのアップロード
- XML 整形式の確認 *3
- はてなダイアリーキーワードへのリンク生成
- 簡易プレビュー
- mapae.pm 拡張機能
- プレビュー
- 部分再構築
mapae はユーザインターフェイス処理を中心に行う Emacs Lisp で書かれた mapae.el と,XML-RPC 処理を中心に行う Perl で書かれた mapae.pl で構成されています. *4
また,あらかじめ断っておきますが,所詮は日曜プログラミングなので,完璧な完成度は求めないでください.そもそも,「私が便利に使えればそれで良い」程度にしか考えていませんので.しかし,「このようにしたほうが使いやすい」というご意見は歓迎します.
1.1. 開発の経緯
Movable Type は XML-RPC という機能を持っています.この機能を使えば,Web で直接書き込む以外に XML-RPC に対応したアプリケーションから書き込むことも可能です.幾つかメジャーなアプリケーションがあるようですが,Emacs で書き込みができる mt.el というものもあります.ところがこの mt.el,日本語環境では使えないのです.厳密に言えば,mt.el が依存している他のプログラムが多バイト文字を扱えないのです.
何とかして日本語に対応できないものかとしばらく頑張ってみたのですが,Emacs Lisp *5のことはほとんど分からない上,結構深いところを修正しないといけないようなので,断念してしまいました.
しかし,そこでふと気付きました.「全て Emacs で処理する必要はない」ということに.そこで,XML-RPC の処理は使いなれた Perl にまかせることにしたのです.というわけで,Movable Type と Perl と Emacs という組合わせで作り始めたのです.
2. 導入
2.1. 下準備
動作に必要な Perl モジュール「SOAP::Lite」がインストールされているかどうかを確認します.以下のコマンドを実行してみてください.
$ perl -e 'use SOAP::Lite'
両方のコマンドでエラーが出なければ大丈夫です.エラーがでた場合は,それぞれ以下のコマンドでモジュールをインストールしてください.(root アカウントで)
# perl -MCPAN -e 'install SOAP::Lite'
インストールの途中で何か聞かれるかもしれませんが,エンターの連打で多分大丈夫だと思います.
2.2. ダウンロード
本プログラムについて,一応私は著作権を主張しますが,改変,再配布等は自由にして頂いて構いません *6.なお,私は本プログラムの動作について,一切の責任は負いません.各自の責任においてご利用下さい.
※ mapae.pm 拡張機能を利用する場合は,"mapae :: mapae.pm 拡張" を参照してください.2.3. mapae.pl の設定
「mapae.ph」「mapae.pl」を任意のディレクトリに置きます.これらは同じディレクトリにある必要があります.
次に,mapae.ph の内容を適切な値に変更します.
- $RPCSERVER
- mt-xmlrpc.cgi の url
- $RPCPROXY
- $RPCSERVER へのアクセスにプロキシを経由する必要がある場合, 「http://example.or.jp:8080/」のように入力します.プロキシを経由 する必要がない場合は,そのままで構いません.
- $BLOGID
- Movable Type のBlog の ID.Blog が一つしかない場合は,1であることが多いでしょう.
- $USERNAME
- Movable Type のユーザ名
- $PASSWORD
- Movable Type のパスワード
また,mapae for xyzzy をお使いの方は,$CHARSET{emacs}の設定を有効にしてください.
その他にも設定項目がありますが,とりあえずは,無視しておいて構いません.
ここで,設定が正しいかどうかを確認します.mapae.pl を置いたディレクトリで,以下のコマンドを実行してください.
$ perl ./mapae.pl getRecentPost
正しく設定されていれば,現在登録されている最新のエントリが表示されるはずです.なお,非 EUC 環境では文字化けが起きますが,ここでは無視しておいて構いません.
2.4. mapae.el の設定
「mapae.el」を,任意のディレクトリに置きます.
次に,~/.emacs 等に設定を追加します.
(require 'mapae "/home/foo/lisp/mapae.el")
(setq mapae-perl-command "/usr/bin/perl")
(setq mapae-command "/home/foo/perl/mapae.pl")
(global-set-key "\C-cwn" 'mapae-new-post)
(global-set-key "\C-cwr" 'mapae-get-recent-post)
(global-set-key "\C-cwg" 'mapae-get-post)
(global-set-key "\C-cwl" 'mapae-get-recent-titles)
なお,下線部はそれぞれ適切なディレクトリに変更してください.また,Emacs の言語環境が japanese でない場合は,正しく動作しない場合があります.その場合は,上記の設定より前に以下の行を記述してください.
(set-language-environment 'japanese)
ここで Emacs を再起動します.再起動できたら,Ctrl-c w r(Ctrl を押したまま w,続いて Ctrl をはなして w r)と入力します.正しく設定できていれば,登録されている最新のエントリが読み込まれ,表示されるはずです.
2.5. その他
- var
- はてなダイアリーキーワードリンク生成機能を使う場合
- tmp
- 簡易プレビュー機能を使う場合 *8
3. 画面構成
以下の内容の繰り返しにより構成されてます.
----- (要素名): (内容)
たとえ内容が 1行だけであっても,要素名と同じ行に書くことは出来ません.
なお,本文中等に上記のような文字列を記述したい場合は,行頭や行末にスペースを入れる,一部をエンティティ化する等により,各要素のヘッダとして解釈されるのを回避してください.
3.1. 作成日時
3.2. Comment/Trackback 許可設定
4. 各コマンド・キーバインドの説明
4.1. グローバルキーバインド
- \C-cwn
- 新規エントリを書くためのテンプレートを読み込みます.
- \C-cwr
- 既に登録されている最新のエントリを取得します.
- \C-cwg
- 指定された番号のエントリを取得します.
- \C-cwl
- タイトル一覧を取得取得します.
- \C-u(NUM)\C-cwl
- タイトル一覧を(NUM)件取得取得します.
- (バインドなし) mapae-blogset
- 設定セットを変更します.
4.2. 編集モード
- \C-cws
- 現在編集しているエントリを登録します.また,仮登録されたカテゴリがあれば,それも登録します
*9.
※Trackback が指定されていても,送信されません. - \C-u\C-cws
- 現在編集しているエントリを登録し公開します.また,仮登録されたカテゴリがあれば,それも登録します *10.TrackBack についても指定されている場合は,それを送信します.
- \C-c\C-k
- 登録処理を中止します.
- \C-cwu
- ファイルをアップロードします.詳しくは,後述の"ファイルのアップロード"をご覧下さい.
- \C-cwp
- 更新 ping を送信します.
(失敗時のエラーで URI の先頭に「!」がついているものは, 接続でき なかったものです.)
※ mapae.ph において,後述の更新 Ping 関連の設定が必要です. - \C-cww
- 整形式であることを確認します.(この機能は,XML や XHTML でエント
リを書いている場合でなければ意味が無いでしょう.)
※Perl の XML::Parser モジュールが必要です. - \C-cwc
- 現在開いているエントリのカテゴリを設定します.
- \C-cwv
- プレビュー用のページを構築し,そのページをブラウザで開きます.
詳しくは,後述の"プレビュー/簡易プレビュー"を参照してください. - C-cwh
- はてなダイアリーキーワードをはてなダイアリーキーワードへのリンクに変換します.mapae.ph の $VAR_DIR で指定されているディレクトリにファイルを書き込める必要があります.まず,全ての対象キーワードを抽出するため,長いエントリではハングアップしたように見えるかもしれません.
- C-cwM-h
- リージョンに対して変換を行うこと以外は上と同じです.
- C-cwH
- はてなダイアリーキーワードへのリンクを削除します.
- C-cwM-H
- リージョンに対して削除を行うこと以外は上と同じです.
- (バインドなし) mapae-hatena-keyword-hide
- はてなダイアリーキーワードにリンクされている部分を下線部で表示し,タグ部分を隠します.
- (バインドなし) mapae-hatena-keyword-show
- はてなダイアリーキーワードにリンクされていて隠されている部分を見えるようにします.
- (バインドなし) mapae-change-text-filter
- テキストフィルタ(mt_convert_breaks)の値を変更します.この機能を使うためには,mapae.ph でこれに関する設定を有効にしなければなりません.なお,変更時にエントリに挿入される文字列が予期したものと違う場合がありますが,これは Movable Type がテキストフィルタを識別するための文字列であり,正常です.
4.2.1. ファイルのアップロード
ミニバッファでアップロードするファイルと, リモートでのファイル名を指定します.リモートでのファイル名は Blog があるディレクトリからの 相対パスで指定します.ディレクトリのみを指定した場合は,アップロードファイルのファイル名が補完されます.アップロードに成功すると,キルリングにアップロードしたファイルを 参照する URL が入ります.
また,Image::Magick モジュールがインストールされており,かつアップロードされたファイルが画像ファイルであれば,サムネイルを作成するかどうかを聞いてきます.サムネイルのサイズは,後述の設定による上限値を元に決定されますが,手動で決めることも可能です.サイズは,「幅x高さ」で指定します.幅,高さのいずれかを自動決定させたい場合は,「幅x」または「x高さ」と指定します.
さらに,以下の条件が全て満たされる場合,画質調整のウィンドウが開き,サムネイルの画質調整を行うことができます.
- Tk モジュールがインストールされている
- 画像形式が,JPEG または PNG である
- mapae-use-tk が真である
- Emacs(または Meadow)がターミナルで動作していない
4.3. プレビュー/簡易プレビュー
mapae では,2通りのプレビュー方法が用意されています.一つは「(完全な)プレビュー」,そしてもう一つは「簡易プレビュー」です.どちらのプレビューが用いられるかは,XML-RPC サーバの URL によって決まります.即ち,ココログの XML-RPC サーバの場合は「簡易プレビュー」,それ以外であれば「(完全な)プレビュー」が用いられます *11.また,コマンドの先頭に C-u を入力することにより,この選択を一時的に反転することができます.
以下に,二つのプレビューの違いを説明します.
4.3.1. プレビュー
mapae.pm 拡張を用いて,サーバ側に完全なプレビューを作成します.macros プラグイン等を用いていて,エントリの内容が動的に変更される場合でも,正確なプレビューを作成することができます.
一方で,ココログなど mapae.pm 拡張が導入できない環境では用いることは出来ません.
詳しくは,"mapae :: プレビュー機能" を参照してください.
4.3.2. 簡易プレビュー
ローカルにプレビューファイルを作成します.全てローカルで作成するので,macros プラグイン等を用いていて,エントリの内容が動的に変更される場合は,正しく反映されません.
後述のカスタマイズ変数において,ブラウザ表示関連の設定が必要です.また,簡易プレビューのテンプレートについては,後述の"簡易プレビューテンプレート" を参照してください.
4.4. カテゴリモード
- スペース
- ポインタがある行の選択/非選択状態を反転します.
- P
- ポインタがある行のカテゴリを主カテゴリに設定します.
- \C-c\C-c
- 設定中のカテゴリを登録します.まだ一度も登録されていないエントリに対して登録しようとした場合は,仮登録します
*12.これは,そのエントリのバッファに記憶されるものであり,バッファを破棄した,一度保存して開き直した等の場合は,仮登録した情報は破棄されます.
また,まだ一度も登録されていないエントリから開かれたカテゴリモードは,そのエントリが初めて登録された時以降は無効となります.この場合は,カテゴリモードを開き直してください. - \C-u\C-c\C-c
- 設定中のカテゴリを登録し公開(再構築)します.まだ一度も登録されていないエントリに対して登録しようとした場合は,「\C-c\C-c」を実行したときと同じ動作を行います.
- q
- このモードを終了します.
- g
- 現在の状態を破棄し,再取得します.
4.5. タイトル一覧モード
- f
- ポインタがある行のエントリを取得します.
- c
- ポインタがある行のカテゴリを取得します.
- o
- ポインタがある行のエントリをブラウザで表示します.
※ .emacs 等において,後述のブラウザ表示関連の設定が必要です. - D
- ポインタがある行のエントリを削除します.
- m
- ポインタがある行のマークを反転します.
- A
- 全てをマークします.
- U
- 全てのマークを解除します.
- R
- ☆ マークがついているエントリを再構築します.
※この機能を使うためには,サーバに mapae.pm 拡張 が導入されている必要があります. - K
- 再構築を中止します.
- \C-uR
- Movabel Type XML-RPC API を用いて,マークがついているエントリを再構築します.
1エントリ毎に再構築するので,効率は著しく悪いです. - g
- 一覧を再取得します.それまでつけられていたマークは破棄されます.
- q
- このモードを終了します.
5. カスタマイズ変数
5.1. mapae.pl
5.1.1. 全般
- $RPCSERVER
- mt-xmlrpc.cgi の url.
- $RPCTIMEOUT
- XMLRPC のタイムアウト秒数.(defult:40)
- $RPCPROXY
- $RPCSERVERにアクセスするために必要なプロキシ.
- $BLOGID
- 対象とする Blog ID. (default:1)
- $USERNAME
- Movable Type のユーザ名
- $PASSWORD
- Movable Type のパスワード
- $VAR_DIR
- キャッシュデータ等を保存するディレクトリ.絶対パスか,mapae.pl からの相対パスで指定.現在のところ,はてなダイアリーキーワードのキャッシュ保存にのみ使用.(default: var)
- %CHARSET
- mapae 各部で用いる文字コード.通常は変更する必要はありません.
-
rpcXML-RPC サーバとの通信に用いる文字コードperlperl 内部で扱う文字コード- emacs
- Emacs(Meadow,xyzzy)との通信に用いる文字コード
- default:
%CHARSET = ( 'emacs' => 'euc-jp', ); - 例(Emacs での文字コードを shift-jis にする場合):
$CHARSET{emacs} = 'shift-jis';
5.1.2. 表示関連
- $ELEMENTSEPARATOR
- 各要素を区切るセパレータ.mapae.el の mapae-separator と同じ値でなければなりません.(default:-----)
- @ELEMENTLABEL
- XMLRPC で用いる要素名と表示する要素名とのマッピングを配列で指定します.編集モードで各要素が表示される順序は,ここで指定した順となります.
- label
- XMLRPC で用いる要素名
- type
- データの型
- necessary
- 真のであれば,データがない場合は空文字列があるものとして扱われます.現在のところ,type が「string」である要素以外での動作は未定義です.
- check
- 真であれば,整形式チェックの対象になります.
- hatena
- 真であれば,はてなダイアリーキーワード変換の対象になります.
- default:
( POST_ID => { label=>'postid', type=>'int' }, TIMESTAMP => { label=>'dateCreated', type=>'string', necessary=>1 }, TITLE => { label=>'title', type=>'string', necessary=>1 }, DESCRIPTION => { label=>'description', type=>'string', necessary=>1, check=>1, hatena=>1 }, EXTENDED => { label=>'mt_text_more', type=>'string', necessary=>1, check=>1, hatena=>1 }, EXCERPT => { label=>'mt_excerpt', type=>'string', necessary=>1 }, TRACKBACK => { label=>'mt_tb_ping_urls', type=>'array'} )
5.1.3. タイトル一覧関連
- $USE_GETRECENTPOSTS
- 真の場合,mt.getRecentPostTitles の代わりに metaWeblog.getrecentPosts を使います.
5.1.4. 更新 Ping 関連
- $BLOGNAME
- Blog の名前.
- $BLOGURL
- Blog の URL
- @PINGURL
- Ping を送信する URL の配列.
- 例:
@PINGURL = ( 'http://www.blogpeople.net/servlet/weblogUpdates', 'http://ping.myblog.jp/' ); - $HTTP_PROXY
- 更新 Ping を送信する際にプロキシを経由する必要がある場合,ここに指定します.通常は $RPCPROXY と同じなので,
と指定することになるでしょう.$HTTP_PROXY = $RPCPROXY; - $HTTP_TIMEOUT
- 更新 Ping を送信する際のタイムアウト秒数を指定します.
5.1.5. Trackback URL 取得関連
- %DISCOVER_TB
- Trackback URL を取得する条件 *13を指定します.これを指定しない場合は,Trackback URLの取得を行いません.以下の例では,スペースで始る指定に対し Trackback URL の取得を行い,取得の際には,そのスペースを除去します.
- 例:
%DISCOVER_TB = ( pattern=>'^ ', remove=>1 ); - その他
- Trackback URL を取得する際のプロキシ, タイムアウトは前述の$HTTP_PROXY,$HTTP_TIMEOUTに従います.
5.1.6. ファイルアップロード関連
- $THUMBNAIL_POST_PROCESS
- サムネイル作成時,サイズ変更に加え別の処理を行いたい場合は,その処理をする関数のリファレンスを指定します.ここで指定された関数には,サイズの変更直後の Image::Magick オブジェクトが渡されます.
- $NEW_MEDIA_OBJECT_URL_FILTER
- ファイルをアップロードしたときにキルリングに格納される URL
のフィルタ関数へのリファレンスを指定します.フィルタ関数の戻り値は,文字列でなければなりません.フィルタ関数へは,以下の値がハッシュで渡されます.「ref_」で始る値以外は,直前に処理されたファイルに関する値であり,例えば,サムネイルアップロード時の「width」は,サムネイルの幅を指します.この関数は,画像がアップロードされる度に呼び出されます.つまり,ある画像とそのサムネイルをアップロードした場合,その両方で呼び出されるので注意してください.アップロードされたファイルがサムネイルであるかどうかは,「ref_」で始る値を見れば分かります.
- url
- アップロードされたファイルにアクセスできる URL.
- filesize
- アップロードされたファイルのファイルサイズ.(バイト)
- ref_url
- サムネイルがアップロードされた場合,元画像の URL.
- ref_filesize
- サムネイルがアップロードされた場合,元画像のファイルサイズ.(バイト)
- magick
- アップロードされたファイルが画像の場合は,画像の形式.(Image::Magick による値)
- width
- アップロードされたファイルが画像の場合は,画像の幅.(Image::Magick による値)
- height
- アップロードされたファイルが画像の場合は,画像の高さ.(Image::Magick による値)
5.1.7. プレビュー関連
- $PREVIEW_TEMPLATE
- プレビュー用テンプレートの名前
また,必要に応じて,以下の変数を指定してください.
- $PREVIEW_URL_FILTER
-
プレビュー URL を変換する無名関数を指定します.
$PREVIEW_URL_FILTER = sub { my $url = shift; $url =~ s!^http://nyam.info/!http://localhost/!; return $url; }; - %PREVIEW_DUMMY_ID
- プレビュー作成時に用いる仮のエントリ ID.あくまで仮なので,既に登録されているエントリ ID でも,上書きされることはないはずですが,利用しているプラグイン等によっては上書きされることがあるかもしれません.
- id
- 仮のエントリ ID
- must
- 真の場合は,常に上記のエントリ ID を用います.偽の場合は,まだ登録されていない新規投稿の場合のみ上記のエントリ ID を用い,既に一度登録されているエントリを編集している場合は,そのエントリ ID が用いられます.
( id=>1, must=>0 ) - $LOCAL_PREVIEW
- 真であれば,簡易プレビューが優先されます.ただし,$RPCSERVER がココログのサーバをさしている場合は,本変数が真でなくても簡易プレビューが優先されます.
- $LOCAL_PREVIEW_TEMPLATE
- 簡易プレビューで用いるテンプレートファイル名.mapae.pl からの相対パス,または絶対パスで指定.(default: preview_template.html)
- $LOCAL_PREVIEW_FILE
- 簡易プレビューを出力するファイル名.mapae.pl からの相対パス,または絶対パスで指定.(default: tmp/preview.html)
- $LOCAL_PREVIEW_CONVERT_BRAKES
- 真であれば,簡易プレビューを作成する際に改行が <br /> タグに置換されます. *14
5.1.8. 再構築関連
- %REBUILD_UNIT
- 一度に再構築を行う単位.デフォルトの設定では,エントリ: 40 エントリ毎,日別: 40日毎,週別: 4週毎,月別: 1月毎,カテゴリ別: 1カテゴリ毎に再構築が行われます.
default:( Individual => 40, Dairy => 40, Weekly => 4, Monthly => 1, Category => 1 )
5.1.9. はてなダイアリーキーワード関連
- $HATENA_CLASS
- アンカーで使用するクラス.(default: hatena)
- $HATENA_EXPIRE
- キーワードキャッシュファイルの有効期限.(秒) (default: 86400)
- @HATENA_IGNORE_TAG
- キーワード変換から除外したい要素名の配列.(default: ('a'))
例:@HATENA_IGNORE_TAG = qw(a code var script); - 除外する要素(タグ)は,「(@HATENA_IGNORE_TAGで指定された)要素+単語境界」で判定されるので,次のような指定も出来ます.
例:
この場合,終了タグの判定では,要素内の最初の単語境界以降は無視されます *15.@HATENA_IGNORE_TAG = ('a', 'span class="nohatena'); - なお,ここに空要素の要素名を指定したり,エントリ内での入れ子関係が正しくない場合の動作は保証しません.
5.1.10. 設定セット
複数の Blog を扱う場合,設定セットにより操作対象の Blog を変更することができます.使用する設定セットは,「M-x mapae-blogset」で切り替えることが出来ます.ここで指定した文字列が mapae.ph に引渡されます.デフォルトは「1」 *16です.
引渡された文字列は,mapae.ph を処理する際に,変数 $BLOGSET に格納されています.これを用いて使用する設定を切り替えることが出来るわけです.
複数の設定セットを利用する場合の mapae.ph は,一般的には次のようになるでしょう.
## mapae.ph 設定例
全セットに共通する設定
if ( $BLOGSET eq '1' ) {
設定セット「1」の設定
} elsif ( $BLOGSET eq 'hoge' ) {
設定セット「2」の設定
} else {
fault("設定セット「$BLOGSET」は定義されていません.");
}
1;
なお,定義されていない設定セットで呼び出された場合は,この例のように fault 関数を呼び出すことにより,エラーを Emacs 側に通知して,処理を中断させることができます.
5.2. mapae.el
5.2.1. 全般
- mapae-perl-command
- mapae.pl を実行するための perl コマンドを絶対パスで指定します.(default: /usr/bin/perl)
- mapae-command
- mapae.pl を絶対パスで指定します.
- mapae-blogset
- 設定セットの初期値.(default: "1")
- mapae-default-process-coding-system
- mapae.pl との通信に用いる文字コード.$CHARSET{emacs} が指す文字コードとそろえる必要があります.
5.2.2. 編集モード関連
- mapae-separator
- 各要素のセパレータを指定します.mapae.pl の $ELEMENTSEPARATOR と同じ値でなければなりません. (default:-----)
- mapae-postid-tag
- エントリID を示す要素名を指定します.(default:POST_ID)
- mapae-favorite-mode
- 編集モードで基本とする既存のモードを指定します. (default:text-mode)
- 例:
(setq mapae-favorite-mode 'html-helper-mode) - mapae-local-data-dir
- アップロードファイルのローカルデフォルトディレクトリ
- mapae-remote-data-dir
- アップロードファイルのリモートデフォルトディレクトリ
- 設定セット別に指定する場合は,設定セット名をキーとするコンスセルのリストを指定してください.
例:
なお,設定セット名でマッチする設定がなかった場合は,この例のようにキーが t で指定されたディレクトリが用いられます.(setq mapae-remote-data-dir '(("3" . "old/images/") (t . "archives/data/"))) - mapae-thumbnail-suffix
- サムネイルを生成するときファイル名に付ける接尾辞.ここで指定された文字列が,拡張子の前に挿入されます.(default: _tn)
- mapae-thumbnail-max-width
- サムネイルの最大幅.ここで指定された値を元にサイズが決められますが,実行時にその値を変更することは可能です.(default: 200)
- mapae-thumbnail-max-height
- サムネイルの最大の高さ.ここで指定された値を元にサイズが決められますが,実行時にその値を変更することは可能です.(default: 300)
- mapae-use-tk
- 画像のアップロード時 Tk による画質調整を行わない場合は,nil を指定します.(default: t)
- mapae-mode-map
- 編集モードのキーマップ
- mapae-mode-hook
- 編集モード起動時のフック
- mapae-hatena-keyword-hide
- 真の場合,はてなダイアリキーワードにリンクされた部分は下線で表示され,タグ部分は隠されます.(default: nil)
5.2.3. カテゴリモード
- mapae-category-mode-map
- カテゴリモードのキーマップ
5.2.4. タイトル一覧モード
- mapae-recent-post-count
- タイトル一覧で取得するデフォルトのエントリ数 (default: 15 )
- mapae-title-list-mode-map
- タイトル一覧モードのキーマップ
5.2.5. ブラウザ表示関連
- mapae-browser-command
- プレビュー等に用いるブラウザの起動コマンド.文字列であれば,外部のウェブブラウザとして認識され,Emacs の関数シンボルであれば Emacs 内で動くウェブブラウザとして認識されます.
- mapae-browser-option
- ブラウザを起動する際に用いる引数のリスト.実行時に文字列 "<URL>" が表示する URL に置換されます.mapae-browser-command で外部のウェブブラウザがしていされている場合は,全要素が文字列でなければなりません.
default: (UNIX系OS における,Mozilla/Firebird での設定です)
例: (Windows における,Mozilla/Firebird の場合)("-remote" "openurl(<URL>)")(setq mapae-browser-option '("<URL>"))
5.3. 簡易プレビューテンプレート
$LOCAL_PREVIEW_TEMPLATE で指定される簡易プレビューのテンプレートでは,以下のタグが解釈され置換されます.
- MTEntryTitle
- タイトル
- MTEntryBody
- description の内容.
- MTEntryMore
- mt_text_more の内容.(「続きを読む」等で表示される部分に該当)
- MTMe
- 簡易プレビューの結果について,タグ等がエスケープされたもの.The W3C MarkUp Validation Service 等に引渡す際に用います.
各タグの使用例については,前述の例を参照してください.
6. トラブルシューティング
現状では,カスタマイズ変数関連の例外チェックをほとんど行っていません.正しく動作しない場合は,まずこれらの変数が正しく設定されているかを確認してください.なお,初期導入時に mapae が全く動作しない場合は,以下のコマンドの結果が参考になるかもしれません.
- M-x mapae-file-test
- Emacs から呼び出す外部のコマンド等が,正しく設定されているかを確認します.
- M-x mapae-get-recent-post-dump
- mapae.pl で最新のエントリを取得し,RPCの通信内容と共に,結果を処理せずに表示します.
- M-x mapae-submit-post-dump
- バッファの内容を登録し,RPCの通信内容と共に,結果を処理せずに表示します.
- M-x mapae-preview-dump
- バッファの内容でプレビューを作成し,RPCの通信内容と共に,結果を処理せずに表示します.
カスタマイズ変数が正しいにも関わらず動作しない場合は,バグの可能性もあり得ます.その旨を下記バグトラックにご報告いただければ,(全てに対応できるとは限りませんが)出来るだけ対処します.なお,ご報告いただく際には,perl や emacs 等のバージョン,問題が再現する条件や結果,関連しそうなカスタマイズ変数の設定内容等 *17,こちらが状況を把握できるような情報を添えてください.
7. 各環境での動作について
mapae の開発は,主環境として Linux + Perl5.10 + Emacs23 で行っていますが,他の環境でも動いているという報告を頂いています.報告下さった方々,有難うございました.
全てをご紹介させていただきたいところですが,細かな構成や各機能の確認状況等までこちらで追いきれませんので,割愛させていただきます.これから mapae の導入を検討される方には,TrackBack 等をご参照いただければと思います.
また導入された方は,動作した環境,動作が確認できた機能,問題点等を,TrackBack 等でお寄せいただければ幸いです.また,解決された問題点等については,エントリの更新をお忘れなく.
7.1. 改行コード処理
mapae.el と mapae.pl との間の通信では,システム標準の改行コード(Windows なら CR+LF)を用いています.したがって,perl 側がシステム標準の改行コードではない場合にうまく処理することが出来ません.
mapae.el では,変数 mapae-default-process-coding-system で,mapae.pl との通信に用いる文字コードや改行コードを指定することができます.例えば,Perl 側の改行コードが LF の場合は,以下の設定を .emacs 等に追加してください.
(setq mapae-default-process-coding-system 'euc-jp-unix)
8. mapae バナー
usay 氏が mapae のバナーを作ってくださいました.「mapae を使ってるよ」って人は,サイドバーにでも張り付けておいていただけると嬉しいです.
9. 旧バージョンの配布
(内部的なものも含めて)大きな変更があった場合は,バージョンナンバーを0.1上げ,直前のバージョンを tarball で公開します *18.バグフィックス等の小規模な変更では,バージョンナンバーを変更せず,最新版のみ公開します.最新版については,当面の間従来通り本文中のリンクから取得してください.
10. 最近の更新内容
- trunk
- 2010-11-8
- perl5.6系および Jcode の対応を終了
- perl 部の文字コードを utf-8 に変更
- mt の文字コードを utf-8 に固定
- 2010-01-10 Ver.0.10 20100110
- mapae.pm 拡張
- エラー発生時にエラー通知を正しく返さない問題を修正
- Jcode への依存を削除
- mapae 本体には変更はありません。
- MT5 でも今のところ問題なく使えています。
- mapae.pm 拡張
- 2005-12-23
- ダウンロードリンクが間違っていたのを修正
- 2005-10-17 Ver.0.10 20051017
- mapae.pm を MT-3.2 で動作するよう修正 (Yuki Fujimura 氏のパッチを頂きました.)
- 2004-09-02
Ver.0.10 20040821
- ドキュメントに mapae-default-process-coding-system に関する記述を追加.
- 配布ファイルへの変更はありません.
- 2004-08-21
Ver.0.10 20040821
- mapae for xyzzy 用の設定雛形を追加
- プログラム部分の変更はありません.
- 2004-08-20
Ver.0.10 20040820
- mapae for xyzzy アップデートに向けた修正
- 2004-07-04
Ver.0.10 20040704
- ココログ側で時刻ずれの問題解消に対応
- 2004-06-20
Ver.0.10 20040620
- Tk モジュールが入っていない場合で mapae-use-tk が真の場合に,サムネイルが作成できない問題を修正.
- 2004-05-24
Ver.0.10 20040524
- はてなダイアリキーワード置換を再適用した場合に失敗する場合があるのを修正
- 新規投稿時のカテゴリ仮登録ができない問題を修正
- $PREVIEW_URL_FILTER 追加
- 2004-05-14
Ver.0.10 20040514
- カテゴリ登録時のエラーを修正
- プレビュー時の postid が正しくない問題を修正
- 2004-05-09
Ver.0.10 200405091
- deletePost の引数型を修正
- 一部の XML-RPC メソッドについて,呼び出しメソッド名の変更
- 2004-05-09
Ver.0.10 20040509
- XML-RPC 呼び出し時の引数の型を修正
- 配布形態を,ファイルごとから,tarball に変更
- 2004-05-06
Ver.0.9 20040506
- 新規投稿時にカテゴリ指定画面が開けない問題を修正.
- 2004-05-02 Ver.0.9 20040502
- postid が数字以外であっても処理できるように変更.
- mt.getRecentPostTitles の代わりに metaWeblog.getrecentPosts を使うことができるように変更.
- 2004-03-10 Ver.0.9 20040310
- 簡易プレビューを実装
- ちなみに,次のメジャーアップデートは,「1.0」ではなく「0.10」の予定.(^_^;
- 2004-03-06 Ver.0.8 20040306
- mapae-mode 時のバッファローカル変数を扱いを修正.
- 登録内容が空の時の動作を修正.
- 空要素補完処理を修正.
- 改行コードの取り扱いに関する記述を追加.
- 2004-03-05 Ver.0.8 20040305
- 内容が空の要素の取り扱いを修正
- 2004-03-03 Ver.0.8 20040303
- Perl 5.6 以前でココログをを使っている場合でも,時刻補正処理だけは行うことが出来るように変更.
- 2004-03-02 Ver.0.8 20040302
- ドキュメントに設定セットについての記述を追加
- mapae 自身の変更は無し
- 2004-02-25 Ver.0.8 20040225
- 配布ディレクトリの変更(プログラム自身は変更無し)
- 配布用ドキュメントを追加
- ...すいません.Subversion を試してみたかっただけです.とは言っても,公開サーバは Apache1 系なので配布は WebDAV 経由では無いのですが.配布形態には変更はありません.
- というわけで,リポジトリ管理を CVS から Subversion に変更しました.
- 2004-02-18 Ver.0.8 200402181
- エントリ登録後,隠されていたはてなダイアリキーワードが見えてしまう問題を修正.
- 2004-02-18 Ver.0.8 20040218
- はてなダイアリーキーワードが連続している場合,リンクの削除に失敗する場合がある問題を修正.
- 2004-02-17 Ver.0.8 20040217
- はてなダイアリーキーワードのリンクタグ部分を隠す処理を追加.
- はてなダイアリーキーワード変換時,対象から除外する要素を指定できるように変更.
- 2004-02-16 Ver.0.8 200402161
- はてなダイアリーキーワード変換時,ハイライト処理を追加
- 2004-02-16 Ver.0.8 20040216
- mapae-favorite-mode を fset ではなく,setq で指定するように変更.旧バージョンをご利用の方はご注意下さい.
対応していただいたばかりの変更で申し訳ないです.>sugi さん - mapae-mode のキーマップを mapae-mode-map で指定するように変更.
- はてなダイアリーキーワード自動リンクAPI に対応
- 更新 Ping について,以前のインターフェイス統一時に変更し忘れていた点を修正.
- mapae-favorite-mode を fset ではなく,setq で指定するように変更.旧バージョンをご利用の方はご注意下さい.
- 2004-02-11 Ver.0.7 20040211 mapae-0-7-20040211.tar.gz
- mapae for xyzzy 用処理を追加
- カテゴリ選択画面で ID を隠す処理を追加
- 一部テキストプロパティを除外する処理を追加
- テキストフィルタ変更関数を追加
- テキストフィルタ,comment/trackback許可設定用の設定例を追加
- Blog 切り替え対応
- mapae.pl→mapae.el のインターフェイス統一
- 登録と公開を同時に行う場合のみ discover_tb を実行するように変更.
- サムネイル画質調整機能追加
- トラブルシューティング用関数追加
- 2010-11-8

cool! と、思ったらour使ってるんですね…perl-5.6以上が入ってないプラットフォームはまだまだたくさんあるのではないでしょうか。
実は,Perl5.6 しか使ったことがないので,以前のバージョンとの違いがよく分かっていなかったりします.our 宣言と lvalue 属性くらいしか違いを認識していません... mapae は(mapae.pm を除いて)クライアント用のツールですから,5.6以降でも問題無いようにも思いますが,どうでしょう?
とは言え,簡単な修正で動くようになるのであれば修正してもよい,とも思います.とりあえず,our 宣言を使わないようにしたテストバージョンを出してみましたが,どうでしょうか.他にも修正が必要な個所があれば,ご指摘頂ければ幸いです.
おつかれさまです。お返事ありがとうございます。
テストバージョンを拝見しました。自分も手元でuse varsに修正して使っていたのでours宣言についてはこれで問題ないと思います。
追加としては、warnings.pm がこれも5.6以降依存となります。もうひとつ、open関数の書式(646行目)が3引数を取るのも5.6以降依存ですね。
あとは趣味の問題なので参考程度にですが、SOAP::Lite がHTTPヘッダをチェックするためmod_perl環境下でうまくないので、以下を適当な位置に仕込んでいます。
$XMLRPC::Constants::DO_NOT_CHECK_CONTENT_TYPE = 1 if (exists $ENV{MOD_PERL});
お返事の中の「mapae はクライアント用のツールですから,5.6以降でも問題無いようにも思います」の意図がちょっと汲み取れなかったのですが、自分が生活しているFreeBSDの標準で入るperlは 5.005 となっており、システムで使われるためもあり、あまり安易にperlのupdateができません。そういった環境の方も多いのでは、といった意味でした。
配布状態で修正する手間が省かれていれば、より多くの環境/方達に使われるのではないかと個人的には思います。今後も期待しておりますので、無理のない程度にがんばってください。
warnings と open を修正しました.
>SOAP::Lite がHTTPヘッダをチェックするためmod_perl環境下でうまくないの
>で、以下を適当な位置に仕込んでいます。
mapae.pm の方でしょうか.
mod_perl を使っていないので良く分からないのですが,どのような Content-type になるのでしょうか.
>お返事の中の「mapae はクライアント用のツールですから,5.6以降でも問題
>無いようにも思います」の意図がちょっと汲み取れなかったのですが、自分
>が生活している FreeBSDの標準で入るperlは 5.005 となっており、システム
>で使われるためもあり、あまり安易にperlのupdateができません。そういっ
>た環境の方も多いのでは、といった意味でした。
サーバ用マシンであれば,Perl5 であることが多いでしょうが,クライアントマシンであれば5.6以上になっているかな,と勝手に思っていただけです.FreeBSD では Perl5なんですね.
それに他の環境であっても,テスト環境としてサーバに合わせていたりするかもしれませんし,出来るだけ Perl5 に合わせた方がいいかもしれませんね.
mapae for xyzzy でのココログへの投稿に成功しましたので、報告します。
カテゴリの設定法がよくわからず、結局、投稿後、ココログに login して、手で設定しました。
http://watcher.moe-nifty.com/memo/2004/01/mapae_go.html
報告,有難うございます.
カテゴリ設定の問題については,私が文字コードの変換処理を忘れていただけでした.<多分
初回取得時の文字化けについては,mapae.pl の出力文字コードの判定に失敗しているのが原因だと思うので,以降のバージョンで検討していきます.
文字化けの件は、どうもココログのサーバ側の問題のようです。とりあえず、最新の記事を1個持ってくるだけの XML-RPC クライアントを C で書いて動かしてみたのですが、何回かに1回、化けた状態の記事が返ってくることを確認しました。
化け方には規則性があるようなので、無理やりコード変換して復元できそうですが、たぶん、化けていると判断した場合は再取得するような実装にする方が簡単だと思っています。
日付のフォーマットについては、Movabe Type とココログでは微妙に違っていて、おそらく TypePad もココログと同じフォーマットなのでしょう。
汎用的なblog投稿用クライアントを作ろうとすると、この辺の差を吸収する仕組みを考慮する必要がありそうです。
報告が遅れましたが、mapae-0-3-20040108-p5-01091 で 5.005 での動作に修正の必要はなくなりました。対応ありがとうございました、今後の開発に影響がないようであればマージしていただけると嬉しいです。
mod_perl についてですが、こちらは利用者が必要ならば1行追加するだけなので本体側での対応は過剰かなとも思います。頭の片隅にでも入れておいていただければと。
mod_perl 環境下ではスクリプトはデフォルトでHTTP応答ヘッダを返さないため、SOAP::Lite のContent-Typeチェックが通りません。このチェックを省略するために DO_NOT_CHECK_CONTENT_TYPE が用意されています。
HTTP応答ヘッダを返すようにすることも可能なのですが、その処理自体がパフォーマンスを低下させたり、httpd の設定を変更する必要があったり、他のスクリプトにも影響を与える可能性があります。
ご興味があれば PerlSendHeader といったキーワードでgoogle等でいくらでも出てくると思いますので参考にされてみてはいかがでしょうか。そもそも SOAP::Lite もしくはもっと低レイヤ側で auto-nego できるのではないかとも思っています。
>tsupo さん
> 文字化けの件は、どうもココログのサーバ側の問題のようです。
> 日付のフォーマットについては、Movabe Type とココログでは微妙に違って
> いて、おそらく TypePad もココログと同じフォーマットなのでしょう。
@nifty に対応をお願いしたほうが良いのかもしれませんね.
mapae での直接の対応は見送ります.私はココログユーザではないので,テスト環境が用意できませんし.
情報ありがとうございました.
>you さん
> 報告が遅れましたが、mapae-0-3-20040108-p5-01091 で 5.005 での動作に
> 修正の必要はなくなりました。
Ver.0.5 20040117 でマージしました.また,Perl5.005 のテスト環境が用意出来たので,今後もコンパイルのテスト位は出来ると思います.
> mod_perl についてですが、こちらは利用者が必要ならば1行追加するだけな
> ので本体側での対応は過剰かなとも思います。
わかりました.これについての対応は,当面は見送ります.
ありがとうございました.
はじめまして。
日記を読ませていただきました。
チョッと気になることがあったので、おせっかいですが進言おばさせてください。
MeadowというかEmacsではマルチバイト文字(日本語も含む)のElispでの処理は、内部的にiso-2022-7bitで処理しています。ですので、日本語を扱うElisp(.emacsも)のCodecは、iso-2022-7bitにしないと化ける可能性があります。
バイトコンパイルをするとおかしくなる。日本語が化けるといったElispは、ほとんど、文字コードがEUC-JPのことが多いのです(昔はこれが標準だったのかもしれませんが、よくわかりません)。
日本語を扱う有名なElispパッケージの文字コードを見てください。おそらくほとんどiso-2022-7bitになっています。mapae.elも文字コードを変更することをお勧めします。
これで、文字化けがすべて解決できるものではないのかもしれませんが、気になったもので。
でわでわ。
> MeadowというかEmacsではマルチバイト文字(日本語も含む)のElispでの処
> 理は、内部的にiso-2022-7bitで処理しています。ですので、日本語を扱う
> Elisp(.emacsも)のCodecは、iso-2022-7bitにしないと化ける可能性があ
> ります。
これ,気になっていたんです.でも結局,私の環境では化けていなかったので,頭の方に日本語をいれておけば自動認識してくれるかな,なんて想像していたのですが.
iso-2022-7bit にしておけばよかったんですね.
早速修正しました.ありがとうございました.
すでにご存知かもしれませんが、ココログ特有の問題について触れた XML-RPC API の解説ページ
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
を用意しています。
文字化けが頻発する件、Unicode を UTF-8 にマッピングするときの変換処理を複数回適用してしまっているのが原因のようです。文字化けがなくなるまで UTF-8 → Unicode 変換を適用すればデコードできますが、文字化けがなくなるまでデータをサーバから取得し直すという方法もあります。
文字化けは、ココログだけではなく、TypePad でも発生しているとのことです。
> 文字化けは、ココログだけではなく、TypePad でも発生しているとのことです。
となると,根本的に解決するのはもう少し先になるのかもしれませんね.
とりあえず,Perl5.8 では回避できているのですが,5.6では解決できていません.
5.6でも回避できるようにして欲しいというユーザさんの声が多ければそちらも検討しても良いとは思うのですが,それよりもやはりサーバ側での早期解決をお願いしたいところです.
ココログの投稿日時の問題、ようやくサーバ側で対処されました。
http://info.cocolog-nifty.com/info/2004/07/_xmlrpc_api_.html
ということで、mapae 側での対応は不要となりました。
ただし、文字化けの方はまだ対処されていません。かなり根が深い問題のようです。
> ココログの投稿日時の問題、ようやくサーバ側で対処されました。
修正しました.情報ありがとうございました.
mapae-0-10-20051017 + Meadow 2.10 + Active Perl 5.8.8 on WinXP SP2で快適に利用させていただいております。
.emacs での設定についてなのですが、mapae.pl の指定などで相対パスが使えないようです。例えば、(setq mapae-command "c:/home/perl/mapae.pl") では大丈夫ですが、(setq mapae-command "~/perl/mapae.pl") と書くと「予期せぬエラー」がでてしまいます (環境変数 HOME は設定済み)。
私は Meadow を USB メモリに入れて、出先の PC で使用することがあります。その際、ホームディレクトリは bat ファイルで Meadow 起動時に設定するのですが、相対パスでのファイル指定が必須となっております。
mapae が原因なかったら恐縮ですが、御一考いただければ幸いです。
ご報告ありがとうございます。
実は、最近は Windows 環境を持っておらず、手元で再現させることが出来ません。
絶対パスなら可、環境変数 HOME 設定済とのことですので、以下の設定により問題を回避できないでしょうか?
(setq mapae-command
(concat (getenv "HOME") "/perl/mapae.pl"))
お試しください。
作者さん、さっそくアドバイスありがとうございます!
上記のやり方で Meadow でも相対パスで指定できました。また mapae-perl-command の同様に指定可能なので、USB メモリに Meadow や Perl を放り込み、出先で Movable Type を更新、という夢w も実現しそうです (まだ試してはいませんが)。
重ねまして、どうもありがとうございました。
追記。私は mapae for xyzzy も併用しているのですが、こちらの場合は、
(setq mapae-command
(concat (si:getenv "XYZZYHOME") "/etc/mapae.pl"))
などでいけることを確認しました。では失礼します。