diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..b3192f1 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include CHANGELOG +include CONTRIBUTING.md +include LICENSE +include README.md +include licenses/gpl-3.txt +include licenses/mit.txt diff --git a/bin/cheat b/bin/cheat index 19ad97d..5d5aec0 100755 --- a/bin/cheat +++ b/bin/cheat @@ -38,7 +38,7 @@ from docopt import docopt if __name__ == '__main__': # parse the command-line options - options = docopt(__doc__, version='cheat 2.1.26') + options = docopt(__doc__, version='cheat 2.1.27') # list directories if options['--directories']: diff --git a/cheat/cheatsheets/7z b/cheat/cheatsheets/7z index 86b55d5..26321c0 100644 --- a/cheat/cheatsheets/7z +++ b/cheat/cheatsheets/7z @@ -11,7 +11,7 @@ u update x extract with full paths Example: -7z a -t7z -m0-lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1 +7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1 -t7z 7z archive -m0=lzma lzma method diff --git a/cheat/cheatsheets/aria2c b/cheat/cheatsheets/aria2c new file mode 100644 index 0000000..265e0b3 --- /dev/null +++ b/cheat/cheatsheets/aria2c @@ -0,0 +1,12 @@ +# Just download a file +# The url can be a http(s), ftp, .torrent file or even a magnet link +aria2c + +# To prevent downloading the .torrent file +aria2c --follow-torrent=mem + +# 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 diff --git a/cheat/cheatsheets/bzip2 b/cheat/cheatsheets/bzip2 new file mode 100644 index 0000000..4003a50 --- /dev/null +++ b/cheat/cheatsheets/bzip2 @@ -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 diff --git a/cheat/cheatsheets/cheat b/cheat/cheatsheets/cheat new file mode 100644 index 0000000..0bfb78d --- /dev/null +++ b/cheat/cheatsheets/cheat @@ -0,0 +1,14 @@ +# To see example usage of a program: +cheat + +# To edit a cheatsheet +cheat -e + +# To list available cheatsheets +cheat -l + +# To search available cheatsheets +cheat -s + +# To get the current `cheat' version +cheat -v diff --git a/cheat/cheatsheets/deb b/cheat/cheatsheets/deb new file mode 100644 index 0000000..7e4c761 --- /dev/null +++ b/cheat/cheatsheets/deb @@ -0,0 +1,3 @@ +# Extract contents of a .deb file +$ ar vx foo.deb # -> data.tar.gz +$ tar xf data.tar.gz diff --git a/cheat/cheatsheets/diff b/cheat/cheatsheets/diff index f9f2b3e..f998808 100644 --- a/cheat/cheatsheets/diff +++ b/cheat/cheatsheets/diff @@ -21,3 +21,6 @@ diff -s version1 version2 # To diff the output of two commands or scripts: diff <(command1) <(command2) + +# Generate a patch file from two files +diff -Naur version1 version2 > version.patch diff --git a/cheat/cheatsheets/emacs b/cheat/cheatsheets/emacs index 57b76e9..4201c0a 100644 --- a/cheat/cheatsheets/emacs +++ b/cheat/cheatsheets/emacs @@ -3,7 +3,7 @@ Indent Select text then press TAB Cut CTRL-w Copy ALT-w - Paste CTRL-y + Paste ("yank") CTRL-y Search/Find CTRL-s Replace ALT-% (ALT-SHIFT-5) Save CTRL-x CTRL-s @@ -11,7 +11,7 @@ Undo CTRL-x u Highlight all text CTRL-x h Directory listing CTRL-x d - Cancel a command ESC ESC ESC + Cancel a command CTRL-g Font size bigger CTRL-x CTRL-+ Font size smaller CTRL-x CTRL-- @@ -39,32 +39,9 @@ Compile some code ALT-x compile 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 To add line numbers and enable moving to a line with CTRL-l: (global-set-key "\C-l" 'goto-line) (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))) diff --git a/cheat/cheatsheets/ffmpeg b/cheat/cheatsheets/ffmpeg index 952c45b..daa7a68 100644 --- a/cheat/cheatsheets/ffmpeg +++ b/cheat/cheatsheets/ffmpeg @@ -2,7 +2,17 @@ ffmpeg -i path/to/file.ext # 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 # @@ -10,3 +20,4 @@ for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320k "${f%.m4a}.mp3"; d # -t : seconds to cut # -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 + diff --git a/cheat/cheatsheets/hg b/cheat/cheatsheets/hg new file mode 100644 index 0000000..8cfbaf2 --- /dev/null +++ b/cheat/cheatsheets/hg @@ -0,0 +1,20 @@ +# Clone a directory +hg clone + +# Add files to hg tracker +hg add filename + +# Add all files in a folder to hg tracker +hg add folder/ + +# Create a commit with all tracked changes and a message +hg commit -m "message" + +# Push commits to source repository +hg push + +# Pull changes from source repository +hg pull + +# Rebase local commits to disambiguate with remote repository +hg pull --rebase diff --git a/cheat/cheatsheets/npm b/cheat/cheatsheets/npm index 73c9b3d..ba85087 100644 --- a/cheat/cheatsheets/npm +++ b/cheat/cheatsheets/npm @@ -19,4 +19,4 @@ npm update npm install -g npm # Uninstall a package -npm unintall +npm uninstall diff --git a/cheat/cheatsheets/org-mode b/cheat/cheatsheets/org-mode new file mode 100644 index 0000000..785cdb8 --- /dev/null +++ b/cheat/cheatsheets/org-mode @@ -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))) diff --git a/cheat/cheatsheets/patch b/cheat/cheatsheets/patch new file mode 100644 index 0000000..a3485c6 --- /dev/null +++ b/cheat/cheatsheets/patch @@ -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 diff --git a/cheat/cheatsheets/pkgtools b/cheat/cheatsheets/pkgtools new file mode 100644 index 0000000..d130750 --- /dev/null +++ b/cheat/cheatsheets/pkgtools @@ -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... \ No newline at end of file diff --git a/cheat/cheatsheets/popd b/cheat/cheatsheets/popd new file mode 100644 index 0000000..a913b2f --- /dev/null +++ b/cheat/cheatsheets/popd @@ -0,0 +1,2 @@ +# Returns to the directory at the top of the `pushd' stack +popd diff --git a/cheat/cheatsheets/pushd b/cheat/cheatsheets/pushd new file mode 100644 index 0000000..5202960 --- /dev/null +++ b/cheat/cheatsheets/pushd @@ -0,0 +1,5 @@ +# Pushes your current directory to the top of a stack while changing to the specified directory +pushd + +# To return use popd +popd diff --git a/cheat/cheatsheets/rpm2cpio b/cheat/cheatsheets/rpm2cpio new file mode 100644 index 0000000..c1ec783 --- /dev/null +++ b/cheat/cheatsheets/rpm2cpio @@ -0,0 +1,5 @@ +# List contents of RPM +rpm2cpio foo.rpm | cpio -vt + +# Extract contents of RPM +rpm2cpio foo.rpm | cpio -vid \ No newline at end of file diff --git a/cheat/cheatsheets/shutdown b/cheat/cheatsheets/shutdown new file mode 100644 index 0000000..52e914e --- /dev/null +++ b/cheat/cheatsheets/shutdown @@ -0,0 +1,8 @@ +# Reboot the system immediately +shutdown -r now + +# Shut system down immediately +shutdown -h now + +# Reboot system after 5 minutes +shutdown -r +5 diff --git a/cheat/cheatsheets/sport b/cheat/cheatsheets/sport new file mode 100644 index 0000000..f3963cd --- /dev/null +++ b/cheat/cheatsheets/sport @@ -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 diff --git a/cheat/cheatsheets/sqlite3 b/cheat/cheatsheets/sqlite3 new file mode 100644 index 0000000..a3215b9 --- /dev/null +++ b/cheat/cheatsheets/sqlite3 @@ -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%';" \ No newline at end of file diff --git a/cheat/cheatsheets/su b/cheat/cheatsheets/su new file mode 100644 index 0000000..dec7bcc --- /dev/null +++ b/cheat/cheatsheets/su @@ -0,0 +1,2 @@ +# Switch to another user account +su USERNAME diff --git a/cheat/cheatsheets/trashy b/cheat/cheatsheets/trashy new file mode 100644 index 0000000..edc6d2b --- /dev/null +++ b/cheat/cheatsheets/trashy @@ -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 diff --git a/cheat/cheatsheets/urpm b/cheat/cheatsheets/urpm new file mode 100644 index 0000000..3cb93f2 --- /dev/null +++ b/cheat/cheatsheets/urpm @@ -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 diff --git a/cheat/cheatsheets/xmlto b/cheat/cheatsheets/xmlto new file mode 100644 index 0000000..51a67f0 --- /dev/null +++ b/cheat/cheatsheets/xmlto @@ -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 diff --git a/cheat/sheet.py b/cheat/sheet.py index 7f62405..ff1ce27 100644 --- a/cheat/sheet.py +++ b/cheat/sheet.py @@ -1,9 +1,8 @@ import os import shutil -import subprocess from cheat import sheets -from cheat.utils import die, editor +from cheat.utils import die, open_with_editor def copy(current_sheet_path, new_sheet_path): """ Copies a sheet to a new path """ @@ -39,22 +38,12 @@ def create_or_edit(sheet): def create(sheet): """ Creates a cheatsheet """ new_sheet_path = os.path.join(sheets.default_path(), sheet) - - try: - subprocess.call([editor(), new_sheet_path]) - - except OSError: - die('Could not launch ' + editor()) + open_with_editor(new_sheet_path) def edit(sheet): """ Opens a cheatsheet for editing """ - - try: - subprocess.call([editor(), path(sheet)]) - - except OSError: - die('Could not launch ' + editor()) + open_with_editor(path(sheet)) def exists(sheet): diff --git a/cheat/sheets.py b/cheat/sheets.py index 4e09143..1a0b28e 100644 --- a/cheat/sheets.py +++ b/cheat/sheets.py @@ -7,7 +7,8 @@ def default_path(): """ Returns the default cheatsheet path """ # 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 if not os.path.isdir(default_sheets_dir): diff --git a/cheat/utils.py b/cheat/utils.py index 98195ab..58c27c4 100644 --- a/cheat/utils.py +++ b/cheat/utils.py @@ -1,6 +1,7 @@ from __future__ import print_function import os import sys +import subprocess def colorize(sheet_content): @@ -46,6 +47,16 @@ def editor(): return editor + +def open_with_editor(filepath): + """ Open `filepath` using the EDITOR specified by the environment variables """ + editor_cmd = editor().split() + try: + subprocess.call(editor_cmd + [filepath]) + except OSError: + die('Could not launch ' + editor()) + + def warn(message): """ Prints a message to stderr """ print((message), file=sys.stderr) diff --git a/man1/cheat.1.gz b/man1/cheat.1.gz new file mode 100644 index 0000000..65bc32f Binary files /dev/null and b/man1/cheat.1.gz differ diff --git a/setup.py b/setup.py index abd32c4..7587b27 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import os setup( name = 'cheat', - version = '2.1.26', + version = '2.1.27', author = 'Chris Lane', author_email = 'chris@chris-allen-lane.com', license = 'GPL3',