ただいま整理中。
Blogspot (Blogger?) に移行しました!
タイムライン | 技術系 | TIPS | ライフハック系 | その他 | 左記カテゴリ以外は、右の欄の下のタグクラウドへ!
.

2011年08月08日

起動時に文字コードの指定して xyzzy をコマンドラインから起動

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。

概要

前回のエントリ で、 Vimperator を使用して、Webページの入力欄のテキストを好みのエディタ (xyzzy) で、編集する方法を示した。

しかしながら、この方法だと、 xyzzy の自動判定により、ときどき意図しないエンコード(*encoding-sjis*) で、一時tmpファイルを開いてしまう現象が起きる。

そこで本エントリでは、 Vimperator の editor で xyzzy を利用する場合、強制的に文字コードを指定して一時ファイルを開くためのワークアラウンド(ラッパBATファイルの作成)を、紹介する。




《スポンサードリンク》

調査

コマンドラインや初期設定ファイル (.xyzzy) で、 change-fileio-encoding などで指定した結果がなぜ反映されないのか、以下の3つの観点から、調査した。

(1) Vimperator の editor コマンド文字列

Vimperator の set editor で与えたコマンド文字列は:

コマンド文字列 一時ファイル名
という形式で、実行される。  

つまり、何も対策しないままだと、一時ファイル名は、コマンドに対する最後のオプションとして指定されることになる。

(2) xyzzy コマンドライン・オプションの順序性

xyzzy のコマンドライン・オプションの形式は:

起動時の引数は以下の形式を受け付けます。

xyzzy [-image dump-file] [-config config-directory] [-ini ini-file] [-q|-no-init-file] (other-option|file)*

-image、-configまたは-iniを指定する場合は、それ以外のオプションより前になければなりません。
また、-qまたは-no-init-fileを指定する場合は-image、-configおよび-ini以外のオプションの先頭に
なければなりません。
されている。  

ここで、このコマンドライン・オプションを含む諸設定は:

初期設定ファイル→コマンドライン・オプション
の順に、実行される。また上記引用のように、コマンドライン・オプションが複数指定されている場合、左から順に、解釈される。  

(3) xyzzy ファイル読み込み時の文字エンコーディングの判定

与えられたコマンドライン・オプション中、指定されたファイル名を読み込む際、 xyzzy の

ツール>共通設定>読み込みタブ
が、「自動判定」になっていたならば、自動判定が実行される。これは、ファイル名指定の前に文字コードの指定 (*default-fileio-encoding*) があろうと・なかろうと、実行される。  

分析

調査の結果から:

  • vimperator は、ファイル名を、editor に設定されたコマンドの最後につけて呼び出す
  • xyzzy は、ファイルを開く時に、指定のあり・なしに関わらず再度、文字エンコーディングを自動判定している
  • よって、自動判定が正しくない場合に、文字コードの指定を期待通りに行うには、ファイル名指定よりも後で、行う必要がある
ことが判明した。  

 

以下のようなBATファイルにより、xyzzy のファイル名の後ろに文字エンコーディングの設定 (revert-buffer *encoding-utf8n*) をするラッパを作成し、 vimperatorrc の set editor には、このラッパを指定する:

BATファイル: vimpexyzzy.bat

@echo off
rem ///////////////////////////////////////////////////////////////////
rem // vimpexyzzy.bat  - wrapper bat for 'set editor' of vimperator.
rem //   enables xyzzy to specify encoding on reading a file with revert-buffer.
rem // 
rem // Aug. 2011 http://voidptr.seesaa.net
rem ///////////////////////////////////////////////////////////////////
"c:\Program Files\xyzzy\xyzzy.exe" -m html-mode ^
 -e "(setq *default-fileio-encoding* *encoding-utf8n*)" ^
 -e "(set-buffer-fileio-encoding *encoding-utf8n*)" ^
 -e "(change-fileio-encoding *encoding-utf8n*)" ^
 "%1" ^
 -e "(revert-buffer *encoding-utf8n*)"


@echo on
 

Vimperator の初期設定ファイル: _vimperatorrc の editor の設定

set editor='C:/Program\ Files/xyzzy/vimpexyzzy.bat'
   

これにより、指定の文字エンコーディングでファイルが読み直されるため、所望の結果を得ることができる。

Conclusion

 
  • Vimperator で外部エディタを起動するとき、文字エンコーディングが意図していない SJIS (*encoding-sjis*) となってしまうことが、あった
  • xyzzy 起動時のオプションでは、ファイル名の後ろで、文字エンコーディングの設定を行う必要があることが、分かった
  • BATファイルによるコマンドのラッパを作成し、ファイル名の後ろで文字エンコーディングを指定することにより、Vimperator で、所望の文字エンコーディングで一時ファイルを編集することが可能になる
 

Future Works

もっとスマートなやり方はないものか……



posted by もふもふ at 22:05 | ロンドン ☀ | Comment(0) | TrackBack(0) | カテゴリ: ライフハック・GTD | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
トラックバックURLは,"Trackback(x)"のリンクを押すと表示されます.
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。