Luakit
Luakit は極めて高速かつ軽量で、柔軟性のあるウェブブラウザです。WebKit エンジンを使っています。Lua スクリプトでカスタマイズすることができ、キーボードショートカットで完全に操作することが可能です。オリジナルのバージョンは更新が止まっておりセキュリティに問題がありますが、GTK+3 と WebKit2GTK+ を使用するフォークは活発に開発されています。
目次
インストール
公式 Web サイトの推奨に従って、luakit パッケージまたは、開発版の luakit-gitAUR をインストールします。
基本的な使い方
コマンドプロンプトにアクセスするには :
を押します。ほとんど全てのことはコマンドプロンプトから行えます。Tab
でコマンドを自動補完します。
:help
コマンドを使うことで利用可能なキーボードショートカットの情報を得ることができます (Lua で特定のキーボードショートカットのアクションがどうやって実装されているか確認するには、ヘルプテキストのどこかをクリックしてください)。
終了するには、:quit
コマンドを使って下さい。あるいは Shift+z
を押してから Shift+q
を押しても終了できます。また、:writequit
コマンドを使ったり、Shift+z
を2回押しても、ブラウザを終了できます。この場合、セッションが記録されます (つまり、タブが復元されます)。
ブラウジング
o
を押すとプロンプトが開くので:open
コマンドで開きたい URI を入力してください。現在の URI を編集するにはShift+o
を押します。- URI と認識できなかった場合、Luakit は
~/.config/luakit/globals.lua
で指定されたデフォルトの検索エンジンを使います。 - エントリの前に適当なキーワードを付けることで使用する検索エンジンを指定します (例:
:open google foobar
なら Google で foobar を検索)。 - 一般的なショートカットで移動します。emacs や vim のファンなら、標準的なショートカットが利用できます。マウスを使うこともできます。
- 表示されているリンクのインデックスを表示するには
f
を使います。適当な数字や文字列の一部を入力するとリンクを開きます。 Shift+f
を使うとリンクを新しいタブで開きます。Ctrl+t
を押すと新しいタブが開き、Ctrl+w
で閉じます。t
を押すと URI のプロンプトが表示され新しいタブで開かれます。Shift+t
で新しいタブで現在の URI を編集します。w
を押すと新しいウィンドウで開く URI のプロンプトが現れ、Shift+w
で新しいウィンドウで現在の URI を編集できます。g
を押してからt
あるいはShift+t
、またはCtrl+PageUp
やCtrl+PageDown
を使うことでタブを切り替えます。Alt+number
で指定したタブに切り替えられます。- ブラウザ履歴を戻るには
Shift+h
を使います。 - ブラウザ履歴を進むには
Shift+l
を使います。 <
と>
でタブの順番が変わります。r
でページをリロードして、Ctrl+c
でロードを中止します。- 最後に閉じたタブをまた開くには
u
です。 g
を押してからd
でダウンロードページを開きます (またはShift+d
で新しいタブで開きます)。y
で URI をプライマリセレクションにコピーします。:viewsource
でページのソースコードを閲覧できます。通常ビューに戻るには:viewsource!
です。;
を押してからi
で画像のソースを表示します (またはShift+i
で新しいタブで開く)。:inspect
でエレメントを調査できます。再度実行すると新しいウィンドウで開きます。インスペクタの無効化は:inspect!
です。
入力フィールド
ドロップダウンリストやチェックボックス、テキストフィールドなど、編集できるエレメントが存在するウェブページは数多くあります。マウスで編集することもできますが、follow コマンドを使った場合困ったことになるかもしれません。そのような場合、方向キーを押すことで問題を解決できます。もしくは g
i
ショートカットを使うことでも入力にフォーカスできます。
ブックマーク
有効にすることで (デフォルト設定)、Luakit の中からブックマークを使うことができます。
:bookmarks
コマンドでブックマークのページが開きます (ショートカット:g
の後にb
、あるいはShift+b
で新しいタブで開く)。:bookmark [URI [tags]]
コマンドは指定した URI を指定したタグでブックマークに追加します (URI を省略した場合、現在のタブの URI が追加されます)。バージョン 2012-09-13-r1 から、ブックマークページは保存する前に新しいブックマーク編集モードで (新しいタブで) 開きます (ショートカット:Shift+b
)。
設定
キーバインディング
ほとんどのバインディングには Luakit に関するある程度の知識が必要ですが、少なくとも次のことはできます。
簡単な再バインド:
~/.config/luakit/userconf.lua
local modes = require "modes" -- Creates new bindings from old ones. modes.remap_binds("normal", -- This is the mode in which the bindings are active. { -- new old removes the old binding (defaults to false) {"O", "t", true}, -- define as many as you wish {"Control-=", "zi"}, ... })
キーをコマンドにバインドするには、次のテンプレートを使用できます。
~/.config/luakit/userconf.lua
modes.add_binds("normal", { -- {"<key>", -- "<description>", -- function (w) w:enter_cmd("<command>") end} {"O", "Open URL in a new tab.", function (w) w:enter_cmd(":tabopen ") end}, ... })
こちら /usr/share/luakit/lib/binds.lua
を参照してください。
バインディングが定義されています。
ホームページ
ホームページは以下のように設定します:
~/.config/luakit/globals.lua
globals = { homepage = "www.example.com", ... }
カスタム検索エンジン
デフォルトの検索エンジンで検索するには、o
を押してから検索フレーズを入力します。別のエンジンを使って検索するときは、o
の後にエンジンの名前を入力してから、検索フレーズを入力してください。
どんな検索エンジンでも追加できます。追加したいウェブサイトで検索してから、検索キーワードを %s
に置き換えて、ウェブページの URI を Luakit の設定にコピーアンドペーストしてください。例:
~/.config/luakit/globals.lua
search_engines = { aur = "https://aur.archlinux.org/packages.php?O=0&K=%s&do_Search=Go", aw = "https://wiki.archlinux.org/index.php/Special:Search?fulltext=Search&search=%s", googleseceng = "https://www.google.com/search?name=f&hl=en&q=%s", ... }
Luakit では変数が :open
コマンドのキーワードとして使われています。
同一のキーワードを使ってデフォルトの検索エンジンを設定します:
~/.config/luakit/globals.lua
search_engines.default = search_engines.aur
ダウンロードフォルダ
ダウンロードする場所を指定するには:
~/.config/luakit/rc.lua
-- 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)
Adblock
複数のプラグインが利用できます。
公式ウェブサイトに載っている Adblock プラグインを設定するには:
~/.config/luakit
にadblock.lua
とadblock_chrome.lua
ファイルを保存してください。~/.config/rc.lua
を編集して Optional user script loading と書かれたセクションに以下を追加:
~/.config/rc.lua
---------------------------------- -- Optional user script loading -- ---------------------------------- require "adblock" require "adblock_chrome" ...
- Easylist などの adblock 対応リストを取得して、
~/.local/share/luakit
に保存してください。 - Luakit を再起動して拡張をロードします。
- Luakit の中で
:adblock-list-enable number
コマンドを使えばダウンロードした Adblock のリストが起動時に有効になります。
AdBlock の有効リストの情報は :adblock
や luakit://adblock/
の内部ページで g
Shift+a
を使うことで確認できます。ただし adblock_chrome
モジュールが有効になっている必要があります。これは必須ではありません。
Luakit の AdBlock プラグインは Luakit Plugins プロジェクトの一部として使うこともできます。
ブックマークの管理
同期
バージョン 2012.09.13 から、Luakit のブックマークは SQLite データベースに保存されています: ~/.local/share/luakit/bookmarks.db
。
デフォルトファイルの場所にシンボリックリンクを作成することでマシンのどこにでもブックマークを保存できます。Dropbox などのクラウド同期アプリケーションを使うことで、ブックマークを複数のコンピュータ間で同期させることも可能です。
プレーンテキストのブックマークを SQLite フォーマットに変換
ブックマークはシンプルなプレーンテキストファイルで保存されていました: ~/.local/share/luakit/bookmarks
。各行がブックマークです。2つのフィールド link と group からなり、tab 文字で区切られています。
最新の Luakit リリースでブックマークを使うには、ファイルを変換する必要があります。変換を行う Lua スクリプトのサンプル:
bookmarks_plain_to_sqlite.lua
local usage = [[Usage: luakit -c bookmarks_plain_to_sqlite.lua [bookmark plaintext path] [bookmark db path] ]] local old_db_path, new_db_path = unpack(uris) if not old_db_path or not new_db_path then io.stdout:write(usage) luakit.quit(1) end -- One-pass file read into 'data' var. old_db = assert(io.open(old_db_path, "r")) local data = old_db:read("*all") assert(old_db:close()) -- Init new_db, otherwise sqlite queries will fail. new_db = sqlite3{ filename = new_db_path } new_db:exec("CREATE TABLE IF NOT EXISTS bookmarks (id INTEGER PRIMARY KEY, uri TEXT NOT NULL, title TEXT NOT NULL, desc TEXT NOT NULL, tags TEXT NOT NULL, created INTEGER, modified INTEGER )") -- Fill local url,tag for line in data:gmatch("[^\n]*\n?") do if string.len(line) > 1 then print ("["..line.."]") -- Get url and tag (if present) from first line. _, _, url, tag = string.find(line, "([^\n\t]+)\t*([^\n]*)\n?") -- Optional yet convenient output. io.write(url) io.write("\t") io.write(tag) io.write("\n") -- DB insertion. Nothing will be overwritten. If URL and/or tag already exists, then a double is created. new_db:exec("INSERT INTO bookmarks VALUES (NULL, ?, ?, ?, ?, ?, ?)", { url, "", "", tag or "", os.time(), os.time() }) end end print("Import finished.") print("\nVacuuming database...") new_db:exec "VACUUM" print("Vacuum done.") luakit.quit(0)
スクリプトの冒頭に書かれているように、Luakit で実行する必要があります:
$ luakit -c bookmarks_plain_to_sqlite.lua path/to/plaintext/bookmark path/to/db
古いプレーンテキストのブックマークは変更を加えずに残します。DB ブックマークが存在しない場合、ファイルが作成されます。存在する場合、前のブックマークに手が加えられることはないので安心してください。ただし、ブックマークがダブる可能性はあります。
Firefox からインポート
Firefox からブックマークをインポートするには、まずブックマークマネージャを使って HTML ファイルにエクスポートする必要があります。その後 XML ファイルを Luakit のフォーマットに変換することができます。
以下の awk コマンドのワンライナーで変換を行います:
$ cat bookmarks.html | awk ' {gsub(/\"/," ")} /<\/H3>/{FS=">";gsub(/</,">");og=g;g=$(NF-2);FS=" "} /<DL>/{x++;if(x>= 3)gl[x-3]=g} /<\/DL>/{x--;if(x==2)g=og"2"} /HREF/{gsub(/</," ");gsub(/>/," ");if(g!=""){if(og!=g){printf "\n";og=g};printf "%s\t",$4;if(x>=3){for(i=0;i<=x-4;i++){printf "%s-",gl[i]}printf "%s\n",gl[x-3]}else{printf "\n"}}}'
スクリプトをもっと読みやすくしたバージョン:
ff2lk.awk
# Notes: 'folders' for Firefox bookmarks mean 'groups' for Luakit. # Put spaces where it is needed to delimit words properly. {gsub(/\"/," ")} # Since the folder name may have spaces, delimiter must be ">" here. /<\/H3>/ { FS=">" gsub(/</,">") oldgroup=group group=$(NF-2) FS=" " } # Each time a <DL> is encountered, it means we step into a subfolder. # 'count' is the depth level. # Base level starts at 2 (Firefox fault). # 'groupline' is an array of all parent folders. /<DL>/ { count++ if ( count >= 3 ) groupline[count-3]=group } # On </DL>, we step out. # If if return to the base level (i.e. not in a folder), then we give 'group' a fake name different # from 'oldgroup' to make sure a line will be skipped (see below). /<\/DL>/ { count-- if( count == 2 ) group=oldgroup"ROOT" } # The bookmark name. # If oldgroup is different than group, (i.e. folder changed) then we skip a line. # If we are in a folder, then we print the group name, i.e. all parents plus the current folder # separated by an hyphen. /HREF/ { gsub(/</," ") gsub(/>/," ") if (group != "") { if(oldgroup != group) { printf "\n" oldgroup=group } printf "%s\t",$4 if ( count >= 3 ) { for ( i=0 ; i <= count-4 ; i++ ) {printf "%s-" , groupline[i]} printf "%s" , groupline[count-3] } printf "\n" } }
以下のように実行してください:
$ awk -f ff2lk.awk bookmarks.html >> bookmarks
ブックマークのエクスポート
以下のスクリプトは Luakit のブックマークを SQLite フォーマットからプレーンテキストファイルにエクスポートします。作成されるファイルは他のウェブブラウザでも使うことができ、あるいはインポートスクリプトで簡単にパースできます。
bookmarks_sqlite_to_plain.lua
-- USER CONFIG local sep = " " -- END OF USER CONFIG local usage = [[Usage: luakit -c bookmarks_sqlite_to_plain.lua [bookmark db path] [bookmark plain path] DB scheme is bookmarks ( id INTEGER PRIMARY KEY, uri TEXT NOT NULL, title TEXT NOT NULL, desc TEXT NOT NULL, tags TEXT NOT NULL, created INTEGER, modified INTEGER ); ]] local old_db_path, new_db_path = unpack(uris) if not old_db_path or not new_db_path then io.stdout:write(usage) luakit.quit(1) end -- One-pass file read into 'data' var. new_db = assert(io.open(new_db_path, "w")) -- Open old_db old_db = sqlite3{ filename = old_db_path } -- Load all db values to a string variable. local rows = old_db:exec [[ SELECT * FROM bookmarks ]] -- Iterate over all entries. -- Note: it could be faster to use one single concatenation for all entries, but -- it would be much more code and not so flexible. It is desirable to focus on -- clarity. After all, only a few hundred lines are handled. for _, b in ipairs(rows) do -- Change %q for %s to remove double quotes if needed. -- You can toggle the desired fields with comments. local outputstr = string.format("%q%s", b.uri or "", sep) .. string.format("%q%s", b.title or "", sep) .. string.format("%q%s", b.desc or "", sep) .. string.format("%q%s- ", b.tags or "", sep) .. ((b.created or "" ) .. sep) .. ((b.modified or "" ) .. sep) .. "\n" -- Write entry to file. new_db:write(outputstr) end print("Export done.") assert(new_db:close()) luakit.quit(0)
スクリプトの冒頭に書かれているように、Luakit で実行する必要があります:
$ luakit -c bookmarks_plain_to_sqlite.lua path/to/plaintext/bookmarks path/to/database
Tor
Tor をセットアップしたら、次を実行:
$ torify luakit
カスタム CSS
luakit のデータストレージディレクトリ内で styles
サブディレクトリを見つけます。
通常、これは ~/.local/share/luakit/styles/
にあります。
ディレクトリがまだ存在しない場合は、作成します。
CSS ルールをディレクトリ内の新しいファイルに移動します。ファイル名は .css
で終わる必要があります。
スタイルシートが適用されるべきサイトを必ず指定してください。そのためには
@-moz-document
ルールを使用します。Stylish の wiki ページ 特定のサイトにスタイルを適用する が参考になるかもしれません。
:styles-reload
を実行して、新しいスタイルシートファイルを検出し、既存のスタイルシートファイルの変更を再読み込みします。
luakit を再起動する必要はありません。
スタイルメニューを開くには、:styles-list
コマンドを実行します。ここでできることは
スタイルシートを有効/無効にしたり、テキストエディタでスタイルシートを開いたり、どのスタイルシートが有効かを表示したりできます。
スタイルシートがすべてのページで無効になっている場合、その状態は "Disabled" と表示されます。 スタイルシートがすべてのページに対して有効であるが、現在のページには適用されない場合、"Enabled" と表示されます。 現在のページには適用されない場合、その状態は "Enabled" と表示されます。スタイルシートが すべてのページに対して有効であり、かつ現在のページに適用される場合、その状態は "Active" と表示されます。