From 6daf687237508acf7e1868434a65ffb0555bad69 Mon Sep 17 00:00:00 2001 From: Matt Kotsenas Date: Tue, 15 Mar 2016 14:12:37 -0700 Subject: [PATCH] Add Powershell as a supported shell - There may be additional functionality to implement, but I've been running this way for a month with no known issues --- tests/shells/test_powershell.py | 19 +++++++++++++++++++ thefuck/shells/__init__.py | 4 +++- thefuck/shells/powershell.py | 18 ++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/shells/test_powershell.py create mode 100644 thefuck/shells/powershell.py diff --git a/tests/shells/test_powershell.py b/tests/shells/test_powershell.py new file mode 100644 index 00000000..d1e7a874 --- /dev/null +++ b/tests/shells/test_powershell.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +import pytest +from thefuck.shells import Powershell + + +@pytest.mark.usefixtures('isfile', 'no_memoize', 'no_cache') +class TestPowershell(object): + @pytest.fixture + def shell(self): + return Powershell() + + def test_and_(self, shell): + assert shell.and_('ls', 'cd') == '(ls) -and (cd)' + + def test_app_alias(self, shell): + assert 'function fuck' in shell.app_alias('fuck') + assert 'function FUCK' in shell.app_alias('FUCK') + assert 'thefuck' in shell.app_alias('fuck') diff --git a/thefuck/shells/__init__.py b/thefuck/shells/__init__.py index 4a75b826..79fb66c8 100644 --- a/thefuck/shells/__init__.py +++ b/thefuck/shells/__init__.py @@ -9,12 +9,14 @@ from .fish import Fish from .generic import Generic from .tcsh import Tcsh from .zsh import Zsh +from .powershell import Powershell shells = {'bash': Bash, 'fish': Fish, 'zsh': Zsh, 'csh': Tcsh, - 'tcsh': Tcsh} + 'tcsh': Tcsh, + 'powershell': Powershell} def _get_shell(): diff --git a/thefuck/shells/powershell.py b/thefuck/shells/powershell.py new file mode 100644 index 00000000..fd0095ff --- /dev/null +++ b/thefuck/shells/powershell.py @@ -0,0 +1,18 @@ +from .generic import Generic + + +class Powershell(Generic): + def app_alias(self, fuck): + return 'function ' + fuck + ' { \n' \ + ' $fuck = $(thefuck (Get-History -Count 1).CommandLine)\n' \ + ' if (-not [string]::IsNullOrWhiteSpace($fuck)) {\n' \ + ' if ($fuck.StartsWith("echo")) { $fuck = $fuck.Substring(5) }\n' \ + ' else { iex "$fuck" }\n' \ + ' }\n' \ + '}\n' + + def and_(self, *commands): + return u' -and '.join('({0})'.format(c) for c in commands) + + def how_to_configure(self): + return 'iex "thefuck --alias"', '$profile'