Compare commits

...

79 Commits

Author SHA1 Message Date
Chris Lane
8cad76943a v2.1.27
`patch` version bump.
2016-11-27 11:10:05 -05:00
Romanos Skiadas
a6ec02c296 Support multi-word EDITOR values
When the value of EDITOR was more than one words (e.g. emacsclient -c),
it wasn't properly split in an array for subprocess.call and cheat would
fail to launch it.
This commit fixes that.

Closes #301
2016-11-27 10:53:10 -05:00
Chris Lane
7392787e31 Merge branch 'patch-1' of https://github.com/brutus/cheat into brutus-patch-1 2016-11-27 10:42:46 -05:00
Chris Lane
208dd24a0c Minor cheatsheet edits. 2016-11-27 10:31:49 -05:00
Chris Lane
df34774a7a Merge branch 'master' of https://github.com/notklaatu/cheat into notklaatu-master 2016-11-27 08:57:54 -05:00
Chris Lane
8d65424ffb README edit
Modified the README with regards to the environment variable changes
made in #294.
2016-11-27 08:54:33 -05:00
Chris Lane
597acec6ac cheat now honors CHEAT_EDITOR and VISUAL environment variables in
addition to `EDITOR`.
2016-11-27 08:54:33 -05:00
Chris Allen Lane
7d4150b937 Merge pull request #291 from proinsias/patch-1
Create MANIFEST.in
2016-11-27 08:53:45 -05:00
Chris Allen Lane
5df5b1ab49 Merge pull request #299 from jonlabelle/patch-1
Fix uninstall typo.
2016-11-27 08:46:55 -05:00
Chris Allen Lane
f1c8017342 Merge pull request #304 from dufferzafar/sheets
Add aria2c sheet
2016-11-27 08:45:50 -05:00
Brutus
05400a92ed Added support for ~ and environment variables in DEFAULT_CHEAT_DIR
If the `DEFAULT_CHEAT_DIR` environment variable contains the `~` — as shortcut for the users home directory — or environment variables like `$HOME`, the program bails. This change allows the usage of both.
2016-11-24 16:14:37 +01:00
Shadab Zafar
034c1a2415 Add aria2c sheet 2016-10-15 00:02:45 +05:30
Jon LaBelle
dab8645394 Fix uninstall type. 2016-10-02 16:23:42 -05:00
Chris Lane
403d715127 Merge pull request #292 from rahulkavale/master
Add stash, cherry-pick, revert in git cheat
2016-09-30 20:40:20 -04:00
Chris Lane
0edd1450dc Merge pull request #293 from nagromc/npm-cheat
Add npm cheatsheet
2016-09-30 20:38:15 -04:00
Chris Lane
d87a26ce4f Merge pull request #297 from dufferzafar/sheets
Update lsof sheet
2016-09-30 20:37:20 -04:00
Shadab Zafar
cdf240b70e Fix grammar of lsof 2016-09-27 22:43:54 +05:30
Shadab Zafar
809c6d77bc Update lsof sheet 2016-09-27 21:23:39 +05:30
Klaatu
be543450c7 Merge branch 'master' of github.com:notklaatu/cheat 2016-09-21 22:25:27 +12:00
Klaatu
9889d77adb xmlto cheatsheet 2016-09-21 22:24:47 +12:00
Klaatu
354376340f Missing man page #272 2016-09-10 14:17:01 +12:00
Morgan Courbet
d82eee726c Add npm cheatsheet 2016-09-09 10:05:22 +02:00
Klaatu
9a23458a2d ffmpeg combine, add sqlite3 2016-09-09 12:05:08 +12:00
Klaatu
32802c2907 patch cheat 2016-09-04 09:48:01 +12:00
Klaatu
2a6d34de35 diff addition 2016-09-02 09:44:19 +12:00
Klaatu
f1253031f2 bzip2 2016-09-01 22:28:28 +12:00
Klaatu
76fa9cfc23 urpm* mageia open mandriva 2016-09-01 22:01:01 +12:00
Klaatu
0a54b2a2ff updated emacs, ffmpeg. branched org-mode. added slack. 2016-09-01 12:10:21 +12:00
rahul
6a1742984c Add cheery-pick to git cheat 2016-08-28 08:26:55 +05:30
rahul
80d2a09456 Add revert in git cheat 2016-08-28 08:19:20 +05:30
rahul
5121fece91 Add git stash cheat 2016-08-28 08:13:08 +05:30
Francis T. O'Donovan
e8d32102cb Create MANIFEST.in
I'm working on submitting this package to conda-forge. As part of this, I would like to include the license files in the MANIFEST.in for this project.
2016-08-25 20:31:13 -04:00
Chris Lane
eff042d50b patch version bump 2016-08-05 15:18:52 -04:00
Chris Lane
f000756f2c Resolved merge-conflict. 2016-08-05 15:15:22 -04:00
Chris Lane
ef1dfb2168 Merge pull request #286 from poohzrn/master
Fix #281: Consistent description styles
2016-08-05 15:03:49 -04:00
Chris Lane
3c1b5c5860 Merge pull request #274 from ImmortalPC/master
[CHANGE] Add cheats for DD and SSH
2016-08-05 15:01:14 -04:00
Chris Lane
3494827403 Merge pull request #288 from rski/remove_prompt_function
Remove prompt_yes_or_no
2016-08-05 14:58:27 -04:00
Chris Lane
f0879831c5 Merge pull request #284 from dufferzafar/ansi
Add ANSI Color Chart
2016-08-05 14:57:18 -04:00
Chris Lane
8c056d09e9 Merge pull request #285 from dufferzafar/less
Update less cheatsheet
2016-08-05 14:56:14 -04:00
Chris Lane
dd8d0ae58b Merge pull request #282 from dufferzafar/master
Update git cheatsheet
2016-08-05 14:54:24 -04:00
Chris Lane
6cc99a2b6a Merge pull request #283 from dufferzafar/cpdf
Add cpdf cheatsheet
2016-08-05 14:52:47 -04:00
Shadab Zafar
70ad22c12e git: Undo parts of last commit
Added from: http://stackoverflow.com/a/4248269/2043048
2016-07-20 14:34:29 +05:30
Romanos Skiadas
b28e6a84ac Remove prompt_yes_or_no
This function is not used anywhere in the code.
2016-07-19 15:16:12 +03:00
Romanos Skiadas
bf4f1c80ca Style fixes
Don't use * imports, fix indentations, other small fixes
2016-07-19 14:50:51 +03:00
Lasse Nielsen
9cf1a5761d Fix #281: Consistent description styles 2016-07-18 17:25:06 +02:00
Shadab Zafar
13fdcec332 Add cheat on how to dump content of less to file 2016-07-16 18:47:19 +05:30
Shadab Zafar
b2feeab4e8 Add ANSI Color Chart 2016-07-16 18:41:17 +05:30
Shadab Zafar
c4b7fd507f Add cpdf cheatsheet
cpdf is a tool to slice and dice PDFs

I created this sheet on a boring day by copying text from
[here](http://www.coherentpdf.com/usage-examples.html) and then
cleaning things up a bit.
2016-07-16 18:37:12 +05:30
Shadab Zafar
b77aa0974b Update git cheatsheet 2016-07-16 18:21:07 +05:30
Chris Lane
3be95142ed v2.1.25 2016-05-29 21:47:22 -04:00
Chris Lane
bb324e94a4 Issue #278
Fixed a technical innacuracy in the `crontab` cheatsheet.
2016-05-29 21:03:58 -04:00
Chris Lane
7084ce2f45 Merge pull request #277 from caorong/master
origin Convert Unix timestamp to Date only works on Linux, add cheat which works on Mac
2016-05-29 21:00:57 -04:00
Chris Lane
905006f09c Merge pull request #280 from ybudimirov/ncdu
Ncdu cheatsheet
2016-05-29 20:59:16 -04:00
Chris Lane
06a368fb1f Merge pull request #276 from oliworx/patch-1
add cheatsheet for subversion (svn)
2016-05-29 20:58:16 -04:00
Yuriy Budimirov
6a9422502a Ncdu cheatsheet 2016-05-26 13:21:20 +03:00
caorong
41332f1d8a update timestamp convert cheat 2016-04-27 10:57:44 +08:00
ImmortalPC
b6d54b135c [CHANGE & ADD] Removing typo from SSH. Adding tip for emacs and ssh. Adding cheat for xxd 2016-04-19 13:45:47 +02:00
Oliver Kurmis
a3c682729e add cheatsheet for subversion (svn) 2016-04-13 17:27:37 +02:00
ImmortalPC
f38da23741 [CHANGE] Add cheats for DD and SSH 2016-04-05 17:09:49 +02:00
Chris Lane
20d985d993 Working around failed upload
pypi responded with an HTTP 500 when uploading the last version of
`cheat`, and this seems to have caused some problems. No changes were
made in this commit other than incrementing the version number in an
attempt to resolve this.
2016-03-24 12:41:40 -04:00
Chris Lane
09f821835c v2.1.23 2016-03-24 12:39:20 -04:00
Chris Lane
7e5e4315e5 Merge pull request #268 from pierrepo/master
Add options for pip and a new cheatsheet for virtualenv
2016-03-24 12:37:17 -04:00
Chris Lane
869e7095f3 Merge pull request #269 from VirenMohindra/update-readme
trivial readme.md correction
2016-03-24 12:34:51 -04:00
Viren Mohindra
6dd8faf26a trivial readme.md correction
availble -> available
2016-03-18 03:23:30 -05:00
Pierre Poulain
c0585ee55c Append virtualenvwrapper commands 2016-03-15 17:34:28 +01:00
Pierre Poulain
c0d755e102 Add virtualenv 2016-03-15 17:28:07 +01:00
Pierre Poulain
49e1fc46f4 Add --user and --upgrade options 2016-03-15 17:15:06 +01:00
Chris Lane
3d90b26b04 Merge pull request #266 from MinimaxHeadroom/add-tree-mod-dd-vim-find
Add cheatsheet for command `tree`. Edits or command additions to existing cheatsheets `dd`, `find`, `vim`.
2016-03-14 14:21:55 -04:00
Chris Lane
3b73b9b06b Merge pull request #264 from JindrichPilar/master
Added xrandr cheat
2016-03-14 14:17:14 -04:00
Chris Lane
74d1bc1ec7 Merge pull request #263 from omsobliga/master
Add examples for tmux
2016-03-14 14:14:55 -04:00
Chris Lane
78c76dc75a Merge pull request #267 from VHarisop/nmcli
Added nmcli cheatsheet
2016-03-14 14:14:21 -04:00
VHarisop
f204ed66e1 Added WiFi-specific commands 2016-03-11 03:41:26 +02:00
VHarisop
29c53b754d Added nmcli cheatsheet 2016-03-08 04:06:44 +02:00
mheadroom
5a7fdfcca7 Add tree cheatsheet. Small edits to improve clarity of, plus addition of some new commands to, dd, find, vim. 2016-03-04 04:35:41 -05:00
Jindrich Pilar
c3f082eccf Added xrandr cheat 2016-02-22 20:59:05 +01:00
lih
808a2585ef Add example for tmux 2016-02-20 11:09:02 +08:00
Chris Lane
c0aad062ec Trivial README edit. 2016-02-18 15:40:18 -05:00
Chris Lane
8ffeaa4211 README edits
- Replaced the broken PyPi badges with new ones
- Moved some content out of the README and into new wiki pages
- Applied syntax highlighting to shell examples
- Trivial content edits
2016-02-18 15:35:17 -05:00
Chris Lane
c1d4c768de CONTRIBUTING.md
- Added a paragraph on licensing
- Trivial edits
2016-02-17 14:12:58 -05:00
46 changed files with 816 additions and 163 deletions

View File

@@ -1,9 +1,17 @@
Contributing Contributing
============ ============
If you would like to contribute cheetsheets or program functionality, please If you would like to contribute cheetsheets or program functionality, please
fork this repository, make your changes, and send me a pull request. fork this repository, make your changes, and submit a pull request.
Python code show follow the standards laid out by [PEP 8][]. Python code should conform to [PEP 8][].
Licensing
---------
By contributing to the project, you agree to license your work under the same
licenses as `cheat` itself. `cheat` is currently dual-licensed under the GPL3
and MIT licenses, though that could change without notice in the future.
`cheat`, however, will always remain free software (as in both "free as in
freedom" and "free as in beer") and shall always be licensed accordingly.
[PEP 8]: http://legacy.python.org/dev/peps/pep-0008/ [PEP 8]: http://legacy.python.org/dev/peps/pep-0008/

6
MANIFEST.in Normal file
View File

@@ -0,0 +1,6 @@
include CHANGELOG
include CONTRIBUTING.md
include LICENSE
include README.md
include licenses/gpl-3.txt
include licenses/mit.txt

114
README.md
View File

@@ -1,3 +1,6 @@
[![PyPI](https://img.shields.io/pypi/v/cheat.svg)](https://pypi.python.org/pypi/cheat/)
[![PyPI](https://img.shields.io/pypi/dm/cheat.svg)](https://pypi.python.org/pypi/cheat/)
cheat cheat
===== =====
`cheat` allows you to create and view interactive cheatsheets on the `cheat` allows you to create and view interactive cheatsheets on the
@@ -7,66 +10,51 @@ remember.
![The obligatory xkcd](http://imgs.xkcd.com/comics/tar.png 'The obligatory xkcd') ![The obligatory xkcd](http://imgs.xkcd.com/comics/tar.png 'The obligatory xkcd')
`cheat` depends only on `python` and `pip`.
PyPI status:
[![Latest Version](https://pypip.in/version/cheat/badge.png)](https://pypi.python.org/pypi/cheat/)
[![Downloads](https://pypip.in/download/cheat/badge.png)](https://pypi.python.org/pypi/cheat/)
Example Example
------- -------
The next time you're forced to disarm a nuclear weapon without consulting The next time you're forced to disarm a nuclear weapon without consulting
Google, you may run: Google, you may run:
cheat tar ```sh
cheat tar
```
You will be presented with a cheatsheet resembling: You will be presented with a cheatsheet resembling:
``` ```sh
# To extract an uncompressed archive: # To extract an uncompressed archive:
tar -xvf /path/to/foo.tar tar -xvf '/path/to/foo.tar'
# To extract a .gz archive: # To extract a .gz archive:
tar -xzvf /path/to/foo.tgz tar -xzvf '/path/to/foo.tgz'
# To create a .gz archive: # To create a .gz archive:
tar -czvf /path/to/foo.tgz /path/to/foo/ tar -czvf '/path/to/foo.tgz' '/path/to/foo/'
# To extract a .bz2 archive: # To extract a .bz2 archive:
tar -xjvf /path/to/foo.tgz tar -xjvf '/path/to/foo.tgz'
# To create a .bz2 archive: # To create a .bz2 archive:
tar -cjvf /path/to/foo.tgz /path/to/foo/ tar -cjvf '/path/to/foo.tgz' '/path/to/foo/'
``` ```
To see what cheatsheets are availble, run `cheat -l`. To see what cheatsheets are available, run `cheat -l`.
Note that, while `cheat` was designed primarily for *nix system administrators, 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` 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. to store notes on your favorite cookie recipes, feel free.
Installing Installing
---------- ----------
It is recommended to install `cheat` with `pip`:
### Using pip ###
sudo pip install cheat ```sh
[sudo] pip install cheat
```
### Using homebrew ### [Other installation methods are available][installing].
brew install cheat
### Manually ###
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 Modifying Cheatsheets
@@ -79,10 +67,12 @@ 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 per-keyphrase basis. In other words, the content for the `tar` cheatsheet lives
in the `~/.cheat/tar` file. in the `~/.cheat/tar` file.
Provided that you have an `EDITOR` environment variable set, you may edit Provided that you have a `CHEAT_EDITOR`, `VISUAL`, or `EDITOR` environment
cheatsheets with: variable set, you may edit cheatsheets with:
cheat -e foo ```sh
cheat -e foo
```
If the 'foo' cheatsheet already exists, it will be opened for editing. If the 'foo' cheatsheet already exists, it will be opened for editing.
Otherwise, it will be created automatically. Otherwise, it will be created automatically.
@@ -99,17 +89,23 @@ Personal cheatsheets are saved in the `~/.cheat` directory by default, but you
can specify a different default by exporting a `DEFAULT_CHEAT_DIR` environment can specify a different default by exporting a `DEFAULT_CHEAT_DIR` environment
variable: variable:
export DEFAULT_CHEAT_DIR=/path/to/my/cheats ```sh
export DEFAULT_CHEAT_DIR='/path/to/my/cheats'
```
### Setting a CHEATPATH ### ### Setting a CHEATPATH ###
You can additionally instruct `cheat` to look for cheatsheets in other You can additionally instruct `cheat` to look for cheatsheets in other
directories by exporting a `CHEATPATH` environment variable: directories by exporting a `CHEATPATH` environment variable:
export CHEATPATH=/path/to/my/cheats ```sh
export CHEATPATH='/path/to/my/cheats'
```
You may, of course, append multiple directories to your `CHEATPATH`: You may, of course, append multiple directories to your `CHEATPATH`:
export CHEATPATH=$CHEATPATH:/path/to/more/cheats ```sh
export CHEATPATH="$CHEATPATH:/path/to/more/cheats"
```
You may view which directories are on your `CHEATPATH` with `cheat -d`. You may view which directories are on your `CHEATPATH` with `cheat -d`.
@@ -117,39 +113,17 @@ You may view which directories are on your `CHEATPATH` with `cheat -d`.
`cheat` can apply syntax highlighting to your cheatsheets if so desired. To `cheat` can apply syntax highlighting to your cheatsheets if so desired. To
enable this feature, set a `CHEATCOLORS` environment variable: enable this feature, set a `CHEATCOLORS` environment variable:
export CHEATCOLORS=true ```sh
export CHEATCOLORS=true
```
### Enabling Command-line Autocompletion ### See Also:
The `cheat/autocompletion` directory contains scripts to enable command-line ---------
autocompletion for various shells. To activate autocompletion, simply copy the - [Enabling Command-line Autocompletion][autocompletion]
appropriate script to the appropriate path on your system. (The "appropriate - [Related Projects][related-projects]
path" will vary on a per-platform basis, so this documentation shall not
speculate as to where that may be.)
Related Projects [autocompletion]: https://github.com/chrisallenlane/cheat/wiki/Enabling-Command-line-Autocompletion
---------------- [dotfiles]: http://dotfiles.github.io/
[installing]: https://github.com/chrisallenlane/cheat/wiki/Installing
- [lucaswerkmeister/cheats][1]: An implementation of this concept in pure bash [related-projects]: https://github.com/chrisallenlane/cheat/wiki/Related-Projects
that also allows not only for numerical indexing of subcomands but also
supports running commands interactively.
- [jahendrie/cheat][2]: 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][3]: A clever gem from 2006 that clearly had similar
motivations. It is unclear whether or not it is currently maintained.
- [`tldr`][tldr]: "Simplified and community-driven man pages".
- [dufferzafar/cheat][5]: An implementation in golang that has syntax highlighting and allows to copy cheats directly to clipboard.
[dotfiles]: http://dotfiles.github.io/
[jahendrie]: https://github.com/jahendrie
[1]: https://github.com/lucaswerkmeister/cheats
[2]: https://github.com/jahendrie/cheat
[3]: http://errtheblog.com/posts/21-cheat
[4]: https://github.com/chrisallenlane/cheat/pull/77
[5]: https://github.com/dufferzafar/cheat
[tldr]: https://github.com/tldr-pages/tldr

View File

@@ -31,14 +31,14 @@ Options:
""" """
# require the dependencies # require the dependencies
from cheat import * from cheat import sheets, sheet
from cheat.utils import * from cheat.utils import colorize
from docopt import docopt from docopt import docopt
if __name__ == '__main__': if __name__ == '__main__':
# parse the command-line options # parse the command-line options
options = docopt(__doc__, version='cheat 2.1.22') options = docopt(__doc__, version='cheat 2.1.27')
# list directories # list directories
if options['--directories']: if options['--directories']:

72
cheat/cheatsheets/ansi Normal file
View File

@@ -0,0 +1,72 @@
# Reset
Color_Off='\e[0m' # Text Reset
# Regular Colors
Black='\e[0;30m' # Black
Red='\e[0;31m' # Red
Green='\e[0;32m' # Green
Yellow='\e[0;33m' # Yellow
Blue='\e[0;34m' # Blue
Purple='\e[0;35m' # Purple
Cyan='\e[0;36m' # Cyan
White='\e[0;37m' # White
# Bold
BBlack='\e[1;30m' # Black
BRed='\e[1;31m' # Red
BGreen='\e[1;32m' # Green
BYellow='\e[1;33m' # Yellow
BBlue='\e[1;34m' # Blue
BPurple='\e[1;35m' # Purple
BCyan='\e[1;36m' # Cyan
BWhite='\e[1;37m' # White
# Underline
UBlack='\e[4;30m' # Black
URed='\e[4;31m' # Red
UGreen='\e[4;32m' # Green
UYellow='\e[4;33m' # Yellow
UBlue='\e[4;34m' # Blue
UPurple='\e[4;35m' # Purple
UCyan='\e[4;36m' # Cyan
UWhite='\e[4;37m' # White
# Background
On_Black='\e[40m' # Black
On_Red='\e[41m' # Red
On_Green='\e[42m' # Green
On_Yellow='\e[43m' # Yellow
On_Blue='\e[44m' # Blue
On_Purple='\e[45m' # Purple
On_Cyan='\e[46m' # Cyan
On_White='\e[47m' # White
# High Intensity
IBlack='\e[0;90m' # Black
IRed='\e[0;91m' # Red
IGreen='\e[0;92m' # Green
IYellow='\e[0;93m' # Yellow
IBlue='\e[0;94m' # Blue
IPurple='\e[0;95m' # Purple
ICyan='\e[0;96m' # Cyan
IWhite='\e[0;97m' # White
# Bold High Intensity
BIBlack='\e[1;90m' # Black
BIRed='\e[1;91m' # Red
BIGreen='\e[1;92m' # Green
BIYellow='\e[1;93m' # Yellow
BIBlue='\e[1;94m' # Blue
BIPurple='\e[1;95m' # Purple
BICyan='\e[1;96m' # Cyan
BIWhite='\e[1;97m' # White
# High Intensity backgrounds
On_IBlack='\e[0;100m' # Black
On_IRed='\e[0;101m' # Red
On_IGreen='\e[0;102m' # Green
On_IYellow='\e[0;103m' # Yellow
On_IBlue='\e[0;104m' # Blue
On_IPurple='\e[0;105m' # Purple
On_ICyan='\e[0;106m' # Cyan
On_IWhite='\e[0;107m' # White

12
cheat/cheatsheets/aria2c Normal file
View File

@@ -0,0 +1,12 @@
# Just download a file
# The url can be a http(s), ftp, .torrent file or even a magnet link
aria2c <url>
# To prevent downloading the .torrent file
aria2c --follow-torrent=mem <url>
# Download 1 file at a time (-j)
# continuing (-c) any partially downloaded ones
# to the directory specified (-d)
# reading urls from the file (-i)
aria2c -j 1 -c -d ~/Downloads -i /path/to/file

11
cheat/cheatsheets/bzip2 Normal file
View File

@@ -0,0 +1,11 @@
# compress foo -> foo.bz2
bzip2 -z foo
# decompress foo.bz2 -> foo
bzip2 -d foo.bz2
# compress foo to stdout
bzip2 -zc foo > foo.bz2
# decompress foo.bz2 to stdout
bzip2 -dc foo.bz2

132
cheat/cheatsheets/cpdf Normal file
View File

@@ -0,0 +1,132 @@
# Read in.pdf, select pages 1, 2, 3 and 6, and write those pages to
# out.pdf
cpdf in.pdf 1-3,6 -o out.pdf
# Select the even pages (2, 4, 6...) from in.pdf and write those pages
# to out.pdf
cpdf in.pdf even -o out.pdf
# Using AND to perform several operations in order, here merging two
# files together and adding a copyright stamp to every page.
cpdf -merge in.pdf in2.pdf AND -add-text "Copyright 2014" -o out.pdf
# Read control.txt and use its contents as the command line arguments
# for cpdf.
cpdf -control control.txt
# Merge in.pdf and in2.pdf into one document, writing to out.pdf.
cpdf -merge in.pdf in2.pdf -o out.pdf
# Split in.pdf into ten-page chunks, writing them to Chunk001.pdf,
# Chunk002.pdf etc
cpdf -split in.pdf -o Chunk%%%.pdf -chunk 10
# Split in.pdf on bookmark boundaries, writing each to a file whose
# name is the bookmark label
cpdf -split-bookmarks 0 in.pdf -o @N.pdf
# Scale both the dimensions and contents of in.pdf by a factor of two
# in x and y directions.
cpdf -scale-page "2 2" in.pdf -o out.pdf
# Scale the pages in in.pdf to fit the US Letter page size, writing to
# out.pdf
cpdf -scale-to-fit usletterportrait in.pdf -o out.pdf
# Shift the contents of the page by 26 pts in the x direction, and 18
# millimetres in the y direction, writing to out.pdf
cpdf -shift "26pt 18mm" in.pdf -o out.pdf
# Rotate the contents of the pages in in.pdf by ninety degrees and
# write to out.pdf.
cpdf -rotate-contents 90 in.pdf -o out.pdf
# Crop the pages in in.pdf to a 600 pts by 400 pts rectangle.
cpdf -crop "0 0 600pt 400pt" in.pdf -o out.pdf
# Encrypt using 128bit PDF encryption using the owner password 'fred'
# and the user password 'joe'
cpdf -encrypt 128bit fred joe in.pdf -o out.pdf
# Decrypt using the owner password, writing to out.pdf.
cpdf -decrypt in.pdf owner=fred -o out.pdf
# Compress the data streams in in.pdf, writing the result to out.pdf.
cpdf -compress in.pdf -o out.pdf
# Decompress the data streams in in.pdf, writing to out.pdf.
cpdf -decompress in.pdf -o out.pdf
# List the bookmarks in in.pdf. This would produce:
cpdf -list-bookmarks in.pdf
# Outputs:
# Add bookmarks in the same form from a prepared file bookmarks.txt to
# in.pdf, writing to out.pdf.
cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf
# Use the Split style to build a presentation from the PDF in.pdf,
# each slide staying 10 seconds on screen unless manually advanced.
# The first page, being a title does not move on automatically, and
# has no transition effect.
cpdf -presentation in.pdf 2-end -trans Split -duration 10 -o out.pdf
# Stamp the file watermark.pdf on to each page of in.pdf, writing the
# result to out.pdf.
cpdf -stamp-on watermark.pdf in.pdf -o out.pdf
# Add a page number and date to all the pages in in.pdf using the
# Courier font, writing to out.pdf
cpdf -topleft 10 -font Courier -add-text "Page %Page\nDate %d-%m-%Y" in.pdf -o out.pdf
# Two up impose the file in.pdf, writing to out.pdf
cpdf -twoup-stack in.pdf -o out.pdf
# Add extra blank pages after pages one, three and four of a document.
cpdf -pad-after 1,3,4 in.pdf -o out.pdf
# List the annotations in a file in.pdf to standard output.
cpdf -list-annotations in.pdf
# Might Produce:
# -- # Annotation text content 1 # -- # -- # Annotation text content 2
# --
# Copy the annotations from from.pdf to in.pdf, writing to out.pdf.
cpdf -copy-annotations from.pdf in.pdf -o out.pdf
# Set the document title of in.pdf. writing to out.pdf.
cpdf -set-title "The New Title" in.pdf -o out.pdf
# Set the document in.pdf to open with the Acrobat Viewer's toolbar
# hidden, writing to out.pdf.
cpdf -hide-toolbar true in.pdf -o out.pdf
# Set the metadata in a PDF in.pdf to the contents of the file
# metadata.xml, and write the output to out.pdf.
cpdf -set-metadata metadata.xml in.pdf -o out.pdf
# Set the document in.pdf to open in Acrobat Viewer showing two
# columns of pages, starting on the right, putting the result in
# out.pdf.
cpdf -set-page-layout TwoColumnRight in.pdf -o out.pdf
# Set the document in.pdf to open in Acrobat Viewer in full screen
# mode, putting the result in out.pdf.
cpdf -set-page-mode FullScreen in.pdf -o out.pdf
# Attach the file sheet.xls to in.pdf, writing to out.pdf.
cpdf -attach-file sheet.xls in.pdf -o out.pdf
# Remove any attachments from in.pdf, writing to out.pdf.
cpdf -remove-files in.pdf -o out.pdf
# Blacken all the text in in.pdf, writing to out.pdf.
cpdf -blacktext in.pdf -o out.pdf
# Make sure all lines in in.pdf are at least 2 pts wide, writing to
# out.pdf.
cpdf -thinlines 2pt in.pdf -o out.pdf

View File

@@ -14,7 +14,9 @@ SHELL=/bin/bash
# example entries # example entries
# every 15 min # every 15 min
*/15 * * * * /home/user/command.sh */15 * * * * /home/user/command.sh
# every midnight # every midnight
0 * * * * /home/user/command.sh * 0 * * * /home/user/command.sh
# every Saturday at 8:05 AM # every Saturday at 8:05 AM
5 8 * * 6 /home/user/command.sh 5 8 * * 6 /home/user/command.sh

View File

@@ -1,5 +1,8 @@
# Print date in format suitable for affixing to file names # Print date in format suitable for affixing to file names
date +"%Y%m%d_%H%M%S" date +"%Y%m%d_%H%M%S"
# Convert Unix timestamp to Date # Convert Unix timestamp to Date(Linux)
date -d @1440359821 date -d @1440359821
# Convert Unix timestamp to Date(Mac)
date -r 1440359821

View File

@@ -18,3 +18,5 @@ dd if=/dev/zero of=/dev/null bs=128M status=progress
# DD with "graphical" return # DD with "graphical" return
dcfldd if=/dev/zero of=/dev/null bs=500K dcfldd if=/dev/zero of=/dev/null bs=500K
# This will output the sound from your microphone port to the ssh target computer's speaker port. The sound quality is very bad, so you will hear a lot of hissing.
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp

3
cheat/cheatsheets/deb Normal file
View File

@@ -0,0 +1,3 @@
# Extract contents of a .deb file
$ ar vx foo.deb # -> data.tar.gz
$ tar xf data.tar.gz

View File

@@ -21,3 +21,6 @@ diff -s version1 version2
# To diff the output of two commands or scripts: # To diff the output of two commands or scripts:
diff <(command1) <(command2) diff <(command1) <(command2)
# Generate a patch file from two files
diff -Naur version1 version2 > version.patch

View File

@@ -3,7 +3,7 @@
Indent Select text then press TAB Indent Select text then press TAB
Cut CTRL-w Cut CTRL-w
Copy ALT-w Copy ALT-w
Paste CTRL-y Paste ("yank") CTRL-y
Search/Find CTRL-s Search/Find CTRL-s
Replace ALT-% (ALT-SHIFT-5) Replace ALT-% (ALT-SHIFT-5)
Save CTRL-x CTRL-s Save CTRL-x CTRL-s
@@ -11,7 +11,7 @@
Undo CTRL-x u Undo CTRL-x u
Highlight all text CTRL-x h Highlight all text CTRL-x h
Directory listing CTRL-x d Directory listing CTRL-x d
Cancel a command ESC ESC ESC Cancel a command CTRL-g
Font size bigger CTRL-x CTRL-+ Font size bigger CTRL-x CTRL-+
Font size smaller CTRL-x CTRL-- Font size smaller CTRL-x CTRL--
@@ -39,32 +39,9 @@
Compile some code ALT-x compile Compile some code ALT-x compile
List packages ALT-x package-list-packages List packages ALT-x package-list-packages
# Sudoing within eshell
By default when using the sudo command within eshell you'll just
get "permission denied" messages. To overcome that type:
alias sudo '*sudo $*'
# Line numbers # Line numbers
To add line numbers and enable moving to a line with CTRL-l: To add line numbers and enable moving to a line with CTRL-l:
(global-set-key "\C-l" 'goto-line) (global-set-key "\C-l" 'goto-line)
(add-hook 'find-file-hook (lambda () (linum-mode 1))) (add-hook 'find-file-hook (lambda () (linum-mode 1)))
# Org-mode
To begin org-mode ALT-x org-mode
Table column separator Vertical/pipe character
Reorganize table TAB
Section heading *
Open/collapse section TAB
Open/collapse All CTRL-TAB
Export in other file formats (eg HTML,PDF) CTRL-c CTRL-e
To make org-mode automatically wrap lines:
(add-hook 'org-mode-hook
'(lambda ()
(visual-line-mode 1)))

View File

@@ -2,7 +2,17 @@
ffmpeg -i path/to/file.ext ffmpeg -i path/to/file.ext
# Convert all m4a files to mp3 # Convert all m4a files to mp3
for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320k "${f%.m4a}.mp3"; done for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -vn -b:a 320k "${f%.m4a}.mp3"; done
# Convert video from .foo to .bar
# -g : GOP, for searchability
ffmpeg -i input.foo -vcodec bar -acodec baz -b:v 21000k -b:a 320k -g 150 -threads 4 output.bar
# Convert image sequence to video
ffmpeg -r 18 -pattern_type glob -i '*.png' -b:v 21000k -s hd1080 -vcodec vp9 -an -pix_fmt yuv420p -deinterlace output.ext
# Combine video and audio into one file
ffmpeg -i video.ext -i audio.ext -c:v copy -c:a copy output.ext
# Listen to 10 seconds of audio from a video file # Listen to 10 seconds of audio from a video file
# #
@@ -10,3 +20,4 @@ for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320k "${f%.m4a}.mp3"; d
# -t : seconds to cut # -t : seconds to cut
# -autoexit : closes ffplay as soon as the audio finishes # -autoexit : closes ffplay as soon as the audio finishes
ffmpeg -ss 00:34:24.85 -t 10 -i path/to/file.mp4 -f mp3 pipe:play | ffplay -i pipe:play -autoexit ffmpeg -ss 00:34:24.85 -t 10 -i path/to/file.mp4 -f mp3 pipe:play | ffplay -i pipe:play -autoexit

View File

@@ -40,5 +40,8 @@ find . -maxdepth 2 -name build -type d
# To search all files who are not in .git directory # To search all files who are not in .git directory
find . ! -iwholename '*.git*' -type f find . ! -iwholename '*.git*' -type f
# Find all files that have the same node (hard link) as MY_FILE_HERE # To find all files that have the same node (hard link) as MY_FILE_HERE
find . -type f -samefile MY_FILE_HERE 2>/dev/null find . -type f -samefile MY_FILE_HERE 2>/dev/null
# To find all files in the current directory and modify their permissions
find . -type f -exec chmod 644 {} \;

View File

@@ -11,6 +11,24 @@ git config --global color.ui true
# To stage all changes for commit: # To stage all changes for commit:
git add --all git add --all
# To stash changes locally, this will keep the changes in a separate changelist
# called stash and the working directory is cleaned. You can apply changes
# from the stash anytime
git stash
# To stash changes with a message
git stash save "message"
# To list all the stashed changes
git stash list
# To apply the most recent change and remove the stash from the stash list
git stash pop
# To apply any stash from the list of stashes. This does not remove the stash
# from the stash list
git stash apply stash@{6}
# To commit staged changes # To commit staged changes
git commit -m "Your commit message" git commit -m "Your commit message"
@@ -104,3 +122,30 @@ git clone --depth 1 <remote-url>
# To unshallow a clone # To unshallow a clone
git pull --unshallow git pull --unshallow
# Create a bare branch (one that has no commits on it)
git checkout --orphan branch_name
# Checkout a new branch from a different starting point
git checkout -b master upstream/master
# Remove all stale branches (ones that have been deleted on remote)
# So if you have a lot of useless branches, delete them on Github and then run this
git remote prune origin
# The following can be used to prune all remotes at once
git remote prune $(git remote | tr '\n' ' ')
# Revisions can also be identified with :/text
# So, this will show the first commit that has "cool" in their message body
git show :/cool
# Undo parts of last commit in a specific file
git checkout -p HEAD^ -- /path/to/file
# Revert a commit and keep the history of the reverted change as a separate revert commit
git revert <commit SHA>
# Pich a commit from a branch to current branch. This is different than merge as
# this just applies a single commit from a branch to current branch
git cherry-pick <commit SHA1>

View File

@@ -16,11 +16,18 @@
# To switch between channel windows # To switch between channel windows
ALT+<number>, eg. ALT+1, ALT+2 ALT+<number>, eg. ALT+1, ALT+2
# To list the nicknames within a channel # To list the nicknames within the active channel
/names /names
# To change the topic # To change the channel topic
/topic <description> /topic <description>
# To quit irssi # To limit channel background noise (joins, parts, quits, etc.)
/ignore #foo,#bar JOINS PARTS QUITS NICKS # Quieten only channels `#foo`, `#bar`
/ignore * JOINS PARTS QUITS NICKS # Quieten all channels
# To save the current Irssi session config into the configuration file
/save
# To quit Irssi
/exit /exit

View File

@@ -1,2 +1,9 @@
# To disable the terminal refresh when exiting # To disable the terminal refresh when exiting
less -X less -X
# To save the contents to a file
# Method 1 - Only works when the input is a pipe
s <filename>
# Method 2 - This should work whether input is a pipe or an ordinary file.
Type g or < (g or less-than) | $ (pipe then dollar) then cat > <filename> and Enter.

View File

@@ -4,20 +4,34 @@ sudo lsof -i4
# List all IPv6 network files # List all IPv6 network files
sudo lsof -i6 sudo lsof -i6
# To find listening ports: # List all open sockets
lsof -i
# List all listening ports
lsof -Pnl +M -i4 lsof -Pnl +M -i4
# To find which program is using the port 80: # Find which program is using the port 80
lsof -i TCP:80 lsof -i TCP:80
# List all connections to a specific host
lsof -i@192.168.1.5
# List all processes accessing a particular file/directory # List all processes accessing a particular file/directory
lsof </path/to/file> lsof </path/to/file>
# List all files open for a particular user # List all files open for a particular user
lsof -u <username> lsof -u <username>
# List all files/network connections a given process is using # List all files/network connections a command is using
lsof -c <command-name> lsof -c <command-name>
# List all files a process has open
lsof -p <pid>
# List all files open mounted at /mount/point.
# Particularly useful for finding which process(es) are using a
# mounted USB stick or CD/DVD.
lsof +f -- </mount/point>
# See this primer: http://www.danielmiessler.com/study/lsof/ # See this primer: http://www.danielmiessler.com/study/lsof/
# for a number of other useful lsof tips # for a number of other useful lsof tips

11
cheat/cheatsheets/ncdu Normal file
View File

@@ -0,0 +1,11 @@
# Save results to file
ncdu -o ncdu.file
# Read from file
ncdu -f ncdu.file
# Save results to compressed file
ncdu -o-| gzip > ncdu.file.gz
# Read from compressed file
zcat ncdu.file.gz | ncdu -f-

40
cheat/cheatsheets/nmcli Normal file
View File

@@ -0,0 +1,40 @@
# Desc: Command line interface to NetworkManager
# Connect to a wireless access point - Parameters:
# <wiface> -- the name of your wireless interface
# <ssid> -- the SSID of the access point
# <pass> -- the WiFi password
nmcli d wifi connect <ssid> password <pass> iface <wiface>
# Disconnect from WiFi - Parameters:
# <wiface> -- the name of your wireless interface
nmcli d wifi disconnect iface <wiface>
# Get WiFi status (enabled / disabled)
nmcli radio wifi
# Enable / Disable WiFi
nmcli radio wifi <on|off>
# Show all available WiFi access points
nmcli dev wifi list
# Refresh the available WiFi connection list
nmcli dev wifi rescan
# Show all available connections
nmcli con
# Show only active connections
nmcli con show --active
# Review the available devices
nmcli dev status
# Add a dynamic ethernet connection - parameters:
# <name> -- the name of the connection
# <iface_name> -- the name of the interface
ncmli con add type ethernet con-name <name> ifname <iface_name>
# Bring up the ethernet connection
nmcli con up <name>

22
cheat/cheatsheets/npm Normal file
View File

@@ -0,0 +1,22 @@
# Every command shown here can be used with the `-g` switch for global scope
# Install a package in the current directory
npm install <package>
# Install a package, and save it in the `dependencies` section of `package.json`
npm install --save <package>
# Install a package, and save it in the `devDependencies` section of `package.json`
npm install --save-dev <package>
# Show outdated packages in the current directory
npm outdated
# Update outdated packages
npm update
# Update `npm` (will override the one shipped with Node.js)
npm install -g npm
# Uninstall a package
npm uninstall <package>

View File

@@ -0,0 +1,46 @@
Begin org-mode ALT-x org-mode
Save CTRL-x CTRL-s
Export in other file formats (eg HTML,PDF) CTRL-c CTRL-e
# Outline
Section heading *
New headline ALT-return
Move headline up or down ALT-up_arrow/down_arrow
Adjust indent depth of headline ALT-left_arrow/right_arrow
Open/collapse section TAB
Open/collapse All CTRL-TAB
# To-Do Lists
Mark list item as TODO ** TODO
Cycle through workflow SHIFT-left_arrow/right_arrow
Show only outstanding TODO items CTRL-c CTRL-v
# Tables
Table column separator Vertical/pipe character
Reorganize table TAB
Move column ALT-left_arrow/right_arrow
Move row ALT-up_arrow/down_arrow
# Styles
*bold*
/italic/
_underlined_
=code=
~verbatim~
+strike-through+
# Heading
Header -*- mode: org -*-
# .emacs
To make org-mode automatically wrap lines:
(add-hook 'org-mode-hook
'(lambda ()
(visual-line-mode 1)))

13
cheat/cheatsheets/patch Normal file
View File

@@ -0,0 +1,13 @@
# Patch one file
patch version1 < version.patch
# Reverse a patch
patch -R version1 < version.patch
# Patch all files in a directory, adding any missing new files
# -p strips leading slashes
$ cd dir
$ patch -p1 -i ../big.patch
# Patch files in a directory, with one level (/) offset
patch -p1 -r version1/ < version.patch

View File

@@ -4,6 +4,12 @@ pip search SomePackage
# Install some packages # Install some packages
pip install SomePackage pip install SomePackage
# Install some package in user space
pip install --user SomePackage
# Upgrade some package
pip install --upgrade SomePackage
# Output and install packages in a requirement file # Output and install packages in a requirement file
pip freeze > requirements.txt pip freeze > requirements.txt
pip install -r requirements.txt pip install -r requirements.txt

View File

@@ -0,0 +1,27 @@
# Create a Slackware package from a structured directory and sub-tree
$ cd /path/to/pkg/dir
$ su - c 'makepkg --linkadd y --chown n $foo-1.0.3-x86_64-1_tag.tgz'
# Install a Slackware package
installpkg foo-1.0.3-x86_64-1.tgz
# Install a Slackware package to non-standard location
ROOT=/path/to/dir installpkg foo-1.0.4-noarch-1.tgz
# Create backup of files that will be overwritten when installing
tar czvf /tmp/backup.tar.gz $(installpkg --warn foo-1.0.4-noarch-1.tgz)
# Upgrade a Slackware package including files only in new version
upgradepkg --install-new foo-1.0.6-noarch-1.tgz
# Upgrade a Slackware package even if version is the same
upgradepkg --reinstall foo-1.0.4-noarch-1.tgz
# Remove a Slackware package
removepkg foo-0.2.8-x86_64-1
# Remove a Slackware package, retaining a backup (uninstalled) copy
removepkg -copy foo-0.2.8-x86_64-1 # -> /var/log/setup/tmp/preserved_packages/foo...

View File

@@ -0,0 +1,5 @@
# List contents of RPM
rpm2cpio foo.rpm | cpio -vt
# Extract contents of RPM
rpm2cpio foo.rpm | cpio -vid

32
cheat/cheatsheets/sport Normal file
View File

@@ -0,0 +1,32 @@
# Sync to newest SlackBuild.org tree
sport r
# Search (fuzzy) SlackBuild tree for packages foo and BaR
sport s foo bar
# Operate from alternate build tree
SBOPATH=/path/to/tree sport s foo
# View info and README of BaR (not fuzzy)
sport c foo BaR
# Build a package
sport i --build-only foo
# Build and install package foo and BaR
sport i foo BaR
# Build and install package from current directory
sport i .
# Upgrade instead of install
INSTALLER=upgradepkg sport i foo
# Build dependency list for baz
echo "foo BaR" >> /tmp/baz.list
# Install list of packages from file
sport i $(< /tmp/baz.list)
# Check if package is installed
sport k foo

20
cheat/cheatsheets/sqlite3 Normal file
View File

@@ -0,0 +1,20 @@
# create database and launch interactive shell
sqlite3 example.db
# create table
sqlite3 example.db "CREATE TABLE Os(ID INTEGER PRIMARY KEY, Name TEXT, Year INTEGER);"
# insert data
sqlite3 example.db "INSERT INTO 'Os' VALUES(1,'Linux',1991);"
# list tables
sqlite3 example.db ".tables"
# view records in table
sqlite3 example.db "SELECT * FROM 'Os';"
# view records in table conditionally
sqlite example.db "SELECT * FROM 'Os' WHERE Year='1991';"
# view records with fuzzy matching
sqlite3 ~/example.db "SELECT * FROM 'Os' WHERE Year like '19%';"

View File

@@ -32,3 +32,12 @@ ssh user@example.com -C -c blowfish -X
# Copy files and folders through ssh from remote host to pwd with tar.gz compression # Copy files and folders through ssh from remote host to pwd with tar.gz compression
# when there is no rsync command available # when there is no rsync command available
ssh user@example.com "cd /var/www/Shared/; tar zcf - asset1 asset2" | tar zxf - ssh user@example.com "cd /var/www/Shared/; tar zcf - asset1 asset2" | tar zxf -
# Mount folder/filesystem through SSH
# Install SSHFS from https://github.com/libfuse/sshfs
# Will allow you to mount a folder securely over a network.
sshfs name@server:/path/to/folder /path/to/mount/point
# Emacs can read file through SSH
# Doc: http://www.gnu.org/software/emacs/manual/html_node/emacs/Remote-Files.html
emacs /ssh:name@server:/path/to/file

20
cheat/cheatsheets/svn Normal file
View File

@@ -0,0 +1,20 @@
# update working copy from repository
svn update "/path"
# show changed files in working copy
svn status
# show what changed in local file
svn diff "/path/filename"
# add files or folders
svn add "path/item"
# revert local uncommited changes
svn revert "/path/file"
# commit changes to repo
svn commit -m "message" "/path"
# show help for 'svn diff'
svn help diff

View File

@@ -13,6 +13,12 @@ tmux attach -d
# Display session: # Display session:
tmux ls tmux ls
# Rename session:
Ctrl-b $
# Switch session:
Ctrl-b s
# Start a shared session: # Start a shared session:
tmux -S /tmp/your_shared_session tmux -S /tmp/your_shared_session
chmod 777 /tmp/your_shared_session chmod 777 /tmp/your_shared_session

14
cheat/cheatsheets/trashy Normal file
View File

@@ -0,0 +1,14 @@
# Trash foo and bar
trash foo bar
# Trash "foo bar"
trash foo\ bar
# List files in trash
trash -v --list
# Restore foo from trash
trash --restore foo
# Empty trash
trash --empty

11
cheat/cheatsheets/tree Normal file
View File

@@ -0,0 +1,11 @@
# To display a recursive directory tree
tree
# To make tree output contents from path `/foo/bar`
tree /foo/bar
# To make tree omit any empty directories from the output
tree --prune
# To list directories only (`-d`), and at a max depth of two levels (`-L`)
tree -d -L 2

14
cheat/cheatsheets/urpm Normal file
View File

@@ -0,0 +1,14 @@
# search (fuzzy) for package foo
urpmq -Y foo
# check if foo is installed
rpm -q foo
# install package foo
urpmi foo
# download but don't install foo
urpmi --no-install foo
# uninstall package foo
urpme foo

View File

@@ -23,7 +23,8 @@ B previous start of whitespace-delimited word
$ end of line $ end of line
gg go to first line in file gg go to first line in file
G go to end of file G go to end of file
gk move down one displayed line
gj move up one displayed line
# Insertion # Insertion
# To exit from insert mode use Esc or Ctrl-C # To exit from insert mode use Esc or Ctrl-C
@@ -49,8 +50,14 @@ P paste before cursor
dd delete a line dd delete a line
d{motion} delete text that {motion} moves over d{motion} delete text that {motion} moves over
# Search and replace with the `:substitute` (aka `:s`) command
# Preceding a motion or edition with a number repeats it n times :s/foo/bar/ replace the first match of 'foo' with 'bar' on the current line only
:s/foo/bar/g replace all matches (`g` flag) of 'foo' with 'bar' on the current line only
:%s/foo/bar/g replace all matches of 'foo' with 'bar' in the entire file (`:%s`)
:%s/foo/bar/gc ask to manually confirm (`c` flag) each replacement
# Preceding a motion or edition with a number repeats it 'n' times
# Examples: # Examples:
50k moves 50 lines up 50k moves 50 lines up
2dw deletes 2 words 2dw deletes 2 words

View File

@@ -0,0 +1,38 @@
# Create new environment
virtualenv /path/to/project/env_name
# Create new environment and inherit already installed Python libraries
virtualenv --system-site-package /path/to/project/env_name
# Create new environment with a given Python interpreter
virtualenv /path/to/project/env_name -p /usr/bin/python/3.4
# Activate environnment
source /path/to/project/env_name/bin/activate
# Quit environment
deactivate
# virtualenvwrapper (wrapper for virtualenv)
# installation
pip install --user virtualenvwrapper
# configuration
# add in ~/.bashrc or similar
export WORKON_HOME=~/.virtualenvs
mkdir -p $WORKON_HOME
source ~/.local/bin/virtualenvwrapper.sh
# Create new environmment (with virtualenvwrapper)
mkvirtualenv env_name
# new environmment is stored in ~/.virtualenvs
# Activate environmment (with virtualenvwrapper)
workon env_name
# Quit environmment (with virtualenvwrapper)
deactivate
# Delete environmment (with virtualenvwrapper)
rmvirtualenv env_name

14
cheat/cheatsheets/xmlto Normal file
View File

@@ -0,0 +1,14 @@
# DocBook XML to PDF
xmlto pdf mydoc.xml
# DocBook XML to HTML
xmlto -o html-dir html mydoc.xml
# DocBook XML to single HTML file
xmlto html-nochunks mydoc.xml
# modify output with XSL override
xmlto -m ulink.xsl pdf mydoc.xml
# use non-default xsl
xmlto -x mystylesheet.xsl pdf mydoc.xml

11
cheat/cheatsheets/xrandr Normal file
View File

@@ -0,0 +1,11 @@
# To enable HDMI2 output with maximal resolution:
xrandr --output HDMI2 --auto
# To enable HDMI2 output with specific resolution:
xrandr --output HDMI2 --mode 1280x800
# To enable HDMI2 output next to HDMI1 output:
xrandr --output HDMI2 --auto --right-of HDMI1
# To disable HDMI2 output:
xrandr --output HDMI2 --off

8
cheat/cheatsheets/xxd Normal file
View File

@@ -0,0 +1,8 @@
# Convert bin/string to hex.
# Result: 34322069732074686520736f6c7574696f6e0a
echo '42 is the solution' | xxd -p
# Convert hex to bin/string.
# Result: 42 is the solution
echo '34322069732074686520736f6c7574696f6e0a' | xxd -r -p

View File

@@ -1,10 +1,8 @@
from cheat import sheets
from cheat import utils
from cheat.utils import *
import os import os
import shutil import shutil
import subprocess
from cheat import sheets
from cheat.utils import die, open_with_editor
def copy(current_sheet_path, new_sheet_path): def copy(current_sheet_path, new_sheet_path):
""" Copies a sheet to a new path """ """ Copies a sheet to a new path """
@@ -16,7 +14,7 @@ def copy(current_sheet_path, new_sheet_path):
# fail gracefully if the cheatsheet cannot be copied. This can happen if # fail gracefully if the cheatsheet cannot be copied. This can happen if
# DEFAULT_CHEAT_DIR does not exist # DEFAULT_CHEAT_DIR does not exist
except IOError: except IOError:
die ('Could not copy cheatsheet for editing.') die('Could not copy cheatsheet for editing.')
def create_or_edit(sheet): def create_or_edit(sheet):
@@ -40,22 +38,12 @@ def create_or_edit(sheet):
def create(sheet): def create(sheet):
""" Creates a cheatsheet """ """ Creates a cheatsheet """
new_sheet_path = os.path.join(sheets.default_path(), sheet) new_sheet_path = os.path.join(sheets.default_path(), sheet)
open_with_editor(new_sheet_path)
try:
subprocess.call([editor(), new_sheet_path])
except OSError:
die('Could not launch ' + editor())
def edit(sheet): def edit(sheet):
""" Opens a cheatsheet for editing """ """ Opens a cheatsheet for editing """
open_with_editor(path(sheet))
try:
subprocess.call([editor(), path(sheet)])
except OSError:
die('Could not launch ' + editor())
def exists(sheet): def exists(sheet):
@@ -84,5 +72,5 @@ def read(sheet):
if not exists(sheet): if not exists(sheet):
die('No cheatsheet found for ' + sheet) die('No cheatsheet found for ' + sheet)
with open (path(sheet)) as cheatfile: with open(path(sheet)) as cheatfile:
return cheatfile.read() return cheatfile.read()

View File

@@ -1,12 +1,14 @@
from cheat import cheatsheets
from cheat.utils import *
import os import os
from cheat import cheatsheets
from cheat.utils import die
def default_path(): def default_path():
""" Returns the default cheatsheet path """ """ Returns the default cheatsheet path """
# determine the default cheatsheet dir # determine the default cheatsheet dir
default_sheets_dir = os.environ.get('DEFAULT_CHEAT_DIR') or os.path.join(os.path.expanduser('~'), '.cheat') default_sheets_dir = os.environ.get('DEFAULT_CHEAT_DIR') or os.path.join('~', '.cheat')
default_sheets_dir = os.path.expanduser(os.path.expandvars(default_sheets_dir))
# create the DEFAULT_CHEAT_DIR if it does not exist # create the DEFAULT_CHEAT_DIR if it does not exist
if not os.path.isdir(default_sheets_dir): if not os.path.isdir(default_sheets_dir):
@@ -22,7 +24,7 @@ def default_path():
if not os.access(default_sheets_dir, os.R_OK): if not os.access(default_sheets_dir, os.R_OK):
die('The DEFAULT_CHEAT_DIR (' + default_sheets_dir +') is not readable.') die('The DEFAULT_CHEAT_DIR (' + default_sheets_dir +') is not readable.')
if not os.access(default_sheets_dir, os.W_OK): if not os.access(default_sheets_dir, os.W_OK):
die('The DEFAULT_CHEAT_DIR (' + default_sheets_dir +') is not writeable.') die('The DEFAULT_CHEAT_DIR (' + default_sheets_dir +') is not writable.')
# return the default dir # return the default dir
return default_sheets_dir return default_sheets_dir
@@ -81,10 +83,10 @@ def search(term):
for cheatsheet in sorted(get().items()): for cheatsheet in sorted(get().items()):
match = '' match = ''
for line in open(cheatsheet[1]): for line in open(cheatsheet[1]):
if term in line: if term in line:
match += ' ' + line match += ' ' + line
if not match == '': if match != '':
result += cheatsheet[0] + ":\n" + match + "\n" result += cheatsheet[0] + ":\n" + match + "\n"
return result return result

View File

@@ -1,6 +1,7 @@
from __future__ import print_function from __future__ import print_function
import os import os
import sys import sys
import subprocess
def colorize(sheet_content): def colorize(sheet_content):
@@ -30,34 +31,30 @@ def die(message):
def editor(): def editor():
""" Determines the user's preferred editor """ """ Determines the user's preferred editor """
if 'EDITOR' not in os.environ:
# determine which editor to use
editor = os.environ.get('CHEAT_EDITOR') \
or os.environ.get('VISUAL') \
or os.environ.get('EDITOR') \
or False
# assert that the editor is set
if editor == False:
die( die(
'In order to create/edit a cheatsheet you must set your EDITOR ' 'You must set a CHEAT_EDITOR, VISUAL, or EDITOR environment '
'environment variable to your editor\'s path.' 'variable in order to create/edit a cheatsheet.'
) )
elif os.environ['EDITOR'] == "": return editor
die(
'Your EDITOR environment variable is set to an empty string. It must '
'be set to your editor\'s path.'
)
else:
return os.environ['EDITOR']
def prompt_yes_or_no(question): def open_with_editor(filepath):
""" Prompts the user with a yes-or-no question """ """ Open `filepath` using the EDITOR specified by the environment variables """
# Support Python 2 and 3 input editor_cmd = editor().split()
# Default to Python 2's input() try:
get_input = raw_input subprocess.call(editor_cmd + [filepath])
except OSError:
# If this is Python 3, use input() die('Could not launch ' + editor())
if sys.version_info[:2] >= (3, 0):
get_input = input
print(question)
return get_input('[y/n] ') == 'y'
def warn(message): def warn(message):

BIN
man1/cheat.1.gz Normal file

Binary file not shown.

View File

@@ -3,7 +3,7 @@ import os
setup( setup(
name = 'cheat', name = 'cheat',
version = '2.1.22', version = '2.1.27',
author = 'Chris Lane', author = 'Chris Lane',
author_email = 'chris@chris-allen-lane.com', author_email = 'chris@chris-allen-lane.com',
license = 'GPL3', license = 'GPL3',