var PLUGIN_INFO =
K2Emacs
K2Emacs
K2Emacs
KeySnailで本当にEmacs
0.0.9
http://github.com/myuhe/KeySnail_Plugin/raw/master/K2Emacs.png
http://github.com/myuhe/KeySnail_Plugin/raw/master/K2Emacs.ks.js
myuhe
The MIT License
MIT ライセンス
1.8.9
main
edit_text
|javascript|
key.setEditKey(["C-c", "e"], function (ev, arg) {
ext.exec("edit_text", arg, ev);
}, "外部エディタで編集", true);
||<
==== オプションの設定 ====
プラットフォームやエディタに応じて、以下のオプションを設定します。
.keysnail.js 内の PRESERVE エリアへ以下のようなスクリプトを張り付けてください。
なお、デフォルトでは、Linuxの利用を想定した設定となっています。
以下は、Windowsを使う場合の設定例です。
>|javascript|
plugins.options["K2Emacs.editor"] = "C:\\WINDOWS\\notepad.exe";
plugins.options["K2Emacs.ext"] = "html";
plugins.options["K2Emacs.encode"] = "UTF-8"
plugins.options["K2Emacs.sep"] = "\\";
||<
==== 謝辞 ====
このプラグインは、以下のuserChromeスクリプトを参考にしました。
http://space.geocities.yahoo.co.jp/gl/alice0775/view/20070223/1172156543
]]>
;
var optionsDefaultValue = {
"editor" : "/usr/bin/emacsclient.emacs23 -c -a emacs23",
"ext" : "txt",
"encode" : "UTF-8",
"sep" : '/'
};
function getOption(aName) {
var fullName = "K2Emacs." + aName;
if (typeof(plugins.options[fullName]) != "undefined")
{
return plugins.options[fullName];
}else{
return aName in optionsDefaultValue ? optionsDefaultValue[aName] : undefined;
}
}
var ucjs_ExternalEditor = {
//この_editor,_ext,_encodeは,自分の環境に合わせて修正のこと
//_editor: "C:\\progra~1\\hidemaru\\hidemaru.exe", /* windows */
// var hintKeys = getOption("hint_keys");
// _editor: "/usr/bin/emacs", /* windows */
_editor: getOption("editor"), /* windows */
//_editor: "/bin/vi", /* unix */
_ext: getOption("ext"),
// _ext: "txt",
_encode: getOption("encode"),
// _encode: 'UTF-8',
//
_tmpdir: null,
_dir_separator: null,
init: function(){
// this._dir_separator = '\\'; /* windows */
//this._dir_separator = '/'; /* unix */
this._dir_separator = getOption("sep"); /* unix */
},
uninit: function(){
//後始末
//イベント削除
var menu = document.getElementById("contentAreaContextMenu");
if (menu) menu.removeEventListener("popupshowing", ucjs_ExternalEditor.popupContextMenu, true);
document.removeEventListener("focus", ucjs_ExternalEditor.checkfocus_window, true);
//もしメインウインドウがすべて閉じられたら不要となったテンポラリファイルを削除
if (this._tmpdir == null)return;
var windowType = "navigator:browser";
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
var enumerator = windowManagerInterface.getEnumerator(windowType);
if (enumerator.hasMoreElements()) return;
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(this._tmpdir);
var entries = file.directoryEntries;
while (entries.hasMoreElements()){
var entry = entries.getNext().QueryInterface(Components.interfaces.nsIFile);
if (/^ucjs.textarea\./i.test(entry.leafName)){
try{
entry.remove(false);
}catch(e){}
}
}
try{
if( file.exists() == true ) file.remove(false);
}catch(e){}
this._tmpdir = null;
},
checkfocus_window: function(){
//メインウインドウにフォーカスが戻った, たぶん編集終わったので,テンポラリファイルの中身を書き戻す
var target = getBrowser().contentDocument;
var html = target.getElementsByTagName("html")[0];
try{
if(!html.hasAttribute("__ucjs_editor_")) return;
}catch(e){}
var textareas, filename, timestamp, encode, file, istr, sstream, utf, textBoxText;
//すべてのtextareaとinputに関して, テンポラリファイルがあればその中身を書き戻す
textareas = GetAllTextAreas(target);
if (textareas.length<=0) return;
file = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
istr = Components.classes['@mozilla.org/network/file-input-stream;1'].
createInstance(Components.interfaces.nsIFileInputStream);
// FileInputStream's read is [noscript].
sstream = Components.classes["@mozilla.org/scriptableinputstream;1"].
createInstance(Components.interfaces.nsIScriptableInputStream);
utf = Components.classes['@mozilla.org/intl/utf8converterservice;1'].
createInstance(Components.interfaces.nsIUTF8ConverterService);
for(var i=0,len=textareas.length;i