Merge pull request #12120 from cladmi/pr/pyterm/configurable_repeat_command_on_empty_line

pyterm: configuring repeating command on empty line
This commit is contained in:
Alexandre Abadie 2019-09-10 09:41:05 +02:00 committed by GitHub
commit abd1cd51b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -94,6 +94,9 @@ defaultnewline = "LF"
# default prompt character # default prompt character
defaultprompt = '>' defaultprompt = '>'
# repeat command on empty line instead of sending the line
defaultrepeat_cmd_empty_line = True
class SerCmd(cmd.Cmd): class SerCmd(cmd.Cmd):
"""Main class for pyterm based on Python's Cmd class. """Main class for pyterm based on Python's Cmd class.
@ -105,7 +108,8 @@ class SerCmd(cmd.Cmd):
def __init__(self, port=None, baudrate=None, toggle=None, tcp_serial=None, def __init__(self, port=None, baudrate=None, toggle=None, tcp_serial=None,
confdir=None, conffile=None, host=None, run_name=None, confdir=None, conffile=None, host=None, run_name=None,
log_dir_name=None, newline=None, formatter=None, log_dir_name=None, newline=None, formatter=None,
set_rts=None, set_dtr=None, serprompt=None): set_rts=None, set_dtr=None, serprompt=None,
repeat_command_on_empty_line=defaultrepeat_cmd_empty_line):
"""Constructor. """Constructor.
Args: Args:
@ -134,6 +138,7 @@ class SerCmd(cmd.Cmd):
self.log_dir_name = log_dir_name self.log_dir_name = log_dir_name
self.newline = newline self.newline = newline
self.serprompt = serprompt self.serprompt = serprompt
self.repeat_command_on_empty_line = repeat_command_on_empty_line
if formatter is not None: if formatter is not None:
self.fmt_str = formatter self.fmt_str = formatter
@ -272,6 +277,16 @@ class SerCmd(cmd.Cmd):
return "PYTERM_" + line[1:] return "PYTERM_" + line[1:]
return line return line
def emptyline(self):
"""Either send empty line or repeat previous command.
Behavior can be configured with `repeat_command_on_empty_line`.
"""
if self.repeat_command_on_empty_line:
super().emptyline()
else:
self.default('')
def default(self, line): def default(self, line):
"""In case of no Pyterm specific prefix is detected, split """In case of no Pyterm specific prefix is detected, split
string by colons and send it to the node. string by colons and send it to the node.
@ -804,6 +819,18 @@ if __name__ == "__main__":
% defaultprompt, % defaultprompt,
default=defaultprompt) default=defaultprompt)
# Keep help message in sync if changing the default
parser.add_argument("--repeat-command-on-empty-line",
dest='repeat_command_on_empty_line',
action='store_true',
help="Repeat command on empty line (Default)")
parser.add_argument("--no-repeat-command-on-empty-line",
dest='repeat_command_on_empty_line',
action="store_false",
help="Do not repeat command on empty line")
parser.set_defaults(
repeat_command_on_empty_line=defaultrepeat_cmd_empty_line)
args = parser.parse_args() args = parser.parse_args()
if args.noprefix: if args.noprefix:
@ -811,7 +838,8 @@ if __name__ == "__main__":
myshell = SerCmd(args.port, args.baudrate, args.toggle, args.tcp_serial, myshell = SerCmd(args.port, args.baudrate, args.toggle, args.tcp_serial,
args.directory, args.config, args.host, args.run_name, args.directory, args.config, args.host, args.run_name,
args.log_dir_name, args.newline, args.format, args.log_dir_name, args.newline, args.format,
args.set_rts, args.set_dtr, args.prompt) args.set_rts, args.set_dtr, args.prompt,
args.repeat_command_on_empty_line)
myshell.prompt = '' myshell.prompt = ''
try: try: