$ service ssh0 start

from everything import *

Webkitベースの軽量ブラウザluakitを使ってみた(vimperatorユーザーにオススメ!)

今まではFirefoxvimのような操作感を追加するプラグインvimperatorを使用していましたが、Firefoxよりも軽量で、細かく設定可能なWebkitベースのブラウザであるluakitの紹介をしたいと思います。

インストール

コンパイルしない場合

aptでインストールするなら、簡単にインストールできると思います。

sudo apt-get install luakit

端末から

luakit

で起動できることを確かめてください。

自分でコンパイルする場合

自分でコンパイルする場合も、GitHubのREADMEを参考にしながら落ち着いてやれば、簡単にインストールできると思います。 Webkitコンパイルまで自分でやろうとするとすごい時間がかかるらしいので、ものぐさな人はやっぱりaptなどでバイナリバージョンをインストールしてきたほうがいいと思います。

必要なパッケージはREADMEにも書いてありますが、対応するUbuntuでのパッケージ名がわからずに苦労していたので、一応成功した場合のコマンドを残しておきます。

sudo apt-get install webkit-image-gtk libwebkit-dev libgtk2.0-dev sqlite3 sqlite3-pcre libsqlite3-dev gperf lua5.1 liblua5.1-0-dev libunique-dev lua-filesystem

これでひと通りインストールできるかと思います。

luakitのソースコードGitHubリポジトリから適当なところにクローンします。

git clone https://github.com/mason-larobina/luakit.git ~/.git/luakit

そうしたら、

cd ~/.git/luakit
make
sudo make install

でエラーメッセージなくコンパイル、インストールができれば完了です。パッケージが足りないとメッセージが出た時には、必要なパッケージを入れてからもう一度やってみましょう。

基本的な使い方

luakitを起動させると、下にステータスバーがあるだけのシンプルなウェブブラウザが立ち上がるかと思います。 以下にはこれだけ抑えればとりあえず最初触れる程度の説明を書いておきます。 お前の長々とした説明なんていらねぇよという方はとりあえず:helpでEnterしてください。ここに説明している以上のことが書いてあります。

画面移動

j,k,h,lで上下左右の移動、など、画面操作に関してはvimと同じ感覚で操作することができます。 Ctrl+f,Ctrl+bで1画面上下にスクロール、Ctrl+d,Ctrl+uで半画面上下にスクロールするところも同じ。 ggでページトップ、Gでページの最後に行くのも同じ。

ページを開く

vimperatorと同じように、oを押すとステータスバーに:openと表示されるので、ここにURLを貼り付けてEnterキーを押すと、そのURLのウェブサイトを閲覧することができます。 また、検索エンジンを用いたキーワード検索を行うこともできるので、oを押した後にいくつかキーワードを入れてからエンターを押せば検索結果が表示されます。 ただし、デフォルトではluakitのページを検索するようになっているので、:open google luakit search_enginesのように一つ目の要素にサーチエンジンを指定するワードを入れてやると、この例ではGoogleで検索をかけることができます。 ここらへんは後で設定をいじる際に扱います。

同じようにtを押すことで:tabと出るので、これでURLやキーワードを指定して実行すると、新しいタブで検索結果を表示します。 wだと:winopenとなって、ページは新しいウィンドウに表示されます。

Shiftキーを押しながらo,t,wで、現在開いているページのURLを貼り付けた状態で上と同じ操作を行うことができます。 ニコニコで?eco=1などしたいとき便利。

リンクを開く

それから、これもvimperatorと同じですが、fキーを押すことで、リンクなどがハイライトされて左側に番号が振られた状態になります。 この状態で飛びたいリンクの番号を押せば、同じタブ内でそのリンクを読み込むことができます。 ただし、たまにバグなのか仕様なのかわかりませんが、明らかに一つしか候補がないはずなのに複数ハイライトされたままの時があるので、そういった場合にはTabキーで緑色のフォーカスを移してからEnterキーを押せば大丈夫です。 数字は押しにくいのでアルファベットにしたいと思われると思うので、その設定も後で紹介します。 また、デフォルトでは文字が小さく、番号のブロックの色が見にくいので、ハイライトのスタイルの指定の仕方も後で紹介します。

タブの操作

タブの移動はgtで次のタブ、gTで前のタブ、Alt+数字キーで好きな番号のタブに飛べます。 >,<でタブの順番を入れ替えられます。 dで現在開いているタブを閉じます。 uで閉じたタブを復元。 rを押すと再読み込みです。

ブックマーク

gbと押すとブックマークページ(luakit://bookmarks/)が開きます(gBで新しいタブに開く)。 登録したブックマークはこちらに表示されます。 登録は、登録したいページを開いた状態でBキーを押すとブックマークページが開いて登録を行うことができます。

履歴等

ブラウジングの履歴は:historyとすれば出てきます。 また、otで新しくページを開くときにTabキーを押すと、この履歴も表示されるので、活用できると思います。 Mを押した後にアルファベットのキーを押すと、クイックマークに登録され、goの後にそのキーを押すと同じタブ内でそのページを開くことができます。 同じようにgnで新しいタブで、gwで新しいウィンドウで開くことができます。

:qmarksで現在登録されいるマークを確認でき、:qmarkedit アルファベットで、キーに登録されているURLを編集することができます。

luakitを閉じる

普通に閉じるボタン等で閉じてもいいですが、コマンドやショートカットでも閉じれます。

  • ZZ : 現在のセッション(タブ履歴等)を保持して終了
  • ZQ/D : 現在のセッションを破棄して終了
  • :quit : 現在のウィンドウを終了

設定編

さて、それでは基本的な使い方はわかったところで、色々と設定したいところが出てきたと思うので、それらの設定をしていきたいと思います。 タイトルにやりたいことを書いて、どうするかを書いてく感じで進めていきましょう。

(その前に)準備

設定ファイルをコピーしてユーザー用の設定ファイルを作っておきます。

cp -r /etc/xdg/luakit ~/.config

フォントが汚いのを何とかしたい

globals.luaの該当行(後ろの方)に以下のようにフォントとフォントサイズを指定しておきます。

domain_props = {
    ["all"] = {
        default_font_family = "TakaoPGothic",
        sans_serif_font_family = "TakaoPGothic",
        serif_font_family = "TakaoPMincho",
        fantasy_font_family = "TakaoPMincho",
        cursive_font_family = "TakaoPMincho",
        monospace_font_family = "Inconsolata for Powerline",
        default_font_size = 12,
        default_monospace_font_size = 13,
        minimum_font_size = 8,
        ・・・
    },
    ・・・
}

これでページのフォントは改善されたと思います。 しかし、現段階ではFirefoxのような太字の表示のされ方がされないので、改善でき次第まとめたいと思います。

それから、ステータスバーやタブのフォントはtheme.lua

theme.font = "TakaoPGothic normal 9"

のように好きなフォントを指定すれば良いです。

ホームページを変更したい

ホームページを変更するには、globals.luaの最初の方で

-- Global variables for luakit
globals = {
    homepage            = "luakit://bookmarks/",
    ・・・
}

のようにして指定します。ブックマークページを開くようにすると何かと便利でした。

サーチエンジンの設定がしたい

globals.luaに、以下のように書きます。 コメント行にもあるとおり、'%s'にurlエンコードされたキーワードが入ることになります。

-- List of search engines. Each item must contain a single %s which is
-- replaced by URI encoded search terms. All other occurances of the percent
-- character (%) may need to be escaped by placing another % before or after
-- it to avoid collisions with lua's string.format characters.
-- See: http://www.lua.org/manual/5.1/manual.html#pdf-string.format
search_engines = {
    -- default: Google検索
    default_search = "https://www.google.co.jp/search?q=%s",
    -- I'm feeling lucky!
    l = "https://www.google.co.jp/search?q=%s&btnI=I",
    -- "w": Wikipedia
    w = "https:ja.wikipedia.org/wiki/%s",
    -- "n": niconico動画
    n = "http://www.nicovideo.jp/search/%s",
    -- "nd": ニコニコ大百科
    nd = "http://dic.nicovideo.jp/s/al/a/%s",
    -- "p": Google画像検索
    p = "http://www.google.com/search?hl=ja&site=imghp&tbm=isch&source=hp&q=%s&oq=%s",
    -- "m": Google Map
    m = "https://www.google.com/maps/place/%s",
    -- "mfh": Google Map Navigation "from Home to ***"
    -- if you set the searching language 'English',
    -- then replace "自宅" to "Home"
    mfh = "https://www.google.com/maps/dir/自宅/%s",
    -- "mfw": Google Map Navigation "from Work to ***"
    -- if you set the searching language 'English',
    -- then replace "職場" to "Work"
    mfw = "https://www.google.com/maps/dir/職場/%s",
    -- "mfh": Google Map Navigation "from *** to Home"
    -- if you set the searching language 'English',
    -- then replace "自宅" to "Home"
    mth = "https://www.google.com/maps/dir/%s/自宅",
    -- "mfw": Google Map Navigation "from *** to Work"
    -- if you set the searching language 'English',
    -- then replace "職場" to "Work"
    mtw = "https://www.google.com/maps/dir/%s/職場",
    -- "ip": IP address search
    ip = "http://www.ip-adress.com/whois/%s",
    -- 'f': flickr
    f = "https://www.flickr.com/search/?text=%s&safe_search=3",
    -- "y": Youtubeで検索
    y = "http://www.youtube.com/results?search_query=%s&sm=3",
    -- "rt" Yahooリアルタイム検索
    rt = "http://realtime.search.yahoo.co.jp/search?p=%s&ei=UTF-8",
    -- "sc" Google Scholar検索
    sc = "http://scholar.google.co.jp/scholar?as_vis=1&q=%s&hl=ja&as_sdt=1,5",
    -- "q" Qiita 検索
    q = "http://qiita.com/search?q=%s",
    -- "g" Githubを検索
    g = "https://github.com/search?q=%s",
    -- "gu" Githubを検索(ユーザーを検索)
    gu = "https://github.com/search?q=%s&type=Users",
    -- "gs" Gistを検索
    gs = "https://gist.github.com/search?utf8=✓&q=%s",
    -- "t": 翻訳
    t = "http://ejje.weblio.jp/content/%s",
}

-- Set google as fallback search engine
search_engines.default = search_engines.default_search

ここで上げている設定は、自作の検索補助ツールwebsearchでも使っているものです。 サーチエンジンの名称は何でもいいですが、そのワードを検索欄の一番初めに入れてしまう恐れのある名前を付けるのはやめましょう。あと長いのも使いにくいはず。

最後の行でデフォルトのサーチエンジンを指定しています。

タブとステータスバー、コマンドメニューの見た目を変更したい

theme.luaを編集してください(雑)。

自分の設定はここにあるので、参考にしてもらっても構いません。

followモードを数字でなくアルファベットで選択するようにしたい

rc.luaで、

require "follow"

の後のコメントをコメントアウトします。自分の場合、そのままの配列だとやりづらかったので、vimperatorから持ってきたのを貼り付けて、以下のようにします。

-- Use a custom charater set for hint labels
local s = follow.label_styles
follow.label_maker = s.sort(s.reverse(s.charset("fjkasdhguonmerwc")))

followモードの見た目を変更したい

同じようにrc.luarequire "follow"の後に、以下のように追記します。

follow.stylesheet = [===[
#luakit_follow_overlay {
    position: absolute;
    left: 0;
    top: 0;
}

#luakit_follow_overlay .hint_overlay {
    display: block;
    position: absolute;
    background-color: #ffff99;
    opacity: 0.3;
    z-index: 999999999;
}

#luakit_follow_overlay .hint_label {
    display: block;
    position: absolute;
    background-color: #1c1c1c;
    color: #fefefe;
    padding: 1px 1px;
    font-family: monospace, courier, sans-serif;
    font-size: 12px;
    z-index: 99999999;
}

#luakit_follow_overlay .hint_overlay_body {
    background-color: #e4efff;
}

#luakit_follow_overlay .hint_selected {
    background-color: #00ff00 !important;
}
]===]

この設定では以下のように表示されます。

f:id:ssh0:20150902035201p:plain

open等で補完するときにBookmarkが先に候補に上がって欲しい

rc.luaで、require "completion"の後に以下のように書く:

-- Add command completion
require "completion"`
-- Order of completion items
completion.order = {
    completion.funcs.command,
    completion.funcs.bookmarks,
    completion.funcs.history,
}

キーバインドを変更したい

luakit標準の機能を呼びだすキーバインドであれば、binds.luaを編集することで、好きなようにキーバインドの設定を行うことができます。

自分がデフォルトから変更しているキーバインドを紹介しておきます。

yでヤンクしたURLはクリップボードにも入れる。

-- Yanking
key({}, "y", "Yank current URI to primary selection.",
    function (w)
        local uri = string.gsub(w.view.uri or "", " ", "%%20")
        luakit.selection.primary = uri
        luakit.selection.clipboard = luakit.selection.primary -- yank to clipboard too.
        w:notify("Yanked uri: " .. uri)
    end),

Yでページのタイトルをヤンクする

key({}, "Y", "Yank current title to primary selection.",
    function (w)
        local title = w.view.title or ""
        luakit.selection.primary = title
        luakit.selection.clipboard = luakit.selection.primary
        w:notify("Yanked title: " .. title)
    end),

Control + cで選択範囲をクリップボードにコピーする

key({"Control"}, "c", "Copy (as-in) control-c control-v",
    function (w)
        luakit.selection.clipboard = luakit.selection.primary
    end),

Alt + h/lで隣のタブに移動する

key({"Mod1"}, "h", "Go to previous tab.",
    function (w) w:prev_tab() end),

key({"Mod1"}, "l", "Go to next tab.",
    function (w) w:next_tab() end),

最近tmuxにこの設定を入れたら捗ったので。

ex-followモードでヤンクしたURL等もクリップボードに移す

ex_follow_bindings = {
    -- Yank element uri or description into primary selection
    key({}, "y", [[Hint all links (as defined by the `follow.selectors.uri`
        selector) and set the primary selection to the matched elements URI.]],
        function (w)
            w:set_mode("follow", {
                prompt = "yank", selector = "uri", evaluator = "uri",
                func = function (uri)
                    assert(type(uri) == "string")
                    uri = string.gsub(uri, " ", "%%20")
                    -- capi.luakit.selection.primary = uri
                    luakit.selection.primary = uri
                    luakit.selection.clipboard = luakit.selection.primary -- inserted
                    w:notify("Yanked uri: " .. uri, false)
                end
            })
        end),

    -- Yank element description
    key({}, "Y", [[Hint all links (as defined by the `follow.selectors.uri`
        selector) and set the primary selection to the matched elements URI.]],
        function (w)
            w:set_mode("follow", {
                prompt = "yank desc", selector = "desc", evaluator = "desc",
                func = function (desc)
                    assert(type(desc) == "string")
                    -- capi.luakit.selection.primary = desc
                    luakit.selection.primary = desc
                    luakit.selection.clipboard = luakit.selection.primary -- inserted
                    w:notify("Yanked desc: " .. desc)
                end
            })
        end),
}

add_binds({"ex-follow"}, ex_follow_bindings)

もともとのソースコード/usr/local/share/luakit/lib/follow.luaを直接編集してコードを挿入してもよかったのだが、まぁ変更したのは手元で見れる方がいいかなと思ったので、binds.luaで登録しています。 ただし、libにあるキーバインドを消す方法がわからなかったので、helpページをみるとex-followモードにyとYの説明が二つずつ書いてあって気持ち悪い。 きちんと動作しているので、気にしなければ問題はないですが、後々解決したいですね。

Uで:undolistを表示する

vimperator使ってる時もこのキーバインドをしていたので。

uで閉じたタブを復元するというのはundocloseというライブラリの中での機能なので、これをインポートした後に設定する必要がある。 rc.luarequire "undoclose"の後に

-- Add command to list closed tabs & bind to open closed tabs
require "undoclose"

local key = lousy.bind.key
add_binds("normal", {
    key({}, "U", "View closed tabs in a list.",
        function (w) w:set_mode("undolist")  end),
})

のようにします。

ダウンロード先を指定したい

rc.luarequire "downloads"などの後に以下のように記述。 os.getenv("HOME")環境変数$HOMEの値が取れるみたいです。

-- Add download support
require "downloads"
require "downloads_chrome"

-- Set download location
downloads.default_dir = os.getenv("HOME") .. "/Downloads"
downloads.add_signal("download-location", function (uri, file)
    if not file or file == "" then
        file = (string.match(uri, "/([^/]+)$")
            or string.match(uri, "^%w+://(.+)")
            or string.gsub(uri, "/", "_")
            or "untitled")
    end
    return downloads.default_dir .. "/" .. file
end)

ウィンドウタイトルに表示する文字列を変更したい

ウィンドウマネージャによると思いますが、ウィンドウのタイトルがページ名ではなくて"luakit"とかで始まった方が検索しやすくて便利、というのはあると思います。 こういったのを変更するのもplugin等入れなくても簡単に編集できるのも魅力の一つですね。

window.luaの該当行(<<<の行)を編集:

update_win_title = function (w)
    local uri, title = w.view.uri, w.view.title
    title = "luakit" .. ((title and " - " .. title) or "") -- <<<
    local max = globals.max_title_len or 80
    if #title > max then title = string.sub(title, 1, max) .. "..." end
    w.win.title = title
end,

読み込み時以外はステータスバーを非表示にする

これはvimperatorではなかなか難しかったように記憶していますが、luakitでは簡単に設定できます。

window.luaの該当行(<<<の行)を編集:

update_progress = function (w)
    local p = w.view.progress
    local loaded = w.sbar.l.loaded
    if not w.view:loading() or p == 1 then
        loaded:hide()
        w.sbar.ebox:hide()           -- <<<
        w.sbar.hidden = true         -- <<<
    else
        w.sbar.ebox:show()           -- <<<
        w.sbar.hidden = false        -- <<<
        loaded:show()
        loaded.text = string.format("(%d%%)", p * 100)
    end
end,

広告を非表示にしたい、adblockを入れたい

これはプラグインを入れることで実現することができます。

を参考に、まずadblock.luaadblock_chrome.luaをインストールしてきます。

wget https://raw.githubusercontent.com/Plaque-fcc/luakit-adblock/master/adblock.lua -O ~/.config/luakit/plugins/adblock.lua
wget https://raw.githubusercontent.com/Plaque-fcc/luakit-adblock/master/adblock_chrome.lua -O ~/.config/luakit/plugins/adblock.lua

次に、adblockでブロックするサイトのリストを、公式ページからダウンロードしてきます。

wget https://easylist-downloads.adblockplus.org/easylist.txt -O ~/.local/share/luakit/adblock/easylist.txt

この他にも追加したいものがあれば、~/.local/share/luakit/adblock/以下に拡張子".txt"をつけて保存します。

adblock.luaadblock_chrome.luaを読み込むために、rc.lua-- Optional user script loading --の行の後に、以下のように記述します:

-- adblock
require "plugins.adblock"
require "plugins.adblock_chrome"

このように設定してからluakitを:restartで再起動し、gAを押すと、adblockの設定状況を表示したページに移動することができます。 :adblock-enableで機能をオンにすることができます。

ただし、easylist.txtが強すぎるのか、QiitaやGitHubで自分のプロフィール画像が表示されなかったり、Google+が画像が表示されなくて悲惨なことになったりしており、ちょっと困っています。 また、ブロックした後に"読み込めませんでした"的なコメントが埋め込まれて表示されることもあって、見た目がよくなるわけでもない感じ。 そこら辺Firefoxのadblockplusはすごいよなぁと思う。

プライベートモードみたいなのが欲しい

デフォルトでは、プライベートモードのように履歴を残さずにブラウジングすることはできませんが(全部保存しないという方法はある)、 private_browsing_tabsというプラグインを使うと、:prというコマンドで、今開いているタブから開いたリンクや:tabopenで開いたタブの履歴は保存されなくなります。 ただし、匿名化を行ったりしてプライバシーを保証するわけではないので、単に履歴に残したくない場合にのみ有効だと思っていてください。

インストールは、端末から

git clone https://github.com/weeezes/luakit_private_browsing_tabs.git ~/.config/luakit/plugins/private_browsing_tabs
cp ~/.config/luakit/plugins/private_browsing_tabs/private_browsing_tabs.lua ~/.config/luakit/plugins/private_browsing_tabs.lua

としてダウンロードした後、rc.lua-- Optional user script loading --の行の後に、以下のように記述します:

-- private browsing tabs
require "plugins.private_browsing_tabs"

:prで機能の有効無効をトグルすることができます。 また、プライベートモードではそのタブの色を変え、タブの名称も"(Private)"固定となっています。 デフォルトの色から変更したい場合には、直接~/.config/luakit/plugins/private_browsing_tabs.lua内の-- Private tab label以降の値を変えればいいです ね。

まとめ

vimperatorに完全に勝てるかといったら、まだ力不足といった感じもするけれど、以前入れたときに比べると謎のCPU100%事件も起きてないし、設定がとっても自由なのは魅力的だし、何よりFirefoxchromeに比べて超高速に起動するのが魅力的。 普段のブラウジングは全部これでやって、うまくいかないのはFirefoxGoogleマップとか明らかにchrome優遇されてるやつなんかはchrome開くみたいな感じでいいかも。(追記:2015/09/12)ユーザーエージェントをChromeに偽装すれば、この問題は気にならなくなった。