如何阻止 rlwrap --remember 在完成列表中包含版本和版权信息?
How do I stop rlwrap --remember from including version and copyright messages in the completion list?
假设我像这样使用 rlwrap:rlwrap --remember sml
。这将启动新泽西州标准 ML:
Standard ML of New Jersey v110.79 [built: Sat Oct 26 12:27:04 2019]
-
如果我在提示符下输入Jer
,然后按Tab,rlwrap 会补全到Jersey
。我只想完成我输入的代码,而不是包含版本信息(and/or 版权信息)的行。使用 --remember
?
时,有没有办法从 rlwrap 的完成中排除这些行
这超出了“香草”rlwrap
的能力。但是,您可以使用 rlwrap
filter
轻松实现您想要的效果
一个 rlwrap
过滤器定义了一个或多个回调(“处理程序”),它们被调用,例如包装程序的输入和输出行。然后过滤器可以修改这些,或者(在您的情况下)将它们提供给“完成列表”(可能完成的列表)。这使得可以微调要完成的内容:
#!/usr/bin/env python3
"""A demo filter dat does the same as rlwrap's --remember option
with a few extra bells and whistles
Save this script as 'remember.py' sowewhere in RLWRAP_FILTERDIR and invoke as follows:
rlwrap -z remember.py sml
N.B. Don't use the --remember option in this case!
"""
import sys
import os
if 'RLWRAP_FILTERDIR' in os.environ:
sys.path.append(os.environ['RLWRAP_FILTERDIR'])
else:
sys.path.append('.')
import rlwrapfilter
filter = rlwrapfilter.RlwrapFilter()
filter.help_text = "Usage: rlwrap [-options] -z remember.py <command>\n"\
+ "a filter to selectively add <command>s in- and output to the completion list "
def feed_into_completion_list(message):
for word in message.split():
filter.add_to_completion_list(word)
# Input handler: use everything
def handle_input(message):
feed_into_completion_list(message)
return message
filter.input_handler = handle_input
# Output handler: use every output line not containing "Standard ML ..."
def handle_output(message):
if "Standard ML of New Jersey" not in message:
feed_into_completion_list(message)
return message
filter.output_handler = handle_output
# Start filter event loop:
filter.run()
在 --remember
的许多用例中,您可能希望限制进入完成列表的内容。如果是这样,这就是做到这一点的方法。
假设我像这样使用 rlwrap:rlwrap --remember sml
。这将启动新泽西州标准 ML:
Standard ML of New Jersey v110.79 [built: Sat Oct 26 12:27:04 2019]
-
如果我在提示符下输入Jer
,然后按Tab,rlwrap 会补全到Jersey
。我只想完成我输入的代码,而不是包含版本信息(and/or 版权信息)的行。使用 --remember
?
这超出了“香草”rlwrap
的能力。但是,您可以使用 rlwrap
filter
一个 rlwrap
过滤器定义了一个或多个回调(“处理程序”),它们被调用,例如包装程序的输入和输出行。然后过滤器可以修改这些,或者(在您的情况下)将它们提供给“完成列表”(可能完成的列表)。这使得可以微调要完成的内容:
#!/usr/bin/env python3
"""A demo filter dat does the same as rlwrap's --remember option
with a few extra bells and whistles
Save this script as 'remember.py' sowewhere in RLWRAP_FILTERDIR and invoke as follows:
rlwrap -z remember.py sml
N.B. Don't use the --remember option in this case!
"""
import sys
import os
if 'RLWRAP_FILTERDIR' in os.environ:
sys.path.append(os.environ['RLWRAP_FILTERDIR'])
else:
sys.path.append('.')
import rlwrapfilter
filter = rlwrapfilter.RlwrapFilter()
filter.help_text = "Usage: rlwrap [-options] -z remember.py <command>\n"\
+ "a filter to selectively add <command>s in- and output to the completion list "
def feed_into_completion_list(message):
for word in message.split():
filter.add_to_completion_list(word)
# Input handler: use everything
def handle_input(message):
feed_into_completion_list(message)
return message
filter.input_handler = handle_input
# Output handler: use every output line not containing "Standard ML ..."
def handle_output(message):
if "Standard ML of New Jersey" not in message:
feed_into_completion_list(message)
return message
filter.output_handler = handle_output
# Start filter event loop:
filter.run()
在 --remember
的许多用例中,您可能希望限制进入完成列表的内容。如果是这样,这就是做到这一点的方法。