libreadlineの角かっこ貼り付けモードをプログラムで無効にする方法

libreadlineの角かっこ貼り付けモードをプログラムで無効にする方法

libreadlineバージョン8.1以降、「角かっこ貼り付け」操作は基本的に特別に処理されます。これは私のプログラムの解析を中断するので、無効にしたいと思います。

この行を/ etc / inputrcに追加すると、グローバルに無効にできることがわかります。

   set enable-bracketed-paste off

~/.inputrcに同じ行を追加してユーザーごとに無効にできることを知っています。

私はコマンドが次のプログラムに従って修正されることができることを知っています。

   $if Progname
        set enable-bracketed-paste off
   $endif

ただし、これらのオプションを使用するには、システム管理者またはユーザーの処置が必要です。プログラム自体から入るときにこのモードを無効にしたいと思います。 readlineドキュメントによるとrl_startup_hook is the address of a function to call just before readline prints the first prompt。私はこれが次のコードが私が望むことをする必要があることを意味すると思います。

int my_readline_init(void) {
    char *command = strdup("set enable-bracketed-paste off");
    rl_parse_and_bind(command);
    free(command);
}
rl_startup_hook = my_readline_init;

init ルーチンにデバッグラインまたはトレースポイントを追加すると、実際に呼び出されることがわかります。しかし、(1)初めてだけでなく、すべての入力ラインで呼び出され、(2)所望の効果はない。つまり、括弧内の貼り付け処理はオフになりません。私は何が間違っていましたか?

答え1

ついにこの解決策を見つけました。

if (RL_VERSION_MAJOR >= 8)
    rl_variable_bind ("enable-bracketed-paste", "off");

関連情報