diff --git a/tests/test_shells.py b/tests/test_shells.py index 73fc15c6..e3eae08f 100644 --- a/tests/test_shells.py +++ b/tests/test_shells.py @@ -116,18 +116,34 @@ class TestFish(object): def Popen(self, mocker): mock = mocker.patch('thefuck.shells.Popen') mock.return_value.stdout.read.return_value = ( - b'fish_config\nfuck\nfunced\nfuncsave\ngrep\nhistory\nll\nmath') + b'cd\nfish_config\nfuck\nfunced\nfuncsave\ngrep\nhistory\nll\nls\n' + b'man\nmath\npopd\npushd\nruby') return mock + @pytest.fixture + def environ(self, monkeypatch): + data = {'TF_OVERRIDDEN_ALIASES': 'cd, ls, man, open'} + monkeypatch.setattr('thefuck.shells.os.environ', data) + return data + + @pytest.mark.usefixture('environ') + def test_get_overridden_aliases(self, shell, environ): + assert shell._get_overridden_aliases() == ['cd', 'ls', 'man', 'open'] + @pytest.mark.parametrize('before, after', [ + ('cd', 'cd'), ('pwd', 'pwd'), ('fuck', 'fish -ic "fuck"'), ('find', 'find'), ('funced', 'fish -ic "funced"'), + ('grep', 'grep'), ('awk', 'awk'), ('math "2 + 2"', r'fish -ic "math \"2 + 2\""'), + ('man', 'man'), + ('open', 'open'), ('vim', 'vim'), - ('ll', 'fish -ic "ll"')]) # Fish has no aliases but functions + ('ll', 'fish -ic "ll"'), + ('ls', 'ls')]) # Fish has no aliases but functions def test_from_shell(self, before, after, shell): assert shell.from_shell(before) == after @@ -149,10 +165,12 @@ class TestFish(object): 'fuck': 'fuck', 'funced': 'funced', 'funcsave': 'funcsave', - 'grep': 'grep', 'history': 'history', 'll': 'll', - 'math': 'math'} + 'math': 'math', + 'popd': 'popd', + 'pushd': 'pushd', + 'ruby': 'ruby'} def test_app_alias(self, shell): assert 'function fuck' in shell.app_alias() diff --git a/thefuck/shells.py b/thefuck/shells.py index c16f4a21..337e14be 100644 --- a/thefuck/shells.py +++ b/thefuck/shells.py @@ -106,10 +106,18 @@ class Bash(Generic): class Fish(Generic): + + def _get_overridden_aliases(self): + overridden_aliases = os.environ.get('TF_OVERRIDDEN_ALIASES', '').strip() + if overridden_aliases: + return [alias.strip() for alias in overridden_aliases.split(',')] + else: + return ['cd', 'grep', 'ls', 'man', 'open'] + def app_alias(self): - return ("function fuck -d 'Correct your previous console command'\n" + return ("set TF_ALIAS fuck\n" + "function fuck -d 'Correct your previous console command'\n" " set -l exit_code $status\n" - " set -l TF_ALIAS fuck\n" " set -l eval_script" " (mktemp 2>/dev/null ; or mktemp -t 'thefuck')\n" " set -l fucked_up_commandd $history[1]\n" @@ -122,10 +130,11 @@ class Fish(Generic): "end") def get_aliases(self): + overridden = self._get_overridden_aliases() proc = Popen('fish -ic functions', stdout=PIPE, stderr=DEVNULL, shell=True) functions = proc.stdout.read().decode('utf-8').strip().split('\n') - return {function: function for function in functions} + return {func: func for func in functions if func not in overridden} def _expand_aliases(self, command_script): aliases = self.get_aliases()