Readline手册在此处描述了可用的条件构造。特别是手册说
应用程序构造用于包括特定于应用程序的设置。使用Readline库的每个程序都会设置应用程序名称,您可以测试特定的值。这可用于将键序列绑定到对特定程序有用的功能。例如,以下命令添加了一个键序列,该键序列引用Bash中的当前单词或上一个单词:
$if Bash
# Quote the current or previous word "\C-xq": "\eb\"\ef\""
$endif
给定使用readline库的应用程序,如何找出它为“应用程序名称”设置的值?
理想的解决方案是阅读该应用程序的文档,这无疑会在中的告诉您readline。(是的,这是个玩笑。)
这是一种可行的技术:
带有调试符号的应用程序的成绩单:
$ gdb the_application
...
Reading symbols from /usr/local/bin/the_application...done.
(gdb) b rl_initialize
Breakpoint 1 at 0x496180: file readline.c, line 1050.
(gdb) r
Starting program: /usr/local/bin/the_application
Breakpoint 1, rl_initialize () at readline.c:1050
1050 {
(gdb) p rl_readline_name
$1 = 0x4d1fbb "TheApplication"
Run Code Online (Sandbox Code Playgroud)
没有调试符号的应用程序更可能的成绩单:
$ gdb the_application
...
Reading symbols from /bin/bash...(no debugging symbols found)...done.
(gdb) break rl_initialize
Breakpoint 1 at 0x48df40
(gdb) r
Starting program: /usr/bin/local/the_application
Breakpoint 1, 0x000000000048df40 in rl_initialize ()
(gdb) p (char*)rl_readline_name
$1 = 0x4b0bcb "TheApplication"
Run Code Online (Sandbox Code Playgroud)