Conkeror というとてもいいブラウザがあるのだが、日本語情報がすくないので紹介することにした

今回は Ubuntu16.02 の環境にインストールするが、Windows でも Mac でも Conkeror は動くよ。

Conkeror とは

Conkeror はキーボード−主体、高カスタマイズ可能、拡張可能なウェブブラウザ。

Conkeror is a keyboard-oriented, highly-customizable, highly-extensible web browser based on Mozilla XULRunner, written mainly in JavaScript, and inspired by exceptional software such as Emacs and vi. Conkeror features a sophisticated keyboard system, allowing users to run commands and interact with content in powerful and novel ways. It is self-documenting, featuring a powerful interactive help system.

メリット

私が感じている conkeror のいいところは、

  • Emacs キーバインドなところ(ここ大事!)
  • ほとんどマウスを利用せずにウェブブラウジングができるところ
  • 自由にカスタマイズ可能なところ

デメリット

  • Chrome や Firefox のようなプラグインが入れられない。
  • PDF をみるとき、いちいちダウンロードして開かないといけない。(PDF プラグインないので)
  • Chrome や Firefox に比べると遅い気がする。

conkeror の取得

git で取得して make

git clone git://repo.or.cz/conkeror.git
cd conkeror
make
make install

これで OK.

公式の wiki には xulrunnner をインストールするようにかかれているけれども、インストールしなくても conkeror は使えた。xulrunnner いらないのかな??よくわからない。

キーバインド

Emacs と同じ!!まずは、C-h t を押してチュートリアルを読もう。

その後で、C-h i を押して、細かいキーバインドを見よう。Emacs 使いならば、もうすでにほとんど使いこなせるはず!!!

とくによい機能は f を押すとリンクが 数字でラベリングされる。数字を指定することで、

デスクトップアイコン を用意する(Ubuntu)

以下の記事を参考に、デスクトップアイコンを作成した。

~/.local/share/applications/ に移動

conkeror.desktop というファイルを新規作成して、以下の内容を記述。

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=conkeror
Comment=conkeror
Exec=/home/tsu-nera/opt/conkeror/conkeror
Icon=/home/tsu-nera/opt/conkeror/Green_copyright.svg.png

アイコンは以下の URL から拝借した。著作権は Public Domain なので多分大丈夫。 -

これで、アプリケーションとして認識されるので、 “コンピュータを検索"を実行するとアイコンが現れる。ランチャーにも登録。

Emacs のデフォルトブラウザを Conkeror に設定

(setq browse-url-generic-program (executable-find "conkeror"))

カスタマイズ

Conkeror のいいところは、柔軟なカスタマイズができるところ。

$HOME/.conkerorrc に設定ファイルを置くと読み込んでくれる。

.zshrc のように、自分だけの .conkeorrc をつくろう。

以下は、自分の設定です。

Tips はここにかかれている。https://conkeror.org/Tips

モードラインにアイコン表示

///////////////////////////////////////////////////////////////
//  Mode-line
//  https://conkeror.org/ModeLine?highlight=%28mode-line%29
///////////////////////////////////////////////////////////////
// funky icons in the modeline
require("mode-line.js");

load_paths.unshift("chrome://conkeror-contrib/content/");
require("mode-line-buttons.js");
mode_line_add_buttons(standard_mode_line_buttons, true);

ホームページ

homepage = "https://www.google.co.jp";

リンクの数字を大きくする

//////////////////////////////////////////
// Big Hint Number
//////////////////////////////////////////
register_user_stylesheet(
    "data:text/css," +
        escape(
            "@namespace url(\"https://www.w3.org/1999/xhtml\");\n" +
            "span.__conkeror_hint {\n"+
            "  font-size: 18px !important;\n"+
            "  line-height: 18px !important;\n"+
            "}"));

ショートカット指定

//////////////////////////////////////////
// shortcut
//////////////////////////////////////////
interactive("open-google", "Go to google.co.jp", "follow",
    $browser_object = "https://www.google.co.jp/");
interactive("open-gmail", "Go to gmail", "follow",
    $browser_object = "https://gmail.com/");
interactive("open-calendar", "Go to calendar.google.com", "follow",
    $browser_object = "https://calendar.google.com/");
interactive("futurismo", "Open Futurismo", "follow",
    $browser_object = "https://futurismo.biz");

interactive("futurismo_wiki", "Open Futurismo", "follow",
    $browser_object = "https://futurismo.biz/dokuwiki");
interactive("youtube", "Open Youtube", "follow",
    $browser_object = "https://www.youtube.com");
interactive("feedly", "Open Feedly", "follow",
    $browser_object = "https://feedly.com");
interactive("tomatoes", "Open Tomatoes", "follow",
    $browser_object = "https://tomato.es/");
interactive("github", "Open Github", "follow",
            $browser_object = "https://github.com/tsu-nera");
interactive("youtube-dl", "download youtube video",
            function (I) {
                shell_command_blind("youtube-dl " + I.buffer.display_uri_string);
            });

// open url with new buffer
define_key(content_buffer_normal_keymap, "d", "follow-new-buffer");
define_key(content_buffer_normal_keymap, "f1", "open-google");
define_key(content_buffer_normal_keymap, "f2", "open-gmail");
define_key(content_buffer_normal_keymap, "f3d", "open-calendar");
define_key(content_buffer_normal_keymap, "f4", "youtube");
define_key(content_buffer_normal_keymap, "f5", "feedly");
define_key(content_buffer_normal_keymap, "f6", "futurismo");
define_key(content_buffer_normal_keymap, "f7", "futurismo_wiki");
define_key(content_buffer_normal_keymap, "f8", "github");

ショートカットからいろいろな機能を呼び出し


//////////////////////////////////////////
// webjump
//////////////////////////////////////////
// evernote
define_webjump("clip","javascript:(function(){EN_CLIP_HOST='https://www.evernote.com';try{var%20x=document.createElement('SCRIPT');x.type='text/javascript';x.src=EN_CLIP_HOST+'/public/bookmarkClipper.js?'+(new%20Date().getTime()/100000);document.getElementsByTagName('head')[0].appendChild(x);}catch(e){location.href=EN_CLIP_HOST+'/clip.action?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title);}})();");

// hatenabookmark
// https://b.hatena.ne.jp/register
define_webjump("hatena","javascript:(function(){var%20d=(new%20Date);var%20s=document.createElement('script');s.charset='UTF-8';s.src='https://b.hatena.ne.jp/js/Hatena/Bookmark/let.js?'+d.getFullYear()+d.getMonth()+d.getDate();(document.getElementsByTagName('head')[0]||document.body).appendChild(s);})();");

// twitter
define_webjump("twitter","javascript:(function()%7Bwindow.twttr=window.twttr%7C%7C%7B%7D;var%20D=550,A=450,C=screen.height,B=screen.width,H=Math.round((B/2)-(D/2)),G=0,F=document,E;if(C%3EA)%7BG=Math.round((C/2)-(A/2))%7Dwindow.twttr.shareWin=window.open(%27https://twitter.com/share%27,%27%27,%27left=%27+H+%27,top=%27+G+%27,width=%27+D+%27,height=%27+A+%27,personalbar=0,toolbar=0,scrollbars=1,resizable=1%27);E=F.createElement(%27script%27);E.src=%27https://platform.twitter.com/bookmarklets/share.js?v=1%27;F.getElementsByTagName(%27head%27)%5B0%5D.appendChild(E)%7D());");

// readability
define_webjump("readability","javascript:(%0A%28function%28%29%7Bwindow.baseUrl%3D%27//www.readability.com%27%3Bwindow.readabilityToken%3D%27DsMgYF6muHA9dzMgEGyLPuMVRYGxf5DFBRVtx9kf%27%3Bvar%20s%3Ddocument.createElement%28%27script%27%29%3Bs.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bs.setAttribute%28%27charset%27%2C%27UTF-8%27%29%3Bs.setAttribute%28%27src%27%2CbaseUrl%2B%27/bookmarklet/save.js%27%29%3Bdocument.documentElement.appendChild%28s%29%3B%7D%29%28%29);");

Google 日本語検索

define_webjump("g", "https://www.google.co.jp/search?q=%s", $alternative = "https://www.google.co.jp/");
define_webjump("@","javascript:(function(){prompt('Copy to Clipboard','['+'['+location.href+']'+'['+document.title.replace(/([\[\]])/g,'\\$1')+']'+']');})();");

Emacs との連携

入力フォームで C-i を押す。emacs-daemon が立ち上がっている状態ならば、 Emacs が起動してきて、テキストを入力することができる。

以下の設定が必要.

editor_shell_command = "emacsclient -c";

履歴検索

url_completion_use_history = true; // should work since bf05c87405

// history webjump
define_browser_object_class(
    "history-url", null, 
    function (I, prompt) {
        check_buffer (I.buffer, content_buffer);
        var result = yield I.buffer.window.minibuffer.read_url(
            $prompt = prompt,  $use_webjumps = false, $use_history = true, $use_bookmarks = false);
        yield co_return (result);
    });

interactive("find-url-from-history",
            "Find a page from history in the current buffer",
            "find-url",
            $browser_object = browser_object_history_url);

interactive("find-url-from-history-new-buffer",
            "Find a page from history in the current buffer",
            "find-url-new-buffer",
            $browser_object = browser_object_history_url);

define_key(content_buffer_normal_keymap, "h", "find-url-from-history-new-buffer");
define_key(content_buffer_normal_keymap, "H", "find-url-from-history");

PDF ファイルを FoxitReader で開く

content_handlers.set("application/pdf", content_handler_open);
external_content_handlers.set("application/pdf", "FoxitReader");

おわりに

他にもたくさん拡張があるけれども、キリがないのでこの辺で。