From 2fb279b4709d6cbbf2987384a81d9af6593b003c Mon Sep 17 00:00:00 2001 From: pekepeke Date: Sat, 1 Nov 2008 11:46:00 +0000 Subject: git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@22520 d0d07461-0603-4401-acd4-de1884942a52 --- localkeymode.js | 194 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 153 insertions(+), 41 deletions(-) (limited to 'localkeymode.js') diff --git a/localkeymode.js b/localkeymode.js index 219ad09..700c78c 100644 --- a/localkeymode.js +++ b/localkeymode.js @@ -3,14 +3,14 @@ * @name local key mode * @description assign temporary usermodemap * @description-ja 一時的なキーマップの割り当てを行います。 - * @version 0.11b + * @version 0.2.1a * ==/VimperatorPlugin== * * Usage: * - * :togglelocalkeymode - * - * 有効/無効のトグルです。(ステータスバーのアイコンクリックでも切り替え可能) + * :togglelocalkeymode - 有効/無効のトグルです。(ステータスバーのアイコンクリックでも切り替え可能) + * :loadkeymaps - 任意のキーマップの読み込みを行う + * :clearkeymaps - loadkeymaps の読み込みを無効にする * * .vimperatorrc * g:localkeymode_enable : [true=有効/false=無効(デフォルト)] @@ -68,17 +68,25 @@ liberator.plugins.LocalKeyMode = (function(){ +'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAa0lEQVR4nGP0+OzAQApgIkk1Fg3b' +'efZv59mPRwMjwycU/n/e/wwMDIyfGanmJBaG16gCvAwMDAzogpTZ8AJVQImBgYEBXZAyGySwCWMV' +'JNcGUWzCWAWhGrABSPQhA3hUMvo9Js1JFCc+ggAAYtsQ+fmaz5UAAAAASUVORK5CYII='; - + const BINDING_ICON = 'data:image/png;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAVElEQVR4nGP8v5eBJMBEmnIs' + + 'Gpz+Mzj9x6OBheEZNmGsguQ5iYXhHjZhrILk2vAVmzBWQXJt4MYmjFWQXBuUsAljFYRqwApi' + + 'MCJ7CSOEZqR/4iMEAOh5DfER9lQKAAAAAElFTkSuQmCC'; const rhsRegExp = /[ \r\n]+/g; var _isEnable; var _isBindLocalKey = false; - var feedkeysfuncName = typeof liberator.modules != 'undefined'? 'liberator.modules.events.feedkeys': 'liberator.events'; + + var _enableTabs = []; + var _names; + + var feedkeysfuncName = typeof liberator.modules != 'undefined'? + 'liberator.modules.events.feedkeys': 'liberator.events'; // utility function function cloneMap(org){ return new Map( org.modes, org.names, org.description, org.action, - {flags:org.flags, rhs: org.rhs, noremap:org.noremap, bang: org.bang, count: org.count } + {flags:org.flags, rhs: org.rhs, noremap:org.noremap } ); } @@ -90,11 +98,15 @@ liberator.plugins.LocalKeyMode = (function(){ initialize: function() { this.storekeymaps = []; this.delkeychars = []; + this.keymapnames = []; this.localkeymaps = []; + this.completeNames; + this.tabinfo = []; var global = liberator.globalVariables; this.panel = this.setupStatusBar(); - this.isEnable = global.localkeymode_enable != undefined ? window.eval(global.localkeymode_enable) : false; + this.isEnable = global.localkeymode_enable != undefined ? + window.eval(global.localkeymode_enable) : false; this.setupEnvironment(); this.initLocalKeyMap(); }, @@ -106,7 +118,8 @@ liberator.plugins.LocalKeyMode = (function(){ panel.setAttribute('class','statusbarpanel-iconic'); panel.setAttribute('src', self.isEnable ? ENABLE_ICON : DISABLE_ICON); panel.addEventListener('click', function(e){ self.isEnable = !self.isEnable; },false); - document.getElementById('status-bar').insertBefore(panel, document.getElementById('security-button').nextSibling); + document.getElementById('status-bar').insertBefore( + panel, document.getElementById('security-button').nextSibling); return panel; }, get isEnable(){ @@ -117,6 +130,14 @@ liberator.plugins.LocalKeyMode = (function(){ _isEnable = value; this.loadKeyMap(); }, + get isBinding(){ + return _isBindLocalKey; + }, + set isBinding(value){ + this.panel.setAttribute('src', value ? BINDING_ICON : + this.isEnable ? ENABLE_ICON: DISABLE_ICON ); + _isBindLocalKey = value; + }, // 初期処理 initLocalKeyMap: function(){ if (liberator.globalVariables.localKeyMappings == undefined ) return; @@ -127,13 +148,17 @@ liberator.plugins.LocalKeyMode = (function(){ if ( !(items instanceof Array) || items.length < 2 || !(items[1] instanceof Array) ) return; self.addLocalKeyMap( items[0], items[1] ); } ); + this.completeNames = this.keymapnames.map(function(m){ + m = (m+'').replace(/[\/\\]+/g,''); + return [m+'', 'maps for [' + m + ']']} + ); }, // ローカルキーマップの生成 addLocalKeyMap: function( uri, items ) { if (!uri) return; var keymaps = []; var delkeys = []; - if (!(uri instanceof RegExp) ) uri = new RegExp(uri.replace(/([^0-9A-Za-z_])/g, '\\$1')); + if (!(uri instanceof RegExp) ) uri = new RegExp(uri.replace(/([^0-9A-Za-z_@\-])/g, '\\$1')); for ( var i=0; i