diff --git a/tests/shells/test_fish.py b/tests/shells/test_fish.py index 9103d918..7dd46848 100644 --- a/tests/shells/test_fish.py +++ b/tests/shells/test_fish.py @@ -48,16 +48,6 @@ class TestFish(object): def test_to_shell(self, shell): assert shell.to_shell('pwd') == 'pwd' - @pytest.mark.parametrize('entry, entry_utf8', [ - ('ls', '- cmd: ls\n when: 1430707243\n'), - (u'echo café', '- cmd: echo café\n when: 1430707243\n')]) - def test_put_to_history(self, entry, entry_utf8, builtins_open, mocker, shell): - mocker.patch('thefuck.shells.fish.time', - return_value=1430707243.3517463) - shell.put_to_history(entry) - builtins_open.return_value.__enter__.return_value. \ - write.assert_called_once_with(entry_utf8) - def test_and_(self, shell): assert shell.and_('foo', 'bar') == 'foo; and bar' diff --git a/tests/shells/test_generic.py b/tests/shells/test_generic.py index a135ff8d..14712e13 100644 --- a/tests/shells/test_generic.py +++ b/tests/shells/test_generic.py @@ -15,11 +15,6 @@ class TestGeneric(object): def test_to_shell(self, shell): assert shell.to_shell('pwd') == 'pwd' - def test_put_to_history(self, builtins_open, shell): - assert shell.put_to_history('ls') is None - assert shell.put_to_history(u'echo café') is None - assert builtins_open.call_count == 0 - def test_and_(self, shell): assert shell.and_('ls', 'cd') == 'ls && cd' diff --git a/tests/shells/test_tcsh.py b/tests/shells/test_tcsh.py index 3aed208c..661e5610 100644 --- a/tests/shells/test_tcsh.py +++ b/tests/shells/test_tcsh.py @@ -31,16 +31,6 @@ class TestTcsh(object): def test_to_shell(self, shell): assert shell.to_shell('pwd') == 'pwd' - @pytest.mark.parametrize('entry, entry_utf8', [ - ('ls', '#+1430707243\nls\n'), - (u'echo café', '#+1430707243\necho café\n')]) - def test_put_to_history(self, entry, entry_utf8, builtins_open, shell, mocker): - mocker.patch('thefuck.shells.tcsh.time', - return_value=1430707243.3517463) - shell.put_to_history(entry) - builtins_open.return_value.__enter__.return_value. \ - write.assert_called_once_with(entry_utf8) - def test_and_(self, shell): assert shell.and_('ls', 'cd') == 'ls && cd' diff --git a/tests/shells/test_zsh.py b/tests/shells/test_zsh.py index d81bd808..0ea31f1c 100644 --- a/tests/shells/test_zsh.py +++ b/tests/shells/test_zsh.py @@ -30,16 +30,6 @@ class TestZsh(object): def test_to_shell(self, shell): assert shell.to_shell('pwd') == 'pwd' - @pytest.mark.parametrize('entry, entry_utf8', [ - ('ls', ': 1430707243:0;ls\n'), - (u'echo café', ': 1430707243:0;echo café\n')]) - def test_put_to_history(self, entry, entry_utf8, builtins_open, mocker, shell): - mocker.patch('thefuck.shells.zsh.time', - return_value=1430707243.3517463) - shell.put_to_history(entry) - builtins_open.return_value.__enter__.return_value. \ - write.assert_called_once_with(entry_utf8) - def test_and_(self, shell): assert shell.and_('ls', 'cd') == 'ls && cd' @@ -54,8 +44,7 @@ class TestZsh(object): assert 'alias fuck' in shell.app_alias('fuck') assert 'alias FUCK' in shell.app_alias('FUCK') assert 'thefuck' in shell.app_alias('fuck') - assert 'TF_ALIAS=fuck PYTHONIOENCODING' in shell.app_alias('fuck') - assert 'PYTHONIOENCODING=utf-8 thefuck' in shell.app_alias('fuck') + assert 'PYTHONIOENCODING' in shell.app_alias('fuck') def test_get_history(self, history_lines, shell): history_lines([': 1432613911:0;ls', ': 1432613916:0;rm']) diff --git a/thefuck/shells/bash.py b/thefuck/shells/bash.py index 52db1c4b..98349376 100644 --- a/thefuck/shells/bash.py +++ b/thefuck/shells/bash.py @@ -1,16 +1,21 @@ from subprocess import Popen, PIPE import os +from ..conf import settings from ..utils import DEVNULL, memoize, cache from .generic import Generic class Bash(Generic): def app_alias(self, fuck): - return "TF_ALIAS={0}" \ - " alias {0}='PYTHONIOENCODING=utf-8" \ - " TF_CMD=$(thefuck $(fc -ln -1)) && " \ - " eval $TF_CMD &&" \ - " history -s $TF_CMD'".format(fuck) + alias = "TF_ALIAS={0}" \ + " alias {0}='PYTHONIOENCODING=utf-8" \ + " TF_CMD=$(thefuck $(fc -ln -1)) && " \ + " eval $TF_CMD".format(fuck) + + if settings.alter_history: + return alias + " && history -s $TF_CMD'" + else: + return alias + "'" def _parse_alias(self, alias): name, value = alias.replace('alias ', '', 1).split('=', 1) @@ -34,10 +39,6 @@ class Bash(Generic): def _get_history_line(self, command_script): return u'{}\n'.format(command_script) - def put_to_history(self, command_script): - # handled by the alias - pass - def how_to_configure(self): if os.path.join(os.path.expanduser('~'), '.bashrc'): config = '~/.bashrc' diff --git a/thefuck/shells/generic.py b/thefuck/shells/generic.py index 248aab45..58ecf10b 100644 --- a/thefuck/shells/generic.py +++ b/thefuck/shells/generic.py @@ -2,11 +2,8 @@ import io import os import shlex import six -import sys - from ..utils import memoize from ..conf import settings -from .. import logs class Generic(object): @@ -39,23 +36,6 @@ class Generic(object): def _get_history_line(self, command_script): return '' - def put_to_history(self, command): - try: - return self._put_to_history(command) - except IOError: - logs.exception("Can't update history", sys.exc_info()) - - def _put_to_history(self, command_script): - """Puts command script to shell history.""" - history_file_name = self._get_history_file_name() - if os.path.isfile(history_file_name): - with open(history_file_name, 'a') as history: - entry = self._get_history_line(command_script) - if six.PY2: - history.write(entry.encode('utf-8')) - else: - history.write(entry) - @memoize def get_history(self): return list(self._get_history_lines()) diff --git a/thefuck/shells/zsh.py b/thefuck/shells/zsh.py index 058ca369..bea5fbe9 100644 --- a/thefuck/shells/zsh.py +++ b/thefuck/shells/zsh.py @@ -1,15 +1,21 @@ from subprocess import Popen, PIPE from time import time import os +from ..conf import settings from ..utils import DEVNULL, memoize, cache from .generic import Generic class Zsh(Generic): def app_alias(self, fuck): - return "alias {0}='eval $(TF_ALIAS={0} PYTHONIOENCODING=utf-8" \ - " thefuck $(fc -ln -1 | tail -n 1));" \ - " fc -R'".format(fuck) + alias = "alias {0}='TF_ALIAS={0} PYTHONIOENCODING=utf-8" \ + " TF_CMD=$(thefuck $(fc -ln -1 | tail -n 1)) &&" \ + " eval $TF_CMD".format(fuck) + + if settings.alter_history: + return alias + " && print -s $TF_CMD'" + else: + return alias + "'" def _parse_alias(self, alias): name, value = alias.split('=', 1) diff --git a/thefuck/types.py b/thefuck/types.py index 5fff1f4b..5e0e368d 100644 --- a/thefuck/types.py +++ b/thefuck/types.py @@ -279,8 +279,6 @@ class CorrectedCommand(object): """ if self.side_effect: compatibility_call(self.side_effect, old_cmd, self.script) - if settings.alter_history: - shell.put_to_history(self.script) # This depends on correct setting of PYTHONIOENCODING by the alias: logs.debug(u'PYTHONIOENCODING: {}'.format( os.environ.get('PYTHONIOENCODING', '>-not-set-<')))