mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-07 13:41:21 +00:00
add nushell support
This commit is contained in:
parent
c7e7e1d884
commit
ed084cf0ac
@ -10,6 +10,7 @@ from .generic import Generic
|
|||||||
from .tcsh import Tcsh
|
from .tcsh import Tcsh
|
||||||
from .zsh import Zsh
|
from .zsh import Zsh
|
||||||
from .powershell import Powershell
|
from .powershell import Powershell
|
||||||
|
from .nushell import Nushell
|
||||||
|
|
||||||
shells = {'bash': Bash,
|
shells = {'bash': Bash,
|
||||||
'fish': Fish,
|
'fish': Fish,
|
||||||
@ -17,7 +18,8 @@ shells = {'bash': Bash,
|
|||||||
'csh': Tcsh,
|
'csh': Tcsh,
|
||||||
'tcsh': Tcsh,
|
'tcsh': Tcsh,
|
||||||
'powershell': Powershell,
|
'powershell': Powershell,
|
||||||
'pwsh': Powershell}
|
'pwsh': Powershell,
|
||||||
|
'nu': Nushell}
|
||||||
|
|
||||||
|
|
||||||
def _get_shell_from_env():
|
def _get_shell_from_env():
|
||||||
|
72
thefuck/shells/nushell.py
Normal file
72
thefuck/shells/nushell.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
from subprocess import Popen, PIPE
|
||||||
|
import os
|
||||||
|
import six
|
||||||
|
import sys
|
||||||
|
from .. import logs
|
||||||
|
from ..utils import DEVNULL
|
||||||
|
from .generic import Generic
|
||||||
|
|
||||||
|
|
||||||
|
class Nushell(Generic):
|
||||||
|
friendly_name = 'Nushell Shell'
|
||||||
|
|
||||||
|
def get_aliases(self):
|
||||||
|
aliases = {}
|
||||||
|
command = 'help aliases | select name expansion | each { |row| $row.name + " ; " + $row.expansion } | str join (char nl)'
|
||||||
|
proc = Popen(['nu', '-l', '-c', command], stdout=PIPE, stderr=DEVNULL)
|
||||||
|
if proc.stdout is None:
|
||||||
|
return aliases
|
||||||
|
alias_out = proc.stdout.read().decode('utf-8').strip()
|
||||||
|
for alias in alias_out.split('\n'):
|
||||||
|
split_alias = alias.split(" ; ")
|
||||||
|
if len(split_alias) == 2:
|
||||||
|
name, value = split_alias
|
||||||
|
aliases[name] = value
|
||||||
|
return aliases
|
||||||
|
|
||||||
|
def app_alias(self, alias_name):
|
||||||
|
return 'alias {0} = thefuck $"(history | last 1 | get command | get 0)"'.format(alias_name)
|
||||||
|
|
||||||
|
def _get_history_file_name(self):
|
||||||
|
return os.path.expanduser('~/.config/nushell/history.txt')
|
||||||
|
|
||||||
|
def _get_history_line(self, command_script):
|
||||||
|
return command_script
|
||||||
|
|
||||||
|
def and_(self, *commands):
|
||||||
|
return u' and '.join(commands)
|
||||||
|
|
||||||
|
def or_(self, *commands):
|
||||||
|
return u' or '.join(commands)
|
||||||
|
|
||||||
|
def how_to_configure(self):
|
||||||
|
return self._create_shell_configuration(
|
||||||
|
content='alias fuck = thefuck $"(history | last 1 | get command | get 0)"',
|
||||||
|
path="$nu.config-path",
|
||||||
|
reload="source $nu.config-path"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _script_from_history(self, line):
|
||||||
|
return line
|
||||||
|
|
||||||
|
def put_to_history(self, command):
|
||||||
|
"""Adds fixed command to shell history."""
|
||||||
|
try:
|
||||||
|
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)
|
||||||
|
if six.PY2:
|
||||||
|
history.write(entry.encode('utf-8'))
|
||||||
|
else:
|
||||||
|
history.write(entry)
|
||||||
|
except IOError:
|
||||||
|
logs.exception("Can't update history", sys.exc_info())
|
||||||
|
|
||||||
|
def _get_version(self):
|
||||||
|
"""Returns the version of the current shell"""
|
||||||
|
proc = Popen(['nu', '--version'], stdout=PIPE, stderr=DEVNULL)
|
||||||
|
if proc.stdout:
|
||||||
|
return proc.stdout.read().decode('utf-8')
|
||||||
|
else:
|
||||||
|
raise Exception("Could not get the version of the current shell")
|
@ -1,5 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
from .shells import Nushell
|
||||||
from . import logs
|
from . import logs
|
||||||
from .shells import shell
|
from .shells import shell
|
||||||
from .conf import settings, load_source
|
from .conf import settings, load_source
|
||||||
@ -257,5 +259,10 @@ class CorrectedCommand(object):
|
|||||||
# This depends on correct setting of PYTHONIOENCODING by the alias:
|
# This depends on correct setting of PYTHONIOENCODING by the alias:
|
||||||
logs.debug(u'PYTHONIOENCODING: {}'.format(
|
logs.debug(u'PYTHONIOENCODING: {}'.format(
|
||||||
os.environ.get('PYTHONIOENCODING', '!!not-set!!')))
|
os.environ.get('PYTHONIOENCODING', '!!not-set!!')))
|
||||||
|
script = self._get_script()
|
||||||
sys.stdout.write(self._get_script())
|
if isinstance(shell, Nushell):
|
||||||
|
# TODO: fix for better option, the lack of '-l' flag
|
||||||
|
# means we lose any ENV that could be needed
|
||||||
|
subprocess.run(["nu", "-c", script])
|
||||||
|
else:
|
||||||
|
sys.stdout.write(script)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user