Go to file
Chris Lane 6cae837a2f Merge branch 'master' of https://github.com/0rax/cheat into 0rax-master
* 'master' of https://github.com/0rax/cheat:
  change block generator not to held block is they are empty + minor pep8 refacto (pylint:8.85/10)
  remove debug
  indent block fail :x, no more triple output
  Some minor modification (open inside the generator for better readability) + one bug fixe (the last block wasnt yiel by the generator)
  Following #128 talk about how output should be made for search. Just changed the way on how the search function output the result, no more ala grep output. Cheatsheets are now parsed [by CheatSheets.__parse_cheat_command_block(self, cheat_fp)] into block (separated by newline), i have seen that all block in cheatsheets are delimited by a blank line, so instead of parsing from first consecutive # to last consecutive command, an output that is not used by all sheets (reference to "7z" cheatfile). And so the block are parsed by begin of the document to blanck line to end of the document. Finally the output is made by indenting the block content by 4 spaces + the title of the sheet on the top. This is a way to handle subcommands in my mind (search "git commit" and you now have all what you want)
  Added search function into cheat, used a grep like output, if needed it could be changed, discussion is open inside #128 issue
  fix edit autocomplete (just dont show description of -e/--edit option and i dont know why
  Add hint to use sudo when creation fail of sheet.
  In response to Issue #108: Added option to copy sheet while not editable.
  Added autocompletion for fish shell

Conflicts:
	setup.py
2013-11-11 17:42:48 -05:00
autocompletion Merge branch 'master' of https://github.com/0rax/cheat into 0rax-master 2013-11-11 17:42:48 -05:00
cheatsheets Trivial formatting changes on vim cheatsheet 2013-11-11 17:34:45 -05:00
.gitignore Add gitignore 2013-08-19 08:50:40 +01:00
LICENSE Made trivial changes to the README. Added the GPL 3 license. 2013-08-10 19:06:01 -04:00
README.md Update README.md 2013-10-23 17:59:56 +02:00
cheat change block generator not to held block is they are empty + minor pep8 refacto (pylint:8.85/10) 2013-11-07 11:23:51 +01:00
setup.py Added autocompletion for fish shell 2013-10-11 16:26:24 +02:00

README.md

cheat

cheat allows you to create and view interactive cheatsheets on the command-line. It was designed to help remind *nix system administrators of options for commands that they use frequently, but not frequently enough to remember.

The obligatory xkcd

cheat depends only on python.

Examples

The next time you're forced to disarm a nuclear weapon without consulting Google, you may run:

cheat tar

You will be presented with a cheatsheet resembling:

# To extract an uncompressed archive: 
tar -xvf /path/to/foo.tar

# To extract a .gz archive:
tar -xzvf /path/to/foo.tgz

# To create a .gz archive:
tar -czvf /path/to/foo.tgz /path/to/foo/

# To extract a .bz2 archive:
tar -xjvf /path/to/foo.tgz

# To create a .bz2 archive:
tar -cjvf /path/to/foo.tgz /path/to/foo/

To see what cheatsheets are availble, run cheat with no arguments.

Note that, while cheat was designed primarily for *nix system administrators, it is agnostic as to what content it stores. If you would like to use cheat to store notes on your favorite cookie recipes, feel free.

Installing

Installing for all users (requires root)

Clone this repository and cd into it, then run

sudo python setup.py install

Installing in your home directory

Clone this repository and cd into it, then run

mkdir -p ~/bin
cp cheat ~/bin
mkdir ~/.cheat
cp cheatsheets/* ~/.cheat

Testing

After installing for all users or in your home directory, try cheat tar for instance.

Troubleshooting

In case you got an error such as:

ImportError: No module named argparse

You're probably using python < 2.7 and you need to manually install the argparse module. You can do this easily with pip:

sudo apt-get install python-pip
sudo pip install argparse

Other methods: https://pypi.python.org/pypi/argparse

Modifying Cheatsheets

The value of cheat is that it allows you to create your own cheatsheets - the defaults are meant to serve only as a starting point, and can and should be modified.

Cheatsheets are stored in the ~/.cheat/ directory, and are named on a per-keyphrase basis. In other words, the content for the tar cheatsheet lives in the ~/.cheat/tar file. To add a cheatsheet for a foo command, you would create file ~/.cheat/foo, whereby that file contained the cheatsheet content.

Note that cheat supports "subcommands" simply by naming files appropriately. Thus, if you wanted to create a cheatsheet not only (for example) for git but also for git commit, you could do so be creating cheatsheet files of the appropriate names (git and git commit).

After you've customized your cheatsheets, I urge you to track ~/.cheat/ along with your dotfiles.

Advanced Features

Setting a DEFAULT_CHEAT_DIR

Personal cheatsheets are saved in the ~/.cheat directory by default, but you can specify a different default by exporting a DEFAULT_CHEAT_DIR environment variable:

export DEFAULT_CHEAT_DIR=/path/to/my/cheats

Setting a CHEATPATH

You can additionally instruct cheat to look for cheatsheets in other directories by exporting a CHEATPATH environment variable:

export CHEATPATH=/path/to/my/cheats

You may, of course, append multiple directories to your CHEATPATH:

export CHEATPATH=$CHEATPATH:/path/to/more/cheats

You may view which directories are on your CHEATPATH with cheat -d.

Enabling Syntax Highlighting

cheat can apply syntax highlighting to your cheatsheets if so desired. To enable this feature, set a CHEATCOLORS environment variable:

export CHEATCOLORS=true

Creating/Editing Cheatsheets

Provided that you have an EDITOR environment variable set, you may create new cheatsheets via:

cheat -e foo

If the 'foo' cheatsheet already exists, it will be opened for editing.

By default, cheat will attempt to write new cheatsheets to ~/.cheat, and will create the ~/.cheat directory if necessary. If it is unable to do so, the new cheatsheet will be written to the default cheatsheet directory instead, though this will likely require sudo.

Contributing

If you would like to contribute cheetsheets or program functionality, please fork this repository, make your changes, and send me a pull request.

Related Projects

  • lucaswerkmeister/cheats: An implementation of this concept in pure bash that also allows not only for numerical indexing of subcomands but also supports running commands interactively.

  • jahendrie/cheat: A bash-only implementation that additionally allows for cheatsheets to be created and grep searched from the command-line. (jahendrie contributed key ideas to this project as well.)

  • cheat RubyGem: A clever gem from 2006 that clearly had similar motivations. It is unclear whether or not it is currently maintained.