diff options
author | ymaeda | 2008-11-19 11:14:29 +0000 |
---|---|---|
committer | ymaeda | 2008-11-19 11:14:29 +0000 |
commit | bacca42a107db28b064c949134a9ee5b426b897b (patch) | |
tree | 8c8984684958ecef50b2d646224113cb76ed9f7c /keywordstore.js | |
parent | 9a9c7ba49b75d54792373ff4bb0b69ae30fe5568 (diff) | |
download | vimperator-plugins-bacca42a107db28b064c949134a9ee5b426b897b.tar.bz2 |
Add keywordstore.js
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@24305 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'keywordstore.js')
-rwxr-xr-x | keywordstore.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/keywordstore.js b/keywordstore.js new file mode 100755 index 0000000..28bb9f3 --- /dev/null +++ b/keywordstore.js @@ -0,0 +1,83 @@ +/**
+ * ==VimperatorPlugin==
+ * @name KeywordStore.js
+ * @description Store the keywords when ":open" or ":tabopen" launched
+ * @author Y. Maeda (clouds.across.the.moon@gmail.com)
+ * @link
+ * @version 0.1
+ * ==/VimperatorPlugin==
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Usage:
+ * :kssearch <str>
+ * if <str> is nothing, incremental search starts by last keyword on ":open" or ":tabopen".
+ * <str> could be completed by using history of keywords which used on ":open" or ":tabopen".
+ *
+ * Tested on:
+ * Firefox version: 3.0.3
+ * Vimperator version: 1.2
+ * url: https://addons.mozilla.org/en-US/firefox/addon/4891
+ */
+(function (){
+var queue = [];
+
+function push(strs){
+ for(var i = strs.length-1; i >= 0; i--){
+// if((strs[i] != "") && !(queue.some(function(s){return s==strs[i]} ))){
+ if(strs[i] != "" && queue[0] != strs[i]){
+ queue.unshift(strs[i]);
+ }
+ }
+}
+
+function search(str){
+ str= str || queue[0];
+ liberator.commandline.open("/", str, modes.SEARCH_FORWARD);
+}
+
+function suggestions(str){
+ return queue
+ .filter(function(i){return i.indexOf(str) == 0})
+ .map(function(i){return [i, "Stored Keyword"]});
+}
+
+function completer(str){
+ return [0, suggestions(str)];
+}
+
+
+/* 元のwindow.getShortcutOrURIを退避しておく。*/
+if(!plugins["keywordStore"] || !plugins.keywordStore["__getShortcutOrURI"]){
+ var __getShortcutOrURI = window.getShortcutOrURI
+}else{
+ var __getShortcutOrURI = plugins.keywordStore.__getShortcutOrURI
+}
+
+/* ":open"等が呼ばれたときに、キーワードをキューに入れるようにwindow.getShortcutOrURIを置き換える */
+window.getShortcutOrURI=function(aURL, aPostDataRef){
+ push(aURL.split(" ").slice(1));
+ return __getShortcutOrURI(aURL, aPostDataRef);
+};
+
+/*** User Command ***/
+commands.addUserCommand(['kssearch'], 'KeywordStore search',
+ function(str){search(str)},
+ {completer: completer}, true);
+
+/*** 外からも使えるように ***/
+liberator.plugins.keywordStore = {
+ push: push,
+ search: search,
+ suggestions: suggestions,
+ completer: completer,
+ queue: queue,
+
+ /* 元のwindow.getShortcutOrURIの退避先 */
+ __getShortcutOrURI: __getShortcutOrURI,
+};
+
+})();
|