Luakit

提供: ArchWiki
移動先: 案内検索

Luakit は極めて高速かつ軽量で、柔軟性のあるウェブブラウザです。WebKit エンジンを使っています。Lua スクリプトでカスタマイズすることができ、キーボードショートカットで完全に操作することが可能です。オリジナルのバージョンは更新が止まっておりセキュリティに問題がありますが、GTK+3 と WebKit2GTK+ を使用するフォークは活発に開発されています。

インストール

AUR から luakit-gitAUR パッケージをインストールしてください。

警告: オリジナルの Luakit が使用している WebKit ポートはセキュアでない古いバージョンです。別のブラウザを使うことが推奨されます。詳しくは こちら を参照。

Unix 哲学に従って、Luakit では設定ファイルであらゆることをカスタマイズすることができます。設定ファイルは Lua スクリプト言語で書かれているため、どんなことでも出来ます。

まず、設定ファイルをコピーしてください:

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

設定ファイルを編集してブラウザを好きなように設定してください。Lua についてよく知らなくても、設定は単純でコメントが付いているため、簡単に理解できるはずです。

基本的な使い方

ノート: ほとんどのショートカットは ~/.config/luakit/binds.lua から確認することができ、カスタマイズも可能です。

コマンドプロンプトにアクセスするには : を押します。ほとんど全てのことはコマンドプロンプトから行えます。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 を検索)。
  • 一般的なショートカットで移動します。emacsvimファンなら、標準的なショートカットが利用できます。マウスを使うこともできます。
  • 表示されているリンクのインデックスを表示するには f を使います。適当な数字や文字列の一部を入力するとリンクを開きます。
  • Shift+f を使うとリンクを新しいタブで開きます。
  • Ctrl+t を押すと新しいタブが開き、Ctrl+w で閉じます。t を押すと URI のプロンプトが表示され新しいタブで開かれます。Shift+t で新しいタブで現在の URI を編集します。
  • w を押すと新しいウィンドウで開く URI のプロンプトが現れ、Shift+w で新しいウィンドウで現在の URI を編集できます。
  • g を押してから t あるいは Shift+t、または Ctrl+PageUpCtrl+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)。

設定

ホームページ

ホームページは以下のように設定します:

~/.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/luakitadblock.luaadblock_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 の有効リストの情報は :adblockluakit://adblock/ の内部ページで g Shift+a を使うことで確認できます。ただし adblock_chrome モジュールが有効になっている必要があります。これは必須ではありません。

ノート: normal モードで AdBlock を使用するには easylist.txt などを ~/.local/share/luakit/adblock に配置してください。

Luakit の AdBlock プラグインは Luakit Plugins プロジェクトの一部として使うこともできます。

ブックマークの管理

同期

バージョン 2012.09.13 から、Luakit のブックマークは SQLite データベースに保存されています: ~/.local/share/luakit/bookmarks.db

デフォルトファイルの場所にシンボリックリンクを作成することでマシンのどこにでもブックマークを保存できます。Dropbox などのクラウド同期アプリケーションを使うことで、ブックマークを複数のコンピュータ間で同期させることも可能です。

プレーンテキストのブックマークを SQLite フォーマットに変換

ブックマークはシンプルなプレーンテキストファイルで保存されていました: ~/.local/share/luakit/bookmarks。各行がブックマークです。2つのフィールド linkgroup からなり、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 からインポート

ノート: 以下のブックマークが使えるのは 2012.03.25 以前のバージョンの Luakit までです。新しいバージョンでは、スクリプトを実行してから、生成されたプレーンテキストのブックマークを SQLite フォーマットに変換する必要があります。#プレーンテキストのブックマークを SQLite フォーマットに変換を参照。

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
警告: To be sure of anonymity, you also need to change settings within Luakit, such as disabling Flash and changing the useragent string.

カスタム CSS

Luakit のデータディレクトリの styles サブディレクトリ (存在しない場合は作成してください) に CSS ファイルを置いて下さい。例えば、テキスト入力エリアに等幅フォントを設定したい場合:

~/.local/share/luakit/styles/custom.css
input,textarea,select {
  font-family: DejaVu Sans Mono,Consolas,Monaco,Lucida Console,Liberation Mono,Bitstream Vera Sans Mono,Courier New, monospace;
}

そして globals.luauser_stylesheet_uri 変数で CSS ファイルの場所を指定します:

~/.config/luakit/globals.lua
domain_props = {
    ["all"] = {
        ...
        user_stylesheet_uri = "file://" .. luakit.data_dir .. "/styles/custom.css",
        ...
    },
    ...
}

参照