Hatena::Groupkeysnail

きすねた(ん)

2012-02-12

imenu 的な何か

| 18:56 | imenu 的な何か - きすねた(ん) を含むブックマーク はてなブックマーク - imenu 的な何か - きすねた(ん)

f:id:mooz:20120212185507p:image

ヘッダ (h1 ~ h4) を一覧表示し,その位置までスクロールできるように.Emacs でいうところの imenu のようなもの.

ext.add("imenu-headers", function () {
  let anchorSelector = [
    "h1",
    "h2",
    "h3",
    "h4"
  ].join(",");

  let elements = Array.slice(content.document.querySelectorAll(anchorSelector));

  function elementToString(element) {
    let headerString = "",
        matched = null;
    if ((matched = element.localName.match(/h([0-9])/))) {
      let headerCount = parseInt(matched[1], 10);
      headerString = (new Array(headerCount)).join("  ");

      let headerMarks = {
        1: '',            /* none */
        2: "\u2023",      /* right arrow */
        3: "\u2022",      /* bullet */
        4: "\u25E6"       /* white bullet */
      };

      if (headerMarks[headerCount])
        headerString = headerString + headerMarks[headerCount] + " ";
    }

    return headerString + element.textContent;
  }

  function scrollToElement(element) {
    let anchor = element.getAttribute("id") || element.getAttribute("name");
    if (anchor)
      content.location.hash = anchor;
    else
      element.scrollIntoView();
  }

  prompt.selector({
    message: "jump to: ",
    collection: elements.map(function (element) elementToString(element)),
    callback: function (selectedIndex) {
      if (selectedIndex < 0)
        return;
      scrollToElement(elements[selectedIndex]);
    }
  });
}, "imenu-headers", true);

私は Emacs で imenu を M-i に割り当てているので,同じキーへ割り当ててみた.なかなか便利.

key.setGlobalKey("M-i", function (ev) {
  ext.exec("imenu-headers");
}, 'jump to headers');

2011-11-29

プロンプト内でスペルチェック

| 12:30 | プロンプト内でスペルチェック - きすねた(ん) を含むブックマーク はてなブックマーク - プロンプト内でスペルチェック - きすねた(ん)

.keysnail.js に以下を.

let (p = document.querySelector("#keysnail-prompt-textbox")) {
  p && p.setAttribute("spellcheck", "true");
};

2011-10-15

Slideshare 用のプラグインを Vimperator からフォーク

| 22:13 | Slideshare 用のプラグインを Vimperator からフォーク - きすねた(ん) を含むブックマーク はてなブックマーク - Slideshare 用のプラグインを Vimperator からフォーク - きすねた(ん)

Slideshare 用のプラグインが非常に便利そうであったので Fork.コードはコチラより.このリンクを右クリックしてインストールも可能.

site-local-keymap.ks.js を用いてキーへ割り当てる使い方を想定している.設定例を以下に.

local["^http://www.slideshare.net/"] = [
  ['n', function () ext.exec("slideshare-next")],
  ['p', function () ext.exec("slideshare-previous")],
  ['f', function () ext.exec("slideshare-toggle-fullscreen")]
];

2011-07-04

KeySnail 紹介記事の紹介

| 12:02 | KeySnail 紹介記事の紹介 - きすねた(ん) を含むブックマーク はてなブックマーク - KeySnail 紹介記事の紹介 - きすねた(ん)

素晴らしい紹介記事を @kickbase さんが書いて下さっています.4 編構成で大ボリュームです.

  1. no title
  2. no title
  3. no title
  4. no title

キルリングの辺りはあまり触れられてこなかったような気もするので,大変うれしいですね.

1 user1 user2011/08/19 23:20元の記事と関係ないのですが、firefox6でkeysnailが動かなくなり、困ってます。
install.rdfではmacVersionは7.*となっていますので、機能的に何か対応できない問題があるのでしょうか?

moozmooz2011/08/19 23:41私も Firefox6 を使用していますが KeySnail は問題なく動いています.

[ツール] -> [KeySnail] -> [有効] のチェックが外れているということはないでしょうか.

環境によって変わるのかもしれません.エラーコンソール (Ctrl+Shift+j) に何か KeySnail 関連のエラーメッセージは出ていませんか?

1 user1 user2011/08/20 21:40昨日コメントした者です。早速のご回答ありがとうございます。
ご回答を見て再度firefox6に上げてみたところ、今度は使えるようになっていました!
最初はステータスバーのアイコンが灰色になっていたのですが、クリックすると有効になりました。これを見落としていただけかもしれません。
お騒がせしました。

2011-04-23

プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで

| 18:22 | プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで - きすねた(ん) を含むブックマーク はてなブックマーク - プロンプトへフォーカス / コンテンツへフォーカスを一つのキーバインドで - きすねた(ん)

key.setGlobalKey(['C-c', 'p'], function (ev, arg) {
    var kpt = document.getElementById("keysnail-prompt-textbox");

    if (ev.target === kpt) {
        kpt.blur();
        gBrowser.focus();
        content.focus();
    } else {
        !document.getElementById("keysnail-prompt").hidden && kpt.focus();
    }
}, 'Toggle focus prompt');

プロンプトへフォーカスしている時に document.commandDispatcher.focusedElementev.originalTarget で得られるノードXULtextbox#keysnail-prompt-textbox でなく,その実装に用いられている HTMLinput 要素になってしまう.そのため,わざわざ ev.target としている.

Node.compareDocumentPositionが素晴らしい - hogehoge @teramako を使って inputtextbox に含まれているかを判断しても良かったのだが,面倒であるし,匿名要素に対してもうまく動くのか不明だったため止めた.