CorvusSKKのinit.luaをカスタマイズする
ネットで検索をかけた範囲では見つけられなかったので試行錯誤した備忘録。
init.lua
CorvusSKKはlisp形式の辞書を指定できますが、公式で「もどき」と書いてあるように、 skk-relative-date
などの関数はluaで定義されています。
なので、luaで自作の関数を作ってカスタマイズすることが可能です。
ここでは一例として、 ymd240401
→ 4月1日(月)
のように〈曜日を補完した日付変換〉を実装してみます。
関数を作る
CorvusSKKをインストールすると %SystemRoot%\IME\IMCRVSKK\init.lua
が作られるので、これを %APPDATA%\CorvusSKK
にコピーしましょう。
init.luaにこのような関数を追加します。
local function yymmdd_to_short_date(t)
local ymd = t[1]
local yy = "20" .. tostring(ymd:sub(1, 2))
local mm = tostring(ymd:sub(3, 4))
local dd = tostring(ymd:sub(5, 6))
local ww = os.date("%a", os.time({year=yy,month=mm,day=dd}))
return string.format("%d月%d日(%s)", mm, dd, ww)
end
引数 t
は、辞書からスペース区切りで渡された引数が格納されるテーブルです。
(luaなのでインデックスが1始まり)
辞書から呼び出せるようにする
SKK辞書から呼び出すためには skk_gadget_func_table_org
に登録します。
テーブルのキーが辞書上での関数名になるようです。
辞書に登録する
abbrevモードで ymd240303
のように入力して何回かスペースを押して辞書登録バッファが表示されたら、 (yymmdd-to-short-date #0)
のように入力して登録します。
これで、ymd240707
→ 7月7日(日)
のような変換が可能になります。
応用
もっと簡単に曜日を補完
下記の関数を to-short-date-of-this-year
という名前で skk_gadget_func_table_org
に登録して、
local function to_short_date_of_this_year(t)
local yy = os.date("%Y")
local mm = t[1]
local dd = t[2]
local ww = os.date("%a", os.time({year=yy,month=mm,day=dd}))
return string.format("%d月%d日(%s)", mm, dd, ww)
end
#m#
に (to-short-date-of-this-year #0 #0)
を登録すると、3m4
を 3月4日(月)
のように変換できるようになります(実行時の年で計算するので年をまたぐときは要注意)。
n 日前(後)のタイムスタンプを簡単に出す
local function day_delta(fmt, diff)
local yy = tostring(os.date("%Y"))
local mm = tostring(os.date("%m"))
local dd = tostring(tonumber(os.date("%d")) + tonumber(diff))
local f = tostring(os.date(fmt, os.time({year=yy,month=mm,day=dd})))
return string.gsub(string.gsub(f, "年0", "年"), "月0", "月")
end
local function skk_day_minus(t)
local fmt = t[1]
local diff = -1 * tonumber(t[2])
return day_delta(fmt, diff)
end
このように定義した関数を skk_gadget_func_table_org
に登録して、dminus#0
に (skk-day-minus "%Y%m%d" #0)
を辞書登録すると、たとえば dminus3
を 20240301
(3日前の日付)に変換できるようになります。
おまけ:辞書管理プロセスのリロード
上記のように辞書管理プロセスのリロードをGUIからマウスでポチポチ行うのは結構手間です。
要はプロセスを再起動すればいいのでPowerShellでこのようなコマンドレットを $PROFILE
に書いています。
function Restart-CorvusSKK {
$proc = Get-Process | Where-Object {$_.Name -eq "imcrvmgr"}
if ($proc) {
$p = $proc.Path
$proc | Stop-Process -Force
Start-Process $p
}
}
最新状態はコチラ:
Discussion