Skip to content
forked from nvbn/thefuck

Magnificent app which corrects your previous console command.

Notifications You must be signed in to change notification settings

moses-rolston/thefuck

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The Fuck Build Status

Magnificent app which corrects your previous console command, inspired by @liamosaur twit.

Few examples:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim
[sudo] password for nvbn:
Reading package lists... Done
...

➜ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master


➜ fuck
git push --set-upstream origin master
Counting objects: 9, done.
...

➜ puthon
No command 'puthon' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
 Command 'python' from package 'python3' (main)
zsh: command not found: puthon

➜ fuck
python
Python 3.4.2 (default, Oct  8 2014, 13:08:17)
...

➜ git brnch
git: 'brnch' is not a git command. See 'git --help'.

Did you mean this?
	branch

➜ fuck
git branch
* master

Installation

Install The Fuck:

sudo pip install thefuck

And add to .bashrc or .zshrc:

alias fuck='$(thefuck $(fc -ln -1))'

Or in config.fish:

function fuck
    thefuck $history[2] | source
end

How it works

The Fuck tries to match rule for the previous command, create new command using matched rule and run it. Rules enabled by default:

  • git_no_command – fixes wrong git commands like git brnch;
  • git_push – adds --set-upstream origin $branch to previous failed git push;
  • no_command – fixes wrong console commands, for example vom/vim;
  • sudo – prepends sudo to previous command if it failed because of permissions.

Creating your own rules

For adding your own rule you should create your-rule-name.py in ~/.thefuck/rules. Rule should contain two functions: match(command: Command, settings: Settings) -> bool and get_new_command(command: Command, settings: Settings) -> str.

Command have three attributes: script, stdout and stderr.

Settings is ~/.thefuck/settings.py.

Simple example of the rule for running script with sudo:

def match(command, settings):
    return ('permission denied' in command.stderr.lower()
            or 'EACCES' in command.stderr)


def get_new_command(command, settings):
    return 'sudo {}'.format(command.script)

More examples of rules, utility functions for rules.

Settings

The Fuck have a few settings parameters:

  • rules – list of enabled rules, by default all;
  • command_not_found – path to command_not_found binary, by default /usr/lib/command-not-found.

Developing

Install The Fuck for development:

pip install -r requirements.txt
python setup.py develop

Run tests:

py.test

License MIT

About

Magnificent app which corrects your previous console command.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%