f46698b656
Performed an extensive refactoring on the entire application for the sake of code-cleanliness. - Refactored out of an ad-hoc Imperative paradigm into more of a functional/declarative paradigm. IMO, this makes the application signifcantly easier to understand. - Moved away from `argparse` and into `docopt` for argument parsing - Version bump to 2.0.0 - Performed extensive refactoring on the setup.py script. Script should install to the system more cleanly now. - Made minor formatting changes to the --list flag output - Updated the README Squashed commit of the following: commit e5681bd536aa0220cdeb7884cc248db55be408c9 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 23:30:21 2014 -0400 Fixed many bugs Everything seems to work now, I think. commit 764ec5950cee958eb1b8333ddfcb6bcd45c28429 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 21:51:31 2014 -0400 Restructuring for the sake of setup.py Seem to finally have a working install script commit 5a866c23857b77ec65070dd8023cd734f2b7c242 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 18:01:11 2014 -0400 Nits commit a79954ba5b33d992fa6a32abffb33b161d624e3d Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:53:03 2014 -0400 Implemented search commit b570a897e9a12c15affe1a72628deae31836dee2 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:11:27 2014 -0400 Nits commit 1a8d85b44457f1b2131b3e8475c5270b5d0899e3 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 17:02:22 2014 -0400 Still refactoring across files Trying to make the program structure clearer commit 34dffd6462e492e81ea558e2009a71051b7663c9 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 16:40:37 2014 -0400 Breaking app into several files This is for the sake of code-cleanliness commit 4825d678ff5f9817ccbf727ef71e5dea15ff2586 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:55:19 2014 -0400 Got syntax highlighting working commit c37d7a626d451bfca3d4a072eb9fed604085170f Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:29:22 2014 -0400 Reduced verbosity of function names commit 8e626045186b37dce2480f5af1994ddfa8db79b5 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 15:24:41 2014 -0400 Refactored argument passing Fewer arguments now need to be passed throughout the app. commit 807ba814650010b3dd1b59d27400b3fb4fcfede7 Author: Chris Lane <chris@chris-allen-lane.com> Date: Sat Apr 26 11:40:05 2014 -0400 Working through the refactor commit e34e6540d4f8cd727e98aac68289d515a02d5fe6 Author: Chris Lane <chris@chris-allen-lane.com> Date: Thu Apr 24 20:00:10 2014 -0400 Got a basic end-to-end refactor working Have re-implemented just the most basic functionality in the "cheat2" file. |
||
---|---|---|
bin | ||
cheat | ||
.gitignore | ||
CHANGELOG | ||
LICENSE | ||
README.md | ||
setup.py |
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.
cheat
depends only on python
and pip
.
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 -l
.
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
First install the required python dependencies with:
sudo pip install docopt pygments
Then, clone this repository, cd
into it, and run:
sudo python setup.py install
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.