読者です 読者をやめる 読者になる 読者になる

gotin blog

Whatever gotin wanna write

g_editor.user.js用textarea連携スクリプト

GreasemonkeyでEmacsチックなテキストエディタg_editor.user.js用の
便利(かもしれない)スクリプトを作ってみました。

掲示板やブログなどの書き込み用ページのテキストエリアがせまかったりで不便に思うことがあります(よね?たまに。あることにしましょう)
その対応策として、


1.別のテキストエディタを使って編集して、
 (何ならローカルファイルに保存しておいて)
 編集内容を対象となるテキストエリアにペーストする
2.テキストエリアをリサイズ可能にするGreasemonkeyスクリプト(やブックマークレット
 などをつかってテキストエリアを広げて対処する

などを行っている人もいると思います。

この、1.をもう少し便利っぽくしたものを実現するものを作りました。
このスクリプトは↓こんな風に使います。


(1)編集対象のテキストエリアでCtrl-Qを押す
(2)g_editor内のファイルパス入力を促すダイアログが出てくる(デフォルト/tmp/textarea)
(3)パスを指定すると、そのパスのファイルが開き、
対象テキストエリアに入力中の文字列が編集エリアに出力される
(なので中身が既にあったりして内容を変更したくないファイルは(2)で指定しないのが吉)
(4)編集中のファイルを保存すると、(1)でCtrl-Qを押したテキストエリアの値として、
編集中のファイルの内容が設定される

どうでしょう。便利っぽくないでしょうか。

で、問題のスクリプトは↓これです。
textarea.js


var applyer = {
// 初期化処理
// textarea内でCtrl-Qが押されたらapply関数を実行
init:function(){
var textareas = document.getElementsByTagName("textarea");
var length =textareas.length;
for(var i=0;i<length;i++){
textareas[i].addEventListener("keydown",
function(event){
if(KeyProcessor.code(event) == "C-q"){
applyer.apply(event.target);
}
},
true);
}
},
// パスを指定させ、テキストエリアとの同期対象のファイルを指定させる。
// 同期対象のファイルが保存されるタイミングで、内容をテキストエリアに反映する
apply:function(textarea){
var path = prompt("path", "/tmp/textarea");
if(path){
Editor.show(); // g_editorを表示
fileopen(path); // pathのファイルを開く
Editor.setText(textarea.value); // textareaに入力されているテキスト値を編集エリアに設定
// saveイベントに対するリスナ設定
// 指定されたパスのファイルが保存されたら、その内容を
// 元のtextareaのvalueに設定する
FileManager.addEventListener("save",
function(event){
if(event.path == path){
textarea.value = event.text;
}
},
true);
}
}
};
applyer.init();

↑このスクリプトを使うには以下のようにします。


1.スクリプトをg_editor.user.jsで適当なところに保存する。
ここでは /js/textarea.js に保存することにする。
wgetコマンドを使うのも良い。
その場合、
http://gomaxfire.dnsdojo.com/g_editor/js/textarea.js
を取り込み対象のURLとして指定してください。
2./init.jsの最後に、
Executer.execute("/js/textarea.js");
と書いて保存する。(textarea.jsを保存した場所が違う場合はそのパスを指定する)
3.ページをリロードする(なりしてg_editor.user.jsを実行し直す)

これで、任意のテキストエリアでテキストエリア連携機能が使えるようになります。

このスクリプトは最新版(ver 0.13以上)のg_editor.user.jsでないと
使えませんのであしからず。

ちなみに、このエントリもこのスクリプトの機能を使って書いてみました。
便利〜ぃ(ということにしておく)



[追記]
ちょっと導入手順が面倒かもしれない。
/plugin/ 以下に置いた*.jsは初期化時に全部evalする、といった仕掛けを用意するのが良さそうな気がしてきた。