既に解決済となってしまったが、IBus-SKKと
GitHub - vim-skk/skkeleton: SKK implements for Vim/Neovim with denops.vimの併用のためには、skkeleton
でユーザ辞書を書き込まれるときCoding Cookieを書き込んでくれれば良いと思ったので、ソースを修正してみた。
元のコミットは Merge pull request #187 from vim-skk/update_for_kvからForkしてみた。
オプションが変更されいる
まず、オプションがいくつか変更されていて、エラーが出まくったので、変更しておいた。
2024-01-11~
- “globalJisyo” オプションと “globalJisyoEncoding” オプションの削除
- “userJisyo” オプションは “userDictionary” オプションに変更
- “immediatelyJisyoRW” オプションは “immediatelyDictionaryRW” オプションに変更
2024-01-10~
- 使用する辞書は “sources” オプションにより指定するように
2023-12-30~
- 補完の後処理と端末モードの相性が悪いので一旦無効化
call skkeleton#config({
- \'globalJisyo':"/usr/share/skk/SKK-JISYO.L",
- \'userJisyo':"~/.config/ibus-skk/user.dict",
+ \'globalDictionaries':["/usr/share/skk/SKK-JISYO.L"],
+ \'userDictionary':"~/.config/ibus-skk/user.dict.utf8",
・・・中略・・・
\'eggLikeNewline':v:true,
\'keepState':v:true,
- \'useSkkServer':v:true,
+ \'sources':["skk_dictionary", "skk_server"],
\'skkServerHost':"127.0.0.1",
\'skkServerPort':1178,
\'skkServerResEnc':"euc-jp",
\'skkServerReqEnc':"euc-jp",
\})
skkeleton
を修正
diff --git a/denops/skkeleton/dictionary.ts b/denops/skkeleton/dictionary.ts
index 7472ba2..9c2945f 100644
--- a/denops/skkeleton/dictionary.ts
+++ b/denops/skkeleton/dictionary.ts
@@ -5,6 +5,7 @@ import { RomanNum } from "./deps/roman.ts";
import { zip } from "./deps/std/collections.ts";
import type { CompletionData, RankData } from "./types.ts";
+export const condingCookie = ";;; -*- coding: utf-8 -*-";
export const okuriAriMarker = ";; okuri-ari entries.";
export const okuriNasiMarker = ";; okuri-nasi entries.";
diff --git a/denops/skkeleton/sources/user_dictionary.ts b/denops/skkeleton/sources/user_dictionary.ts
index 4551e34..d0cf61f 100644
--- a/denops/skkeleton/sources/user_dictionary.ts
+++ b/denops/skkeleton/sources/user_dictionary.ts
@@ -2,6 +2,7 @@ import { config } from "../config.ts";
import { getKanaTable } from "../kana.ts";
import type { CompletionData, RankData } from "../types.ts";
import {
+ condingCookie,
Dictionary as BaseDictionary,
HenkanType,
okuriAriMarker,
@@ -199,6 +200,7 @@ export class Dictionary implements UserDictionary {
a[0].localeCompare(b[0])
).map((e) => `${e[0]} /${e[1].join("/")}/`);
const data = [
+ [condingCookie],
[okuriAriMarker],
okuriAri,
[okuriNasiMarker],
非常に単純な修正だけど、軽く動かしてみた感じ、上手くいっている。
deno test -A
が上手くいかない
実際の動作はともあれ、deno test -A
で確認しようとするとエラーとなって上手くいかない。ちなみに、Javascript
の開発経験はあるものの、deno
の開発経験は0だ。
$ deno test -A
running 5 tests from ./denops/skkeleton/config_test.ts
egg like newline ... ok (1ms)
acceptIllegalResult ... ok (0ms)
immediatelyOkuriConvert ... ok (0ms)
keepMode (vim) ... FAILED (2ms)
keepMode (nvim) ... FAILED (0ms)
running 0 tests from ./denops/skkeleton/deps/denops_test.ts
running 11 tests from ./denops/skkeleton/dictionary_test.ts
・・・中略・・・
error: Error: Environment variable 'DENOPS_TEST_DENOPS_PATH' is required
throw new Error(
^
at https://deno.land/x/denops_test@v1.4.0/conf.ts:16:15
at orElse (https://deno.land/x/denops_test@v1.4.0/or_else.ts:6:12)
at getConfig (https://deno.land/x/denops_test@v1.4.0/conf.ts:15:32)
at withDenops (https://deno.land/x/denops_test@v1.4.0/with.ts:61:16)
at fn (https://deno.land/x/denops_test@v1.4.0/tester.ts:105:16)
FAILURES
FAILED | 32 passed (12 steps) | 20 failed (1s)
error: Test failed
vim-denops/deno-denops-test: 🌿 Test helper module for denops.vimにも環境変数、設定してね、とあるので以下のような .env を作成する。
.env
DENOPS_TEST_DENOPS_PATH=/home/arimasou16/.vim/plugged/denops.vim
DENOPS_TEST_VIM_EXECUTABLE=/usr/local/bin/vim
DENOPS_TEST_NVIM_EXECUTABLE=/usr/bin/nvim
しかし、同じエラー。source .env
してから、$DENOPS_TEST_DENOPS_PATH
に値が設定されているのを確認してから、実行しても駄目。
追記 2024-02-01
冷静に考えるとexport
付いてないのだからsource
したところで意味なく。その後、
export DENOPS_TEST_DENOPS_PATH=/home/arimasou16/.vim/plugged/denops.vim
export DENOPS_TEST_VIM_EXECUTABLE=/usr/local/bin/vim
export DENOPS_TEST_NVIM_EXECUTABLE=/usr/bin/nvim
してから、deno test -A
をしたら成功した。一度嵌ると何かアホみたいなことで躓く。
追記ここまで
Deno で環境変数を設定する方法 #Deno - Qiitaを見ると .env ファイルから読み込み可能とあるが、dotenv/mod.ts
は使ってなさそう。
前書き - Deno 日本語マニュアルを見ても良く分からなかったが(流し読みのせいもある)、 Deno Deployではdotenvを使えないを見ると、以下のような記述があった。
「Deno Deployではファイルシステム関連の機能はサポートしてない」とのことです。 なるほど。それならエラー出ますよね。
deployctlのドキュメントにありますが、–envオプションを使うことで.envファイルを読み込むことができます。
ということで、--env
オプションを付けて実行してみる。
$ deno test --env -A
running 5 tests from ./denops/skkeleton/config_test.ts
egg like newline ... ok (2ms)
acceptIllegalResult ... ok (0ms)
immediatelyOkuriConvert ... ok (0ms)
keepMode (vim) ... ok (244ms)
keepMode (nvim) ... ok (225ms)
running 0 tests from ./denops/skkeleton/deps/denops_test.ts
running 11 tests from ./denops/skkeleton/dictionary_test.ts
load new JisyoJson ...
SkkDictionary ... ok (4ms)
DenoKvDictionary ... ok (12ms)
・・・中略・・・
preedit test ... ok (0ms)
preedit with emoji ... ok (0ms)
ok | 52 passed (12 steps) | 0 failed
まじか、成功したぞ。
上記、マニュアルを読み、-A
が--allow-all
であることを知る。とはいえ、どこにも--env
については書かれてないなぁ。ともあれ、 .env ファイルによる環境変数の設定を行うという意味だろうか?多分、 .env ファイルで環境変数設定するの少数派なんだろうな。通常はどうやってるのだろうか。
--alow-
の確認
--allow-env
がないと、環境変数を読み取れないエラーが出る。
$ deno test --env --allow-read --allow-write --allow-net --allow-run
error: PermissionDenied: Requires env access to "DENOPS_TEST_DENOPS_PATH", run again with the --allow-env flag
return Deno.env.get(`DENOPS_TEST_${name}`);
^
at Object.getEnv [as get] (ext:runtime/30_os.js:104:10)
--allow-net
がないと、ネットワークアクセス出来ないエラーが出る。
$ deno test --env --allow-read --allow-write --allow-env
error: PermissionDenied: Requires net access to "127.0.0.1:0", run again with the --allow-net flag
--allow-run
がないと、サブプロセスが実行できないエラーが出る。
$ deno test --env --allow-read --allow-write --allow-env --allow-net
error: PermissionDenied: Requires run access to "/usr/bin/nvim", run again with the --allow-run flag
--allow-read
、--allow-write
がないと /tmp 領域だろうと、読めない書けない。
~/.skkeleton
に書き込めない
だが、テスト実行で、まだ気になることがあった。-A
を付けてるのにwarning(skkeleton): can't write userDictionary to ~/.skkeleton
というファイルを書き込めない警告(エラー)が出るのだ。
おりゃあ、と777にしても駄目。
$ ls -l ~/.skkeleton
-rwxrwxrwx 1 arimasou16 arimasou16 7368 6月 19 2023 /home/arimasou16/.skkeleton
警告を出しているときのエラーを見ると
NotFound: No such file or directory (os error 2): writefile '~/.skkeleton'
at async writeFile (ext:deno_fs/30_fs.js:901:7)
なので、ファイルを見れてないようだ。
- 試しにRemixをDenoで動かす。せっかくだからPrisma Data Proxy経由で。 #Deno - Qiita
- expand tilde to home-directory for language formatter command args · Issue #5538 · helix-editor/helix · GitHub
Denoとしてのパス解決仕様がどこに書かれているのか分からないが、上記、記事など見ると~
をDenoは解決してくれない?らしい。だから、エラーキャッチして警告どまりにしているんだな。
試しに
diff --git a/denops/skkeleton/config.ts b/denops/skkeleton/config.ts
index 905274e..c011d30 100644
--- a/denops/skkeleton/config.ts
+++ b/denops/skkeleton/config.ts
@@ -32,7 +32,7 @@ export const config: Omit<ConfigOptions, "globalDictionaries"> & {
skkServerResEnc: "euc-jp",
sources: ["skk_dictionary"],
usePopup: true,
- userDictionary: "~/.skkeleton",
+ userDictionary: "./.skkeleton",
};
type Validators = {
と相対パスにして、実行したところ、警告なく終了。作成されたファイルを見ると
.skkeleton
;;; -*- coding: utf-8 -*-
;; okuri-ari entries.
はg /剥/
おもu /思/
;; okuri-nasi entries.
あ /亜/
われ /我/
とちゃんとCoding Cookieを付けて出力された。
まあ、IBus-SKKの設定保存できるようになったのと、細かくソース見てないので、Denoどころか、TypeScriptすら怪しい人間なのでPRは出すのは止めよう。