diff --git a/cmd2.py b/cmd2.py index b885fa287..67f6c9bbf 100755 --- a/cmd2.py +++ b/cmd2.py @@ -1633,7 +1633,7 @@ def do_edit(self, arg): f.write(history_item or '') f.close() - os.system('%s %s' % (self.editor, filename)) + os.system('"{}" "{}"'.format(self.editor, filename)) if self.autorun_on_edit or history_item: self.do_load(filename) diff --git a/examples/transcript_regex.txt b/examples/transcript_regex.txt index 47357284b..31e731a99 100644 --- a/examples/transcript_regex.txt +++ b/examples/transcript_regex.txt @@ -1,5 +1,6 @@ # Run this transcript with "python example.py -t transcript_regex.txt" -# The regex for editor matches any word until first space. The one for colors is because no color on Windows. +# The regex for colors is because no color on Windows. +# The regex for editor will match whatever program you use. (Cmd) set abbrev: True autorun_on_edit: False @@ -7,7 +8,7 @@ colors: /(True|False)/ continuation_prompt: > debug: False echo: False -editor: /([^\s]+)/ +editor: /.*/ feedback_to_output: True locals_in_py: True maxrepeats: 3 diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py index 67dfacf46..9a88f45bc 100644 --- a/tests/test_cmd2.py +++ b/tests/test_cmd2.py @@ -736,7 +736,23 @@ def test_edit_file(base_app, request, monkeypatch): run_cmd(base_app, 'edit {}'.format(filename)) # We think we have an editor, so should expect a system call - m.assert_called_once_with('{} {}'.format(base_app.editor, filename)) + m.assert_called_once_with('"{}" "{}"'.format(base_app.editor, filename)) + +def test_edit_file_with_spaces(base_app, request, monkeypatch): + # Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock + base_app.editor = 'fooedit' + + # Mock out the os.system call so we don't actually open an editor + m = mock.MagicMock(name='system') + monkeypatch.setattr("os.system", m) + + test_dir = os.path.dirname(request.module.__file__) + filename = os.path.join(test_dir, 'my commands.txt') + + run_cmd(base_app, 'edit {}'.format(filename)) + + # We think we have an editor, so should expect a system call + m.assert_called_once_with('"{}" "{}"'.format(base_app.editor, filename)) def test_edit_number(base_app, monkeypatch): # Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock diff --git a/tests/transcript_regex.txt b/tests/transcript_regex.txt index 47357284b..c17638f42 100644 --- a/tests/transcript_regex.txt +++ b/tests/transcript_regex.txt @@ -1,5 +1,6 @@ # Run this transcript with "python example.py -t transcript_regex.txt" -# The regex for editor matches any word until first space. The one for colors is because no color on Windows. +# The regex for colors is because no color on Windows. +# The regex for editor will match whatever program you use. (Cmd) set abbrev: True autorun_on_edit: False @@ -7,7 +8,7 @@ colors: /(True|False)/ continuation_prompt: > debug: False echo: False -editor: /([^\s]+)/ +editor: /.*/ feedback_to_output: True locals_in_py: True maxrepeats: 3