タイトル画像

問題まとめ

こんにちは、dotfilesの魔改造が日常茶飯事の静カニです。 日常的に構成をいじるということは、日常的に謎のトラブルに直面するということでもあります。

今回は、最近踏んだ「原因は初歩的だけどハマると面倒な問題」を4つまとめておきます。 修正量は1〜2行なのに調査に時間を持っていかれた苦い思い出たちです。

「PREFIX」とあるコミットメッセージが貼り付られない問題

今回の本筋とは関係ないtmuxの設定ファイルをいじったときのコミットメッセージが、「PREFIXを押したり押さなかったりで事故ってたから表示しておく」です。 これが貼り付けられなかったのがこの問題です。 私が日本語のコミットメッセージを使うとき、Neovim内のlazygitでコミット画面を出した上にsway側でVIMEを召喚してコピーしてペーストするという手順で行っています。 初回できなかったため何度かやったところ、全てにおいて問題は再現しました。 このとき、日本語部分は記憶があやふやだったため若干の違いが出たものの、「PREFIX」が最初にあることについては全て共通していました。

解決

クリップボードの中身の型を確認できるwl-paste --list-typesを実行するとなぜかapplication/sparql-queryが出力されました。 wl-copyに標準入力からコピー文字列を指定すると型が自動的に判定されるようです(コマンドの引数としての場合は有無を言わせずtext/plain)。 先頭に大文字で「PREFIX」と書いてあったことで自動判定アルゴリズムのSPARQLのクエリに引っ掛かったのでしょう。 この型は何か害があるのか知りませんがセキュリティが厳しめの端末では貼り付けを拒否されるようです。 調べたところPREFIXはSPARQLクエリの一つでURIに別称を付けられるalias的なものっぽいです。SPARQLは怪しいのでしょうか。

コピー時に強制的に型をtext/plainに固定することで解決しました。オプションを一つ追加するだけですね。実際のコミットではこんな感じです。

-      ${coreutils_bin}/printf %s "$(${coreutils_bin}/cat "$FILE_PATH")" | ${pkgs.wl-clipboard}/bin/wl-copy
+      ${coreutils_bin}/printf %s "$(${coreutils_bin}/cat "$FILE_PATH")" | ${pkgs.wl-clipboard}/bin/wl-copy --type text/plain

存在しないオプションにフラグがいると言われる問題

今度はconfiguration.nixを整頓しているときのことです。一応評価結果が変わっていないことを確認するために、git diff HEAD^でとりあえずdiffを出そうとしました。 ここでError: flag needs an argument: 'm' in -mというメッセージを食らいました。 実行したコマンドには-mと書いていないので、aliasや環境変数を当たりましたが-mを追記するものはありませんでした。 それどころかgit diff --helpを当たっても小文字の-mは存在しません。

解決

gitのconfigを見に行ったところ、pagerの設定値がov -cmとなっていました。ov --helpを叩いたところ、-mオプションがフラグを要求するものでした。 メッセージと合致しますね。一応dotfiles内の状態を変更したくなかったのでgit -c diff.pager "less" diff HEAD^と叩いたところlessで正常に動作しました。 そのあと作業に一区切りをつけて設定値をきちんとov -cに修正しました。 実際のコミットではこうです。

-        pager = "${pkgs.ov}/bin/ov -cm";
+        pager = "${pkgs.ov}/bin/ov -c";

ログインがループする問題

またもやconfiguration.nixを整頓した後の話です。一行が長かったため、"... --cmd sway --theme ...""... --cmd sway"\n + "--theme ..."のように分割しました。 チェックして大丈夫そうだと思い、再起動をかけてみるとtuigreetの色が剥がれていました。さらにいつも通りPWを入れてももう一度ログイン画面が出てくるだけです。

解決

自作配列の不調の都合でF2が使えず焦りましたが、よく考えたら標準のF2も生きているのでそっちを押してChoose sessionしました。 出てきたcmdはswayではなく、sway--themeでした。+の前後に空白を入れ忘れてしまっていたことが分かりました。 Choose Sessionで修正したてログインしたあとdotfiles側も修正しました。実際のコミットはこれですね。

-          "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd sway"
+          "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd sway "
           + "--theme border=magenta;text=cyan;prompt=green;time=red;action=blue;button=yellow;container=black;input=red";

F数字が入力できない問題

先程露呈した、F1キーとかが入力できない問題です。(QWERTYでの)Qキーが機能layerで、これに対しては音量やVIMEが割り当てられています。 これとCキーを組み合わせると、ファンクションキーが入力できるということになっています。 ただこのとき、そもそもCキーを押すとFnキー相当のはずですから何も入力されないと思いきやcが出力されました。

解決

Cキーが単独で入力されてしまうことについては、Cキーに割り当てているlayer(fn_layer)の単独でセクションを作ってやると解決しました。 ですが、これでもファンクションキーの入力は叶いませんでした。そこで複合layerのfn_layer+function_layerfunction_layer+fn_layerに入れ替えたところ動きました。 まあとにかく実際のコミットはこちらです。

+          "fn_layer" = { };

-          "fn_layer+function_layer" = {
+          "function_layer+fn_layer" = {

まとめ

調査や問題が面倒だった割に修正コミットがかなり小さかった問題たちをまとめておきました。 本当に面倒なのでみなさんはこういう凡ミスはしないように気を付けましょう。