hatenaStar.js Hintモードに対応!

";h" でヒントモードが発動して、スターを選べるよ!

あと、

let g:hatena_star_mappings = ",?s"
let g:hatena_star_hint_mapping = "h"

みたいにして、マッピングの設定も出来るようにした。

http://coderepos.org/share/changeset/24536/lang/javascript/vimperator-plugins/trunk/hatenaStar.js

今日中にはsnapshotが生成されると思うので先にリンクを張っておこう

http://download.vimperator.org/vimperator/nightly/vimperator_2.0pre_2008-11-19.xpi

タイトルどおり、最新版でヒントで選択した際の動作を追加することが可能になった。;から起動するヒントから使用可能になる。

ひゃっほうー

commandBookmarklet.js

が動かない問題の手抜きパッチ

diff -r 4d364605df76 src/content/completion.js
--- a/src/content/completion.js Thu Nov 20 22:55:41 2008 +0100
+++ b/src/content/completion.js Fri Nov 21 11:24:40 2008 +0900
@@ -746,8 +746,8 @@
             let filterTokens = filter.split(/\s+/);
             for (let [,elem] in Iterator(urls))
             {
-                var url   = elem[0] || "";
-                var title = elem[1] || "";
+                var url   = elem[0] || elem.url || "";
+                var title = elem[1] || elem.title || "";
                 var tags  = elem.tags || elem[3] || [];
                 if (ignorecase)
                 {

このプラグインがあると、てけとーにブックマークに放り込むだけでコマンドが出来るので便利すぎる。

追記

プラグインにもパッチ当てない駄目だった。

--- trunk/commandBookmarklet.js (revision 24535)
+++ trunk/commandBookmarklet.js (working copy)
@@ -18,7 +18,7 @@
   }
 
   items.forEach(function(item) {
-    var [url, title] = item;
+    var [url, title] = [item.url, item.title];
     var desc = title;
     title = escape( title.replace(/ +/g,'').toLowerCase() );
     if (/[^a-zA-Z]+/.test(title)) {

本体がどうなるかわからないので、コミットは保留。

パッチ適用された

パッチを送って適用されたので上のパッチをあててコミットした。
本体の仕様変更に対応した形になるのでプラグインと本体両方とも最新にする必要あり。
あるいは両方古いままか。
http://coderepos.org/share/changeset/24579
bookmarks.get() の返り血が配列として扱えなくなっているので注意。

Struct

重すぎて、history などでは結局使わないことになったようだが
liberator.modules.Struct
はなかなか便利。

let Neko = new Struct("name", "class", "tails");
Neko.defaultValue("tails", function () 1);

let alex = new Neko("alex", "mix");
liberator.log(alex);        // => class:"mix"
                            //    name:"alex"
                            //    tails:undefined
liberator.log(alex[0]);     // => alex
liberator.log(alex[1]);     // => mix
liberator.log(alex[2]);     // => 1

let jemmy = new Neko("jemmy", "American Short Hair", 2);
liberator.log(jemmy);       // => class:"American Short Hair"
                            //    name:"jemmy"
                            //    tails:2
liberator.log(jemmy[0]);    // => jemmy
liberator.log(jemmy[1]);    // => American Short Hair
liberator.log(jemmy[2]);    // => 2

liberator.log(jemmy.members); // => name,class,tails
liberator.log(jemmy.length);  // => 3

Struct コードみてみた。

let anekos = {
  set meow (value) 'gyahahaha'
};

liberator.log(anekos.meow = 'neko'); // => gyahahaha

罠っぽい。
setter もまっとうな値を返しておけばいいと思うよ!!

Ruby の場合は、右辺を返すのでそういうのになれてるとやらかしそうだ。

class ANekoS
  def meow= (value)
    "gyahahaha"
  end
end

anekos = ANekoS.new
p(anekos.meow = 'neko') # => neko

パッチはこちら

一応。

diff -r 7e4f280c0e60 src/content/util.js
--- a/src/content/util.js       Fri Nov 21 07:35:27 2008 +0100
+++ b/src/content/util.js       Fri Nov 21 19:16:04 2008 +0900
@@ -524,6 +524,7 @@
             let value = val;
             this.__defineGetter__(i, function () value);
             this.__defineSetter__(i, function (val) { value = val });
+            return value;
         });
     };
     return self.constructor = ConStructor;