aboutsummaryrefslogtreecommitdiffstats
path: root/migemo_hint.js
blob: 1fbe291b65bb6b90132ecd447aa5575a1e78bc09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Vimperator plugin: 'Hint Matching with XUL/Migemo'
// Last Change: 05-Feb-2009.
// License: Creative Commons
// Maintainer: Trapezoid <trapezoid.g@gmail.com> - http://unsigned.g.hatena.ne.jp/Trapezoid
// Require: XUL/Migemo add-on - https://addons.mozilla.org/firefox/addon/5239
//
// extended hint matching with migemo for Vimperator
//
// Usage:
//  :set hintmatching = custom
liberator.plugins.customHintMatcher = function(inputString){
    var XMigemoCore, XMigemoTextUtils;
    try{
        XMigemoCore = Cc['@piro.sakura.ne.jp/xmigemo/factory;1']
                                .getService(Components.interfaces.pIXMigemoFactory)
                                .getService('ja');
        XMigemoTextUtils = Cc['@piro.sakura.ne.jp/xmigemo/text-utility;1']
                                .getService(Ci.pIXMigemoTextUtils);
    }
    catch(ex if ex instanceof TypeError){}
    var r = new RegExp(XMigemoTextUtils.getANDFindRegExpFromTerms(XMigemoCore.getRegExps(inputString)), 'gi');
    return function(hintString) r.test(hintString);
};
">アプリケーションを起動します</description> <version>0.12</version> <author>pekepeke</author> <minVersion>2.0pre</minVersion> <maxVersion>2.0pre</maxVersion> <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/applauncher.js</updateURL> <detail lang='ja'><![CDATA[ == Commands == :applaunch [name] :runapp [name] [name] で指定されたアプリケーションを起動します == .vimperatorrc example == js <<EOM liberator.globalVariables.applauncher_list = [ [ 'name', 'application path', ['arguments', '%URL%', '%SEL%']], [ 'Internet Explorer', 'C:\\Program Files\\Internet Explorer\\iexplore.exe', '%URL%'], [ 'Internet Explorer(Search)', 'C:\\Program Files\\Internet Explorer\\iexplore.exe', '%SEL%'], ]; liberator.globalVariables.applauncher_charset = 'Shift_JIS'; EOM %URL% は実行時に選択中のリンクURLもしくは開いているページのURLに置き換えられます %SEL% は選択中の文字列に置き換えられます %TITLE% はページのタイトルに置き換えられます 引数を複数指定する場合は配列形式で指定してください applauncher_charset を指定すると渡される文字列が指定の文字セットに変換されます ]]></detail> </VimperatorPlugin> liberator.plugins.AppLauncher = (function(){ const UConv = Cc['@mozilla.org/intl/scriptableunicodeconverter'].getService(Ci.nsIScriptableUnicodeConverter); const AppName = 'AppLauncher'; var global = liberator.globalVariables; var settings = global.applauncher_list || []; var defaultCharset = global.applauncher_charset; if (!settings || settings.length <= 0) return; var completer = settings.map( function([name, app, args]) [name, args ? app + ' ' + args.toString(): app] ); var Class = function() function(){ this.initialize.apply(this, arguments); }; var AppLauncher = new Class(); AppLauncher.prototype = { initialize: function(){ this.buildMenu(); this.registerCommand(); }, registerCommand: function(){ var self = this; commands.addUserCommand(['applaunch', 'runapp'], 'Run Defined Application', function(arg){ arg = (typeof arg.string == 'undefined' ? arg : arg.string); self.launch(arg); }, { completer: function( context, arg, special){ var filter = context.filter; context.title = [ 'Name', 'Description']; if (!filter){ context.completions = completer; return; } filter = filter.toLowerCase(); context.completions = completer.filter( function(el) el[0].toLowerCase().indexOf(filter) == 0); } }); }, buildMenu: function(){ var self = this; var menu = document.getElementById('contentAreaContextMenu') .appendChild(document.createElement('menu')); menu.setAttribute('id', AppName + 'Context'); menu.setAttribute('label', AppName); menu.setAttribute('accesskey', 'L'); var menupopup = menu.appendChild(document.createElement('menupopup')); menupopup.setAttribute('id', AppName + 'ContextMenu'); for (let i=0, l=settings.length; i<l; i++){ let [name, app, args] = settings[i]; let menuitem = menupopup.appendChild(document.createElement('menuitem')); menuitem.setAttribute('id', AppName + i); menuitem.setAttribute('label', name + '\u3092\u8D77\u52D5'); menuitem.addEventListener('command', function() self.launch(name), false); } }, variables: { __noSuchMethod__: function(name) name, URL: function() gContextMenu && gContextMenu.onLink ? gContextMenu.getLinkURL() : buffer.URL, SEL: function(){ var selection = window.content.window.getSelection(); var sel = ''; for (let i=0, l=selection.rangeCount; i<l; i++) sel+=selection.getRangeAt(i).toString(); return sel; }, TITLE: function() buffer.title }, launch: function(appName){ var self = this; appName = appName.replace(/\\+/g, ''); // fix commandline input ' ' -> '\ ' settings.some( function([name, app, args]){ args = args instanceof Array ? args : args ? [args] : []; args = args.map( function( val ) val.replace(/%([A-Z]+)%/g, function( _, name ) self.variables[name]()) ); if (defaultCharset){ UConv.charset = defaultCharset; args = args.map( function( val ) UConv.ConvertFromUnicode(val) ); } if (appName == name){ io.run(app, args); return true; } return false; }); } } return new AppLauncher(); })();