If you use cheat to save some programming snippets this might be useful.
For example if you have a long list of SQL Query cheats, you can do the
following:
Enter ```sql in the beginning of the file containing the cheats content.
Example file: sql
```sql
SELECT 17 & 16 = 16;
SELECT 2+4+8+16 & 1 = 0;
* 'master' of https://github.com/yafp/cheat:
20151102 - Added 3 more cheats into the new apt cheatsheet
20151102 - Adding a cheatsheet for at (apt vs apt-get)
* 'setup-improvements' of https://github.com/youtux/cheat:
Use entry_points instead of scripts in setup.py
Improve setup.py description
Exploit setuptools package_data to include cheats
Use find_packages from setuptools to identify packages
Use setuptools insted of distutils.
reference:
-O file
--output-document=file
The documents will not be written to the appropriate files, but all will be concatenated together and
written to file. If - is used as file, documents will be printed to standard output, disabling link
conversion. (Use ./- to print to a file literally named -.)
Use of -O is not intended to mean simply "use the name file instead of the one in the URL;" rather,
it is analogous to shell redirection: wget -O file http://foo is intended to work like wget -O -
http://foo > file; file will be truncated immediately, and all downloaded content will be written
there.
For this reason, -N (for timestamp-checking) is not supported in combination with -O: since file is
always newly created, it will always have a very new timestamp. A warning will be issued if this
combination is used.
Similarly, using -r or -p with -O may not work as you expect: Wget won't just download the first file
to file and then download the rest to their normal names: all downloaded content will be placed in
file. This was disabled in version 1.11, but has been reinstated (with a warning) in 1.11.2, as there
are some cases where this behavior can actually have some use.
Note that a combination with -k is only permitted when downloading a single document, as in that case
it will just convert all relative URIs to external ones; -k makes no sense for multiple URIs when
they're all being downloaded to a single file; -k can be used only when the output is a regular file.
Now, whenever a cheatsheet is to be edited, if that cheatsheet does not
exist on the `DEFAULT_SHEET_PATH`, it is first copied there before being
opened for editing. This prevents system-wide cheatsheets from being
edited when using `cheat` as `root`.
- Solves issue whereby global cheatsheets fail to save after editing
- `cheat` no longer asks a user if a global cheatsheet should be copied
locally before editing, and instead just silently does so.
This allows a fine-grained control of the dependencies, because it generates a wrapper script
that calls the specifiend function (i.e., main inside cheat/app.py)
@zhujian0805 contributed some excellent cheatsheets in #185, but some
binary files seem to have gotten mixed into the commit as well. This
commit cherry-picks the cheatsheet file changes from that PR while
leaving behind the cruft.
Also performed minor editing on some of the cheatsheets.
* 'master' of github.com:erikcox/cheat:
Added a condition in prompt_yes_or_no() to use input or raw_input
First attempt at making utils.py compatible with Python 2 and 3.
Previously, `cheat` would exit if run by `root`. The rationale was:
If `cheat` was run by an unprivileged user (`chris`, for example), the
`$DEFAULT_CHEAT_DIR` would default to `/home/chris/.cheat`. If cheat was
run via `sudo`, however, the `$DEFAULT_CHEAT_DIR` would suddenly be
`/root/.cheat`.
Presuming that those individual user cheat dirs actually contained cheat
sheets, this could cause confusion, because cheat sheets accessible to
one user (`chris`) would not be accessible to the other (`root`). Thus,
cheatsheets would appear and disappear, depending on which user was
running `cheat`. (This would only be an issue, of course, for cheat
sheets that existed within the respective users' cheat dirs. System-wide
cheat sheets would be unaffected.)
`cheat` was thus programmed to gracefully fail when run as `root` to
prevent that possible confusion.
However, I'm backing away from that reasoning, because:
1. It's causing a headache for real users who'd like to run `cheat` as
root
2. Other venerable programs (`vim`, etc.) suffer from the same problem,
but nobody seems to mind enough to do anything about it. Thus, I suppose
the laissez-faire approach is essentially the sanctioned "solution" to
this problem.
3. Users sufficently troubled by this confusion may rememdy the problem
manually by setting environment variables (`$DEFAULT_CHEAT_DIR`, etc.)
Thus, `cheat` no longer complains if run by `root`.
Version-bumped to 2.1.0.
The `setup.py` script no longer attempts to install files to privileged
system directories. (Previously, it attempted to do this in order to
enable command-line autocompletion.) In lieu of doing this within the
installer directly, I have simply included brief instructions explaining
how to configure this manually.
Version bumped accordingly.
Previously, `sheets.print()` would query the filesystem every time it
was invoked. This was inelegant, because it is called multiple times
every time `cheat` is executed. Thus, unnecessary calls were being made
out to the filesystem.
Now the result of that function is being buffered into a module variable
when it is executed the first time, and served from there thereafter. I
broke the "functional" paradigm to a degree by doing this, but it wasn't
worth the complexity of implementing proper memoization (decorators,
etc) for such a trivial case.
Bumped the version number accordingly.
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.
Pull request #108 added the option to automatically copy an
otherwise-uneditable cheatsheet to your DEFAULT_CHEAT_DIR upon an edit
request. This is a minor tweak that implements some graceful failing if
the DEFAULT_CHEAT_DIR does not exist.
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)
During the last commit, the -d functionality was changed (likely
unintentionally) such that it outputted a raw Python list rather than
lines printed to stdout. I've restored the original functionality,
because the autocompletion scripts rely upon it.
A previous revision merged the functionality implemented by the -c and
-e options, but the -c option was reintroduced during the last revision
(probably) by accident. I took that out given that it no longer serves
a purpose.
first attempts to write to the ~/.cheat directory, or alternatively
create it if it does not already exist. Failing that, it attempts to
write to the python package directory.
* 'master' of https://github.com/bradtse/cheat:
Added in a create option also
Added in an edit option that allows a user to edit the cheatsheet from their default editor. Also made some visual changes to the output of the cheatsheet.