diff --git a/README.md b/README.md index 565f66b7..58f6db66 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # The Fuck [![Build Status](https://travis-ci.org/nvbn/thefuck.svg)](https://travis-ci.org/nvbn/thefuck) -**Aliases changed in 1.34.** - Magnificent app which corrects your previous console command, inspired by a [@liamosaur](https://twitter.com/liamosaur/) [tweet](https://twitter.com/liamosaur/status/506975850596536320). @@ -106,29 +104,12 @@ sudo pip install thefuck [Or using an OS package manager (OS X, Ubuntu, Arch).](https://github.com/nvbn/thefuck/wiki/Installation) -And add to the `.bashrc` or `.bash_profile`(for OSX): +You should place this command in your `.bash_profile` or other startup script: ```bash -alias fuck='eval $(thefuck $(fc -ln -1)); history -r' +eval "$(thefuck-alias)" # You can use whatever you want as an alias, like for Mondays: -alias FUCK='fuck' -``` - -Or in your `.zshrc`: - -```bash -alias fuck='eval $(thefuck $(fc -ln -1 | tail -n 1)); fc -R' -``` - -If you are using `tcsh`: -```tcsh -alias fuck 'set fucked_cmd=`history -h 2 | head -n 1` && eval `thefuck ${fucked_cmd}`' -``` - -Alternatively, you can redirect the output of `thefuck-alias`: - -```bash -thefuck-alias >> ~/.bashrc +eval "$(thefuck-alias FUCK)" ``` [Or in your shell config (Bash, Zsh, Fish, Powershell).](https://github.com/nvbn/thefuck/wiki/Shell-aliases) @@ -143,6 +124,8 @@ To make them available immediately, run `source ~/.bashrc` (or your shell config sudo pip install thefuck --upgrade ``` +**Aliases changed in 1.34.** + ## How it works The Fuck tries to match a rule for the previous command, creates a new command diff --git a/tests/test_shells.py b/tests/test_shells.py index e3eae08f..cd98a909 100644 --- a/tests/test_shells.py +++ b/tests/test_shells.py @@ -44,9 +44,10 @@ class TestGeneric(object): assert shell.get_aliases() == {} def test_app_alias(self, shell): - assert 'alias fuck' in shell.app_alias() - assert 'thefuck' in shell.app_alias() - assert 'TF_ALIAS' in shell.app_alias() + 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' in shell.app_alias('fuck') def test_get_history(self, history_lines, shell): history_lines(['ls', 'rm']) @@ -97,9 +98,10 @@ class TestBash(object): 'll': 'ls -alF'} def test_app_alias(self, shell): - assert 'alias fuck' in shell.app_alias() - assert 'thefuck' in shell.app_alias() - assert 'TF_ALIAS' in shell.app_alias() + 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' in shell.app_alias('fuck') def test_get_history(self, history_lines, shell): history_lines(['ls', 'rm']) @@ -173,9 +175,10 @@ class TestFish(object): 'ruby': 'ruby'} def test_app_alias(self, shell): - assert 'function fuck' in shell.app_alias() - assert 'thefuck' in shell.app_alias() - assert 'TF_ALIAS' in shell.app_alias() + assert 'function fuck' in shell.app_alias('fuck') + assert 'function FUCK' in shell.app_alias('FUCK') + assert 'thefuck' in shell.app_alias('fuck') + assert 'TF_ALIAS' in shell.app_alias('fuck') @pytest.mark.usefixtures('isfile') @@ -222,9 +225,10 @@ class TestZsh(object): 'll': 'ls -alF'} def test_app_alias(self, shell): - assert 'alias fuck' in shell.app_alias() - assert 'thefuck' in shell.app_alias() - assert 'TF_ALIAS' in shell.app_alias() + 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' 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.py b/thefuck/shells.py index da5cfdae..fc8bb1af 100644 --- a/thefuck/shells.py +++ b/thefuck/shells.py @@ -4,11 +4,12 @@ methods. """ from collections import defaultdict +from psutil import Process from subprocess import Popen, PIPE from time import time -import os import io -from psutil import Process +import os +import sys from .utils import DEVNULL, memoize @@ -33,8 +34,8 @@ class Generic(object): """Prepares command for running in shell.""" return command_script - def app_alias(self): - return "\nalias fuck='TF_ALIAS=fuck eval $(thefuck $(fc -ln -1))'\n" + def app_alias(self, fuck): + return "alias {0}='TF_ALIAS={0} eval $(thefuck $(fc -ln -1))'".format(fuck) def _get_history_file_name(self): return '' @@ -74,9 +75,9 @@ class Generic(object): class Bash(Generic): - def app_alias(self): - return "\nTF_ALIAS=fuck alias fuck='eval $(thefuck $(fc -ln -1));" \ - " history -r'\n" + def app_alias(self, fuck): + return "TF_ALIAS={0} alias {0}='eval $(thefuck $(fc -ln -1));" \ + " history -r'".format(fuck) def _parse_alias(self, alias): name, value = alias.replace('alias ', '', 1).split('=', 1) @@ -113,9 +114,9 @@ class Fish(Generic): else: return ['cd', 'grep', 'ls', 'man', 'open'] - def app_alias(self): - return ("set TF_ALIAS fuck\n" - "function fuck -d 'Correct your previous console command'\n" + def app_alias(self, fuck): + return ("set TF_ALIAS {0}\n" + "function {0} -d 'Correct your previous console command'\n" " set -l exit_code $status\n" " set -l eval_script" " (mktemp 2>/dev/null ; or mktemp -t 'thefuck')\n" @@ -126,7 +127,7 @@ class Fish(Generic): " if test $exit_code -ne 0\n" " history --delete $fucked_up_commandd\n" " end\n" - "end") + "end").format(fuck) def get_aliases(self): overridden = self._get_overridden_aliases() @@ -158,10 +159,10 @@ class Fish(Generic): class Zsh(Generic): - def app_alias(self): - return "\nTF_ALIAS=fuck" \ - " alias fuck='eval $(thefuck $(fc -ln -1 | tail -n 1));" \ - " fc -R'\n" + def app_alias(self, fuck): + return "TF_ALIAS={0}" \ + " alias {0}='eval $(thefuck $(fc -ln -1 | tail -n 1));" \ + " fc -R'".format(fuck) def _parse_alias(self, alias): name, value = alias.split('=', 1) @@ -192,8 +193,10 @@ class Zsh(Generic): class Tcsh(Generic): - def app_alias(self): - return "\nalias fuck 'setenv TF_ALIAS fuck && set fucked_cmd=`history -h 2 | head -n 1` && eval `thefuck ${fucked_cmd}`'\n" + def app_alias(self, fuck): + return ("alias {0} 'setenv TF_ALIAS {0} && " + "set fucked_cmd=`history -h 2 | head -n 1` && " + "eval `thefuck ${fucked_cmd}`'").format(fuck) def _parse_alias(self, alias): name, value = alias.split("\t", 1) @@ -240,7 +243,10 @@ def to_shell(command): def app_alias(): - print(_get_shell().app_alias()) + alias = thefuck_alias() + if len(sys.argv) > 1: + alias = sys.argv[1] + print(_get_shell().app_alias(alias)) def thefuck_alias():