Metadata-Version: 1.0
Name: thefuck
Version: 3.24
Summary: Magnificent app which corrects your previous console command
Home-page: https://github.com/nvbn/thefuck
Author: Vladimir Iakovlev
Author-email: nvbn.rm@gmail.com
License: MIT
Description: The Fuck |Version| |Build Status| |Windows Build Status| |Coverage| |MIT License|
        =================================================================================
        
        Magnificent app which corrects your previous console command, inspired
        by a [@liamosaur](https://twitter.com/liamosaur/)
        `tweet <https://twitter.com/liamosaur/status/506975850596536320>`__.
        
        The Fuck is too slow? `Try experimental instant
        mode! <#experimental-instant-mode>`__
        
        |gif with examples|
        
        Few more examples:
        
        .. code:: bash
        
            ➜ 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 [enter/↑/↓/ctrl+c]
            [sudo] password for nvbn:
            Reading package lists... Done
            ...
        
        .. code:: bash
        
            ➜ 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 [enter/↑/↓/ctrl+c]
            Counting objects: 9, done.
            ...
        
        .. code:: bash
        
            ➜ 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 [enter/↑/↓/ctrl+c]
            Python 3.4.2 (default, Oct  8 2014, 13:08:17)
            ...
        
        .. code:: bash
        
            ➜ git brnch
            git: 'brnch' is not a git command. See 'git --help'.
        
            Did you mean this?
                branch
        
            ➜ fuck
            git branch [enter/↑/↓/ctrl+c]
            * master
        
        .. code:: bash
        
            ➜ lein rpl
            'rpl' is not a task. See 'lein help'.
        
            Did you mean this?
                     repl
        
            ➜ fuck
            lein repl [enter/↑/↓/ctrl+c]
            nREPL server started on port 54848 on host 127.0.0.1 - nrepl://127.0.0.1:54848
            REPL-y 0.3.1
            ...
        
        If you are not scared to blindly run the changed command, there is a
        ``require_confirmation`` `settings <#settings>`__ option:
        
        .. code:: bash
        
            ➜ 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
            ...
        
        Requirements
        ------------
        
        -  python (3.3+)
        -  pip
        -  python-dev
        
        Installation
        ------------
        
        On OS X you can install ``The Fuck`` with
        `Homebrew <http://brew.sh/>`__:
        
        .. code:: bash
        
            brew install thefuck
        
        On Ubuntu you can install ``The Fuck`` with:
        
        .. code:: bash
        
            sudo apt update
            sudo apt install python3-dev python3-pip
            sudo pip3 install thefuck
        
        On other systems you can install ``The Fuck`` with ``pip``:
        
        .. code:: bash
        
            pip install thefuck
        
        `Or using an OS package manager (OS X, Ubuntu,
        Arch). <https://github.com/nvbn/thefuck/wiki/Installation>`__
        
        # You should place this command in your ``.bash_profile``, ``.bashrc``,
        ``.zshrc`` or other startup script:
        
        .. code:: bash
        
            eval $(thefuck --alias)
            # You can use whatever you want as an alias, like for Mondays:
            eval $(thefuck --alias FUCK)
        
        `Or in your shell config (Bash, Zsh, Fish, Powershell,
        tcsh). <https://github.com/nvbn/thefuck/wiki/Shell-aliases>`__
        
        Changes will be available only in a new shell session. To make them
        available immediately, run ``source ~/.bashrc`` (or your shell config
        file like ``.zshrc``).
        
        If you want to run fixed command without confirmation you can use ``-y``
        option:
        
        .. code:: bash
        
            fuck -y
        
        If you want to fix commands recursively until success you can use ``-r``
        option:
        
        .. code:: bash
        
            fuck -r
        
        Update
        ------
        
        .. code:: bash
        
            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 using the matched rule and runs it. Rules enabled by default are
        as follows:
        
        -  ``ag_literal`` – adds ``-Q`` to ``ag`` when suggested;
        -  ``aws_cli`` – fixes misspelled commands like ``aws dynamdb scan``;
        -  ``cargo`` – runs ``cargo build`` instead of ``cargo``;
        -  ``cargo_no_command`` – fixes wrongs commands like ``cargo buid``;
        -  ``cd_correction`` – spellchecks and correct failed cd commands;
        -  ``cd_mkdir`` – creates directories before cd'ing into them;
        -  ``cd_parent`` – changes ``cd..`` to ``cd ..``;
        -  ``chmod_x`` – add execution bit;
        -  ``composer_not_command`` – fixes composer command name;
        -  ``cp_omitting_directory`` – adds ``-a`` when you ``cp`` directory;
        -  ``cpp11`` – adds missing ``-std=c++11`` to ``g++`` or ``clang++``;
        -  ``dirty_untar`` – fixes ``tar x`` command that untarred in the
           current directory;
        -  ``dirty_unzip`` – fixes ``unzip`` command that unzipped in the
           current directory;
        -  ``django_south_ghost`` – adds ``--delete-ghost-migrations`` to failed
           because ghosts django south migration;
        -  ``django_south_merge`` – adds ``--merge`` to inconsistent django
           south migration;
        -  ``docker_not_command`` – fixes wrong docker commands like
           ``docker tags``;
        -  ``dry`` – fixes repetitions like ``git git push``;
        -  ``fab_command_not_found`` – fix misspelled fabric commands;
        -  ``fix_alt_space`` – replaces Alt+Space with Space character;
        -  ``fix_file`` – opens a file with an error in your ``$EDITOR``;
        -  ``gem_unknown_command`` – fixes wrong ``gem`` commands;
        -  ``git_add`` – fixes *"pathspec 'foo' did not match any file(s) known
           to git."*;
        -  ``git_add_force`` – adds ``--force`` to ``git add <pathspec>...``
           when paths are .gitignore'd;
        -  ``git_bisect_usage`` – fixes ``git bisect strt``,
           ``git bisect goood``, ``git bisect rset``, etc. when bisecting;
        -  ``git_branch_delete`` – changes ``git branch -d`` to
           ``git branch -D``;
        -  ``git_branch_exists`` – offers ``git branch -d foo``,
           ``git branch -D foo`` or ``git checkout foo`` when creating a branch
           that already exists;
        -  ``git_branch_list`` – catches ``git branch list`` in place of
           ``git branch`` and removes created branch;
        -  ``git_checkout`` – fixes branch name or creates new branch;
        -  ``git_diff_no_index`` – adds ``--no-index`` to previous ``git diff``
           on untracked files;
        -  ``git_diff_staged`` – adds ``--staged`` to previous ``git diff`` with
           unexpected output;
        -  ``git_fix_stash`` – fixes ``git stash`` commands (misspelled
           subcommand and missing ``save``);
        -  ``git_flag_after_filename`` – fixes
           ``fatal: bad flag '...' after filename``
        -  ``git_help_aliased`` – fixes ``git help <alias>`` commands replacing
           with the aliased command;
        -  ``git_not_command`` – fixes wrong git commands like ``git brnch``;
        -  ``git_pull`` – sets upstream before executing previous ``git pull``;
        -  ``git_pull_clone`` – clones instead of pulling when the repo does not
           exist;
        -  ``git_pull_uncommitted_changes`` – stashes changes before pulling and
           pops them afterwards;
        -  ``git_push`` – adds ``--set-upstream origin $branch`` to previous
           failed ``git push``;
        -  ``git_push_different_branch_names`` – fixes pushes when local brach
           name does not match remote branch name;
        -  ``git_push_pull`` – runs ``git pull`` when ``push`` was rejected;
        -  ``git_push_without_commits`` – Creates an initial commit if you
           forget and only ``git add .``, when setting up a new project;
        -  ``git_rebase_no_changes`` – runs ``git rebase --skip`` instead of
           ``git rebase --continue`` when there are no changes;
        -  ``git_remote_delete`` – replaces ``git remote delete remote_name``
           with ``git remote remove remote_name``;
        -  ``git_rm_local_modifications`` – adds ``-f`` or ``--cached`` when you
           try to ``rm`` a locally modified file;
        -  ``git_rm_recursive`` – adds ``-r`` when you try to ``rm`` a
           directory;
        -  ``git_rm_staged`` – adds ``-f`` or ``--cached`` when you try to
           ``rm`` a file with staged changes
        -  ``git_rebase_merge_dir`` – offers
           ``git rebase (--continue | --abort | --skip)`` or removing the
           ``.git/rebase-merge`` dir when a rebase is in progress;
        -  ``git_remote_seturl_add`` – runs ``git remote add`` when
           ``git remote set_url`` on nonexistant remote;
        -  ``git_stash`` – stashes your local modifications before rebasing or
           switching branch;
        -  ``git_stash_pop`` – adds your local modifications before popping
           stash, then resets;
        -  ``git_tag_force`` – adds ``--force`` to ``git tag <tagname>`` when
           the tag already exists;
        -  ``git_two_dashes`` – adds a missing dash to commands like
           ``git commit -amend`` or ``git rebase -continue``;
        -  ``go_run`` – appends ``.go`` extension when compiling/running Go
           programs;
        -  ``gradle_no_task`` – fixes not found or ambiguous ``gradle`` task;
        -  ``gradle_wrapper`` – replaces ``gradle`` with ``./gradlew``;
        -  ``grep_arguments_order`` – fixes grep arguments order for situations
           like ``grep -lir . test``;
        -  ``grep_recursive`` – adds ``-r`` when you trying to ``grep``
           directory;
        -  ``grunt_task_not_found`` – fixes misspelled ``grunt`` commands;
        -  ``gulp_not_task`` – fixes misspelled ``gulp`` tasks;
        -  ``has_exists_script`` – prepends ``./`` when script/binary exists;
        -  ``heroku_not_command`` – fixes wrong ``heroku`` commands like
           ``heroku log``;
        -  ``history`` – tries to replace command with most similar command from
           history;
        -  ``hostscli`` – tries to fix ``hostscli`` usage;
        -  ``ifconfig_device_not_found`` – fixes wrong device names like
           ``wlan0`` to ``wlp2s0``;
        -  ``java`` – removes ``.java`` extension when running Java programs;
        -  ``javac`` – appends missing ``.java`` when compiling Java files;
        -  ``lein_not_task`` – fixes wrong ``lein`` tasks like ``lein rpl``;
        -  ``ln_no_hard_link`` – catches hard link creation on directories,
           suggest symbolic link;
        -  ``ln_s_order`` – fixes ``ln -s`` arguments order;
        -  ``ls_all`` – adds ``-A`` to ``ls`` when output is empty;
        -  ``ls_lah`` – adds ``-lah`` to ``ls``;
        -  ``man`` – changes manual section;
        -  ``man_no_space`` – fixes man commands without spaces, for example
           ``mandiff``;
        -  ``mercurial`` – fixes wrong ``hg`` commands;
        -  ``missing_space_before_subcommand`` – fixes command with missing
           space like ``npminstall``;
        -  ``mkdir_p`` – adds ``-p`` when you trying to create directory without
           parent;
        -  ``mvn_no_command`` – adds ``clean package`` to ``mvn``;
        -  ``mvn_unknown_lifecycle_phase`` – fixes misspelled lifecycle phases
           with ``mvn``;
        -  ``npm_missing_script`` – fixes ``npm`` custom script name in
           ``npm run-script <script>``;
        -  ``npm_run_script`` – adds missing ``run-script`` for custom ``npm``
           scripts;
        -  ``npm_wrong_command`` – fixes wrong npm commands like
           ``npm urgrade``;
        -  ``no_command`` – fixes wrong console commands, for example
           ``vom/vim``;
        -  ``no_such_file`` – creates missing directories with ``mv`` and ``cp``
           commands;
        -  ``open`` – either prepends ``http://`` to address passed to ``open``
           or create a new file or directory and passes it to ``open``;
        -  ``pip_unknown_command`` – fixes wrong ``pip`` commands, for example
           ``pip instatl/pip install``;
        -  ``php_s`` – replaces ``-s`` by ``-S`` when trying to run a local php
           server;
        -  ``port_already_in_use`` – kills process that bound port;
        -  ``prove_recursively`` – adds ``-r`` when called with directory;
        -  ``python_command`` – prepends ``python`` when you trying to run not
           executable/without ``./`` python script;
        -  ``python_execute`` – appends missing ``.py`` when executing Python
           files;
        -  ``quotation_marks`` – fixes uneven usage of ``'`` and ``"`` when
           containing args';
        -  ``path_from_history`` – replaces not found path with similar absolute
           path from history;
        -  ``react_native_command_unrecognized`` – fixes unrecognized
           ``react-native`` commands;
        -  ``remove_trailing_cedilla`` – remove trailling cedillas ``ç``, a
           common typo for european keyboard layouts;
        -  ``rm_dir`` – adds ``-rf`` when you trying to remove directory;
        -  ``scm_correction`` – corrects wrong scm like ``hg log`` to
           ``git log``;
        -  ``sed_unterminated_s`` – adds missing '/' to ``sed``'s ``s``
           commands;
        -  ``sl_ls`` – changes ``sl`` to ``ls``;
        -  ``ssh_known_hosts`` – removes host from ``known_hosts`` on warning;
        -  ``sudo`` – prepends ``sudo`` to previous command if it failed because
           of permissions;
        -  ``sudo_command_from_user_path`` – runs commands from users ``$PATH``
           with ``sudo``;
        -  ``switch_lang`` – switches command from your local layout to en;
        -  ``systemctl`` – correctly orders parameters of confusing
           ``systemctl``;
        -  ``test.py`` – runs ``py.test`` instead of ``test.py``;
        -  ``touch`` – creates missing directories before "touching";
        -  ``tsuru_login`` – runs ``tsuru login`` if not authenticated or
           session expired;
        -  ``tsuru_not_command`` – fixes wrong ``tsuru`` commands like
           ``tsuru shell``;
        -  ``tmux`` – fixes ``tmux`` commands;
        -  ``unknown_command`` – fixes hadoop hdfs-style "unknown command", for
           example adds missing '-' to the command on ``hdfs dfs ls``;
        -  ``vagrant_up`` – starts up the vagrant instance;
        -  ``whois`` – fixes ``whois`` command;
        -  ``workon_doesnt_exists`` – fixes ``virtualenvwrapper`` env name os
           suggests to create new.
        -  ``yarn_alias`` – fixes aliased ``yarn`` commands like ``yarn ls``;
        -  ``yarn_command_not_found`` – fixes misspelled ``yarn`` commands;
        -  ``yarn_command_replaced`` – fixes replaced ``yarn`` commands;
        -  ``yarn_help`` – makes it easier to open ``yarn`` documentation;
        
        Enabled by default only on specific platforms:
        
        -  ``apt_get`` – installs app from apt if it not installed (requires
           ``python-commandnotfound`` / ``python3-commandnotfound``);
        -  ``apt_get_search`` – changes trying to search using ``apt-get`` with
           searching using ``apt-cache``;
        -  ``apt_invalid_operation`` – fixes invalid ``apt`` and ``apt-get``
           calls, like ``apt-get isntall vim``;
        -  ``brew_cask_dependency`` – installs cask dependencies;
        -  ``brew_install`` – fixes formula name for ``brew install``;
        -  ``brew_link`` – adds ``--overwrite --dry-run`` if linking fails;
        -  ``brew_uninstall`` – adds ``--force`` to ``brew uninstall`` if
           multiple versions were installed;
        -  ``brew_unknown_command`` – fixes wrong brew commands, for example
           ``brew docto/brew doctor``;
        -  ``brew_update_formula`` – turns ``brew update <formula>`` into
           ``brew upgrade <formula>``;
        -  ``dnf_no_such_command`` – fixes mistyped DNF commands;
        -  ``pacman`` – installs app with ``pacman`` if it is not installed
           (uses ``yaourt`` if available);
        -  ``pacman_not_found`` – fixes package name with ``pacman`` or
           ``yaourt``.
        
        Bundled, but not enabled by default:
        
        -  ``git_push_force`` – adds ``--force-with-lease`` to a ``git push``
           (may conflict with ``git_push_pull``);
        -  ``rm_root`` – adds ``--no-preserve-root`` to ``rm -rf /`` command.
        
        Creating your own rules
        -----------------------
        
        For adding your own rule you should create ``your-rule-name.py`` in
        ``~/.config/thefuck/rules``. The rule should contain two functions:
        
        .. code:: python
        
            match(command: Command) -> bool
            get_new_command(command: Command) -> str | list[str]
        
        Also the rule can contain an optional function
        
        .. code:: python
        
            side_effect(old_command: Command, fixed_command: str) -> None
        
        and optional ``enabled_by_default``, ``requires_output`` and
        ``priority`` variables.
        
        ``Command`` has three attributes: ``script``, ``output`` and
        ``script_parts``. Rule shouldn't change ``Command``.
        
        *Rules api changed in 3.0:* For accessing settings in rule you need to
        import it with ``from thefuck.conf import settings``. ``settings`` is a
        special object filled with ``~/.config/thefuck/settings.py`` and values
        from env (`see more below <#settings>`__).
        
        Simple example of the rule for running script with ``sudo``:
        
        .. code:: python
        
            def match(command):
                return ('permission denied' in command.output.lower()
                        or 'EACCES' in command.output)
        
        
            def get_new_command(command):
                return 'sudo {}'.format(command.script)
        
            # Optional:
            enabled_by_default = True
        
            def side_effect(command, fixed_command):
                subprocess.call('chmod 777 .', shell=True)
        
            priority = 1000  # Lower first, default is 1000
        
            requires_output = True
        
        `More examples of
        rules <https://github.com/nvbn/thefuck/tree/master/thefuck/rules>`__,
        `utility functions for
        rules <https://github.com/nvbn/thefuck/tree/master/thefuck/utils.py>`__,
        `app/os-specific
        helpers <https://github.com/nvbn/thefuck/tree/master/thefuck/specific/>`__.
        
        Settings
        --------
        
        The Fuck has a few settings parameters which can be changed in
        ``$XDG_CONFIG_HOME/thefuck/settings.py`` (``$XDG_CONFIG_HOME`` defaults
        to ``~/.config``):
        
        -  ``rules`` – list of enabled rules, by default
           ``thefuck.conf.DEFAULT_RULES``;
        -  ``exclude_rules`` – list of disabled rules, by default ``[]``;
        -  ``require_confirmation`` – requires confirmation before running new
           command, by default ``True``;
        -  ``wait_command`` – max amount of time in seconds for getting previous
           command output;
        -  ``no_colors`` – disable colored output;
        -  ``priority`` – dict with rules priorities, rule with lower
           ``priority`` will be matched first;
        -  ``debug`` – enables debug output, by default ``False``;
        -  ``history_limit`` – numeric value of how many history commands will
           be scanned, like ``2000``;
        -  ``alter_history`` – push fixed command to history, by default
           ``True``;
        -  ``wait_slow_command`` – max amount of time in seconds for getting
           previous command output if it in ``slow_commands`` list;
        -  ``slow_commands`` – list of slow commands.
        
        Example of ``settings.py``:
        
        .. code:: python
        
            rules = ['sudo', 'no_command']
            exclude_rules = ['git_push']
            require_confirmation = True
            wait_command = 10
            no_colors = False
            priority = {'sudo': 100, 'no_command': 9999}
            debug = False
            history_limit = 9999
            wait_slow_command = 20
            slow_commands = ['react-native', 'gradle']
        
        Or via environment variables:
        
        -  ``THEFUCK_RULES`` – list of enabled rules, like
           ``DEFAULT_RULES:rm_root`` or ``sudo:no_command``;
        -  ``THEFUCK_EXCLUDE_RULES`` – list of disabled rules, like
           ``git_pull:git_push``;
        -  ``THEFUCK_REQUIRE_CONFIRMATION`` – require confirmation before
           running new command, ``true/false``;
        -  ``THEFUCK_WAIT_COMMAND`` – max amount of time in seconds for getting
           previous command output;
        -  ``THEFUCK_NO_COLORS`` – disable colored output, ``true/false``;
        -  ``THEFUCK_PRIORITY`` – priority of the rules, like
           ``no_command=9999:apt_get=100``, rule with lower ``priority`` will be
           matched first;
        -  ``THEFUCK_DEBUG`` – enables debug output, ``true/false``;
        -  ``THEFUCK_HISTORY_LIMIT`` – how many history commands will be
           scanned, like ``2000``;
        -  ``THEFUCK_ALTER_HISTORY`` – push fixed command to history
           ``true/false``;
        -  ``THEFUCK_WAIT_SLOW_COMMAND`` – max amount of time in seconds for
           getting previous command output if it in ``slow_commands`` list;
        -  ``THEFUCK_SLOW_COMMANDS`` – list of slow commands, like
           ``lein:gradle``.
        
        For example:
        
        .. code:: bash
        
            export THEFUCK_RULES='sudo:no_command'
            export THEFUCK_EXCLUDE_RULES='git_pull:git_push'
            export THEFUCK_REQUIRE_CONFIRMATION='true'
            export THEFUCK_WAIT_COMMAND=10
            export THEFUCK_NO_COLORS='false'
            export THEFUCK_PRIORITY='no_command=9999:apt_get=100'
            export THEFUCK_HISTORY_LIMIT='2000'
        
        Experimental instant mode
        -------------------------
        
        By default The Fuck reruns a previous command and that takes time, in
        instant mode The Fuck logs output with
        `script <https://en.wikipedia.org/wiki/Script_(Unix)>`__ and just reads
        the log.
        
        |gif with instant mode|
        
        At the moment only Python 3 with bash or zsh is supported.
        
        For enabling instant mode you need to add
        ``--enable-experimental-instant-mode`` to alias initialization in your
        ``.bashrc``, ``.bash_profile`` or ``.zshrc`` like:
        
        .. code:: bash
        
            eval $(thefuck --alias --enable-experimental-instant-mode)
        
        Developing
        ----------
        
        Install ``The Fuck`` for development:
        
        .. code:: bash
        
            pip install -r requirements.txt
            python setup.py develop
        
        Run code style checks:
        
        .. code:: bash
        
            flake8
        
        Run unit tests:
        
        .. code:: bash
        
            py.test
        
        Run unit and functional tests (requires docker):
        
        .. code:: bash
        
            py.test --enable-functional
        
        For sending package to pypi:
        
        .. code:: bash
        
            sudo apt-get install pandoc
            ./release.py
        
        License MIT
        -----------
        
        Project License can be found `here <LICENSE.md>`__.
        
        .. |Version| image:: https://img.shields.io/pypi/v/thefuck.svg?label=version
           :target: https://pypi.python.org/pypi/thefuck/
        .. |Build Status| image:: https://travis-ci.org/nvbn/thefuck.svg?branch=master
           :target: https://travis-ci.org/nvbn/thefuck
        .. |Windows Build Status| image:: https://ci.appveyor.com/api/projects/status/1sskj4imj02um0gu/branch/master?svg=true
           :target: https://ci.appveyor.com/project/nvbn/thefuck
        .. |Coverage| image:: https://img.shields.io/coveralls/nvbn/thefuck.svg
           :target: https://coveralls.io/github/nvbn/thefuck
        .. |MIT License| image:: https://img.shields.io/badge/license-MIT-007EC7.svg
           :target: LICENSE.md
        .. |gif with examples| image:: https://raw.githubusercontent.com/nvbn/thefuck/master/example.gif
           :target: https://raw.githubusercontent.com/nvbn/thefuck/master/example.gif
        .. |gif with instant mode| image:: https://raw.githubusercontent.com/nvbn/thefuck/master/example_instant_mode.gif
           :target: https://raw.githubusercontent.com/nvbn/thefuck/master/example_instant_mode.gif
        
Platform: UNKNOWN
