GUI Options をトグルする Vimperator プラグイン toggleGuiOptions.js

初めての vimperaotr plugin を書いてみました。
guioptions の設定をトグルしてツールバーなどの表示/非表示を切り替えるコマンドです。激しく車輪の再発明な気がしますが、ここはひとつ勉強用ということで。

使い方はこんな感じ。

:toggleGuiOptions mT

とやると、guioptions の m(メニューバー)と T(ツールバー)の表示/非表示をトグルします。
オプションが無指定か 'all' の場合は、全ての guioptions をトグルします。
現時点では以下の3つですね。

  • m : メニューバー
  • T : ツールバー
  • b : ブックマークバー

オプションに toolbox を指定すると、メニューバーやツールバーの親要素の #navigator-toolbox の表示/非表示を切り替えます。

:toggleGuiOptions toolbox

これで Web Developer などの拡張が表示するツールバーなどもまるごと消してくれます。
このアイデアはこちらからいただきました。ありがとうございます。

Piro - 2008-02-10 18:19:02
toolbarの上にあるtoolboxごと消すとか。

ツールバーの表示、非表示を切り替えるvimperatorプラグイン - /halt/Snapshot

_vimperatorrc で guioptions は全部オン、toolbox をオフにしておいて、何かが必要なときだけ toolbox をまるごとトグルしてオン/オフするのが良いかなと思います。

追記
参考に _vimperatorrc を貼っておきます。

"guioptions を全部オンにして toolbox を非表示に
set guioptions=mTb
js document.getElementById("navigator-toolbox").collapsed = true;

"Alt + b を :toggleGuiOptions toolbox にマップ
js <<EOM
liberator.mappings.addUserMap([liberator.modes.NORMAL], ['<A-b>'],
  'Toggle toolbox collapsed',
  function () {
    liberator.commands.get("toggleGuiOptions").execute("toolbox");
  }
);
EOM

ご使用の場合は、以下のスクリプトを $HOME/vimperator/plugins/toggleGuiOptions.js に保存してください。

/**
 * ==VimperatorPlugin==
 * @name            toggleGuiOptions.js
 * @description     Toggle GUI Options.
 * @version         0.1 
 * @date            2008-06-29
 * @author          teppeis@gmail.com http://d.hatena.ne.jp/teppeis/
 * ==/VimperatorPlugin==
 *
 * Usage:
 * :toggleGuiOptions [charlist]
 *   -> Toggle GUI Options in charlist.
 *      ex) :toggleGuiOptions mT 
 *      -> Toggled menubar and toolbar.
 *
 * :toggleGuiOptions all 
 *   -> Toggle ALL available GUI Options.
 *
 * :toggleGuiOptions
 *   -> Same to 'all'.
 *
 * :toggleGuiOptions toolbox 
 *   -> Toggle collapsed of $(navigator-toolbox).
 *      Enable for any toolbar of other extentions.
 */

(function() {

function toggleGuiOptions(key)
{
    if (! liberator.config.guioptions[key])
        return false;

    var guioptions = liberator.options.get("guioptions");

    if (guioptions.value.indexOf(key) != -1) {
        guioptions.value = guioptions.value.replace(key, "");
    } else {
        guioptions.value += key;
    }

    return guioptions.value;
}

function toggleCollapsedById(id)
{
    var elem = document.getElementById(id);
    if (! elem)
        return null;

    if ( ! elem.collapsed || elem.collapsed == false ) {
        elem.collapsed = true;
    } else {
        elem.collapsed = false;
    }
    return elem.collapsed;
}

liberator.commands.addUserCommand(['toggleGuiOptions'], "Toggle GUI Options",
    function(arg) {
        var guioptions = liberator.options.get("guioptions");

        if (arg == "toolbox") {
            toggleCollapsedById("navigator-toolbox");
            return;
        }

        if (arg == "all" || arg == "") {
            arg = "";
            for (var key in liberator.config.guioptions) {
                arg += key;
            }
        }

        for (var i = 0; i < arg.length; i++) {
            toggleGuiOptions(arg.charAt(i));
        }
    },
    {
        completer: function(filter) {
            var options = {
                all : "All GUI Options",
                toolbox : "Whole navigator-toolbox",
            };

            for (var key in liberator.config.guioptions) {
                options[key] = liberator.config.guioptions[key];
            }

            var completion_list = [];

            var re = new RegExp('^' + filter);
            for (var key in options) {
                if (re.test(key)) {
                    completion_list.push([key, options[key]]);
                }
            }

            return [0, completion_list];
        }
    }
);

})();

// vim:sw=4 ts=4 et: