Fix fish shell aliasing (#753)
* Handle user defined fish aliases * Add more aliases to test * Revert unecessary Popen mock changes * Add test for fish aliasing Fixes #727
This commit is contained in:
committed by
Joseph Frazier
parent
045c8ae76c
commit
83e1710712
+20
-3
@@ -10,12 +10,24 @@ from .generic import Generic
|
||||
|
||||
|
||||
@cache('~/.config/fish/config.fish', '~/.config/fish/functions')
|
||||
def _get_aliases(overridden):
|
||||
def _get_functions(overridden):
|
||||
proc = Popen(['fish', '-ic', 'functions'], stdout=PIPE, stderr=DEVNULL)
|
||||
functions = proc.stdout.read().decode('utf-8').strip().split('\n')
|
||||
return {func: func for func in functions if func not in overridden}
|
||||
|
||||
|
||||
@cache('~/.config/fish/config.fish')
|
||||
def _get_aliases(overridden):
|
||||
aliases = {}
|
||||
proc = Popen(['fish', '-ic', 'alias'], stdout=PIPE, stderr=DEVNULL)
|
||||
alias_out = proc.stdout.read().decode('utf-8').strip().split('\n')
|
||||
for alias in alias_out:
|
||||
name, value = alias.replace('alias ', '', 1).split(' ', 1)
|
||||
if name not in overridden:
|
||||
aliases[name] = value
|
||||
return aliases
|
||||
|
||||
|
||||
class Fish(Generic):
|
||||
def _get_overridden_aliases(self):
|
||||
overridden = os.environ.get('THEFUCK_OVERRIDDEN_ALIASES',
|
||||
@@ -44,12 +56,17 @@ class Fish(Generic):
|
||||
|
||||
def get_aliases(self):
|
||||
overridden = self._get_overridden_aliases()
|
||||
return _get_aliases(overridden)
|
||||
functions = _get_functions(overridden)
|
||||
raw_aliases = _get_aliases(overridden)
|
||||
functions.update(raw_aliases)
|
||||
return functions
|
||||
|
||||
def _expand_aliases(self, command_script):
|
||||
aliases = self.get_aliases()
|
||||
binary = command_script.split(' ')[0]
|
||||
if binary in aliases:
|
||||
if binary in aliases and aliases[binary] != binary:
|
||||
return command_script.replace(binary, aliases[binary], 1)
|
||||
elif binary in aliases:
|
||||
return u'fish -ic "{}"'.format(command_script.replace('"', r'\"'))
|
||||
else:
|
||||
return command_script
|
||||
|
||||
Reference in New Issue
Block a user