Fix the paginator when used in combination with the `-s` (search)
subcommand. Previously, it would not behave as intended, because `cheat`
was writing to `stdout` at inappropriate times.
Squashed commit of the following:
commit 5c322e79b7
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Fri Mar 6 19:56:56 2020 -0500
docs(README): update the `README`
Update the `README` to document the improved config-generation
mechanism.
commit 803e1f014c
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Fri Mar 6 19:19:49 2020 -0500
feat(config-init): platform-specific pathing
Update `--init` subcommand to rely upon the same platform-detection
intelligence that was previously implemented by the "installer".
The installer and `--init` should now produce identical config files.
commit 99c48097e2
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Fri Mar 6 18:26:33 2020 -0500
feat(installer): platform-correct config templating
Modify the "installer" to populate cheatpaths with sensible defaults
based on the detection of the user's operating system and environment.
commit 8e1580ff5a
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Mar 5 20:19:58 2020 -0500
fix(tests): fix `config.Paths` tests
Refactor `config.Paths` (by externalizing a call to `homedir.Dir`) to
decouple it from filesystem paths, thus facilitating cleaner unit-tests.
commit a08dca70d9
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Mar 5 18:14:27 2020 -0500
feat(installer): default path selection
Modify the installer to improve default config and cheatsheet path
selection.
commit e15bc6c966
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Mar 5 17:49:50 2020 -0500
fix(typo): correct comment typo in `main.go`
commit efd09575df
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Mar 5 17:46:49 2020 -0500
feat(config): refactor config path detection
Previously, failing other checks, on Unix and BSD systems,
`config.Paths` would attempt to compute the user's home directory by
reading the `HOME` environment variable.
This change deprecates that approach with a call to `homedir.Dir`, which
is used elsewhere throughout the application.
commit ec10244ebe
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Mar 5 17:15:28 2020 -0500
chore(installer): delete unused file
Delete `installer/installer.go`, which (in hindsight) was unnecessary.
commit ebd9ec6287
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Wed Mar 4 19:31:13 2020 -0500
wip(installer): stub experimental "installer"
Stubs out an experimental "installer" that will help new users to
quickly configure `cheat`.
commit ecac5a0971
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Wed Mar 4 19:30:12 2020 -0500
chore(dependencies): updates vendored dependencies
Dramatically improves the usefulness of `--search` by outputting
"chunked" results. This removes the need (usually) to search and then
manually open a cheatsheet.
- Deprecates the `Match` struct
- Applies syntax highlighting to search results output in a manner
consistent with the 'View' output
- Refactors search to move colorization functionality outside of its
concern
Squashed commit of the following:
commit 8b74d50f1f
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sun Feb 2 14:40:23 2020 -0500
chore: updates README
Edits the `README` to provid updated information regarding the shell
autocompletion scripts and `fzf` integration.
commit 9868ba2d68
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sun Feb 2 14:39:04 2020 -0500
chore: modifies envvar check
Modifies the `CHEAT_USE_FZF` envvar check within the bash autocompletion
script for clarity.
commit ac1012f743
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sun Feb 2 14:25:34 2020 -0500
chore: renames autocompletion scripts
Renames autocompletion scripts to conform with the conventions
established in `scop/bash-completion`.
commit c8747bd91d
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sun Feb 2 14:23:03 2020 -0500
feat: improved bash autocompletions
- Dramatically improves quality of bash autocompletions
- Provides optional integration with `fzf`
commit 825bd0139d
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sun Feb 2 09:19:46 2020 -0500
chore: deletes `fzf.bash`
Deletes `fzf.bash`, which was always intended to be a temporary
placeholder anticipating future improvements.
Attempts to resolve an issue regarding automatic config file generation,
as referenced in #501. This issue is believed occur when
`XDG_CONFIG_HOME` is unset.
Performs a minor refactoring on `config.Paths` to consistently use
`path.Join` when computing config directory paths. Previously, both
`path.Join` and `fmt.Sprintf` were being used, strictly due to an
oversight.
Fixes an issue whereby the error message generated when a config file
could not be loaded (due to a symlink resolution failure) would fail to
print the config file path to `stderr`.
- Generally reduces the complexity demonstrated in the example configs.
The prior complexity appears to have confused some new users.
- Removes the `dotfiles` references in the example configs. This idiom
likewise appears to have confused some new users.
- Adds some instruction regarding how to download and configure the
"community" cheatsheets (`cheat/cheatsheets`).
Previously, `build-release` would produce `.gz` files which had the
execute permission set. This modifies the `Makefile` to `chmod -x` the
`.gz` files after compression.
* chore: trivial Makefile changes
Trivial `Makefile` changes regarding file pathing.
* chore: build flags
- Passes `-trimpath` flag to build tasks
- Creates `make ci` task and modifies `travis.yml` to use it
- Bumps version to `3.3.2`
* makefile wip
* feat: adds Makefile
Adds a `Makefile` for managing build-related tasks.
* chore: updates dependencies
* chore: updates dependencies
* chore: updates bin scripts
- Removes `build_release.sh`
- Places deprecation notice in `build_devel.sh`, as its purpose has been
superceded by the `Makefile`.
* chore: updates bin scripts
- Removes `build_release.sh`
- Places deprecation notice in `build_devel.sh`, as its purpose has been
superceded by the `Makefile`.
* fix: Makefile
Makes several corrections and improvements to the `Makefile`:
- Previously, the `ifeq` rules were not behaving as intended, due to
false assumptions regarding how `make` fundamentally behaves.
Malfunctioning imperative-style programming has been replaced with
declarative rules to repair this issue.
- Previously, all release executables were zipped after compilation. In
order to spare non-Windows users from (possibly) needing to install a
package to unzip the executables, all non-Windows binaries are now
compressed with `gzip`. (Windows executables are still compressed with
`zip`.)
- Removes a bit of needlessly verbosity in several rules and paths.
* chore: updates dependencies
* chore: bumps version to 3.3.1
* feat: directory-scoped cheatpaths
`cheat` now searches for a `.cheat` directory in the current working
directory. If found, that directory is (temporarily) appended to the slice
of cheatpaths.
* makefile wip
* fix: appeases linter
Appeases linter (`go vet`) by adding quotation marks to YAML struct
tags.
* chore: modifies .gitignore
Adds `tag` to `.gitignore`
* feat: adds Makefile
Adds a `Makefile` for managing build-related tasks.
* chore: documents directory-local paths
Adds documentation regarding the new directory-local cheatpath
functionality.
* chore: updates dependencies
* chore: bumps version to 3.3.0
* chore: updates bin scripts
- Removes `build_release.sh`
- Places deprecation notice in `build_devel.sh`, as its purpose has been
superceded by the `Makefile`.
- Corrects an error with `--search`. Previously, `--search` was not
aware of whether it was outputted to a TTY, and would apply colorization
at all times. This resulted in unwanted behavior when, for example,
piping search results into a paginator.
- Corrects an error with `--color`. Previously, `--color` would be
ignored if output was being written to a non-TTY. This made it
impossible, for example, to `cheat tar --color | less -R`, as
colorization would always be stripped. The behavior of `--color` has
been modified such that it now behaves similarly to `--color=always` in
other applications.
Build scripts now invoke `go mod vendor` and `go mod tidy` early in the
build process, to ensure that the `vendor` directory stays consistent
with the `go.mod` et. al.
Repairs the `config` unit-tests which were broken with `3.0.4`. It does
so by providing a simple switch that allows us to disable the resolution
of filesystem symlinks when running tests.
- Deprecates `bin/deps.sh`. It was rendered obsolete with 217566, and
the introduction of a `go.mod` file.
- Fixes two minor typos in the buld scripts.
- Bumps the version to `3.0.1`.
- Re-implemented the project in Golang, and deprecated Python entirely
- Implemented several new, long-requested features
- Refactored cheatsheets into a separate repository
This change causes site_config_dir function to return
/etc/cheat on linux systems. This is right because most
linux distributions follow FHS where /etc is a directory
which contains system-wide configuration files.
dpkg -I (capital i) is for showing information about a package.
dpkg -l (lowercase l) is for listing packages matching given pattern.
So, here is a fix for the typo.
The prior attempt to resolve#420 and #431 relied on `appdirs` to
determine the appropriate directories into which to install files.
Previously, `setup.py` dynamically attempted to install `appdirs` via
`pip` during installation if necessary.
This attempt to failed on multiple platforms, however, due to
backwards-incompatible `pip` interfaces.
As a workaround, I have now directly included `appdirs` (a small module)
within `cheat` itself. This approach is explicitly supported per the
`appdirs` documentation:
https://pypi.org/project/appdirs/
Resolves the following:
- #351 (use of `sudo` when installing)
- #420 (failure to install on Windows)
- #431 (failure to install on MacOS)
Application now relies on `appdirs` module to identify the appropriate
locations for storing configuration and data, both during installation
and runtime.
Attempted to address various cross-platform installation issues:
- Removed all hard-coded references to file-paths, and replaced them
with paths provided by `appdirs`.
- Removed (erroneously inserted) default file paths which would never be
checked due to application logic.
- Modified `setup.py` to no longer install a configuration file. The
mechanics are still in place to **read** a configuration file, but
after examination, I've concluded that the installation of that file
is best left to package maintainers rather than `cheat` itself.
The prior attempt to resolve#420 and #431 relied on `appdirs` to
determine the appropriate directories into which to install files.
Previously, `setup.py` dynamically attempted to install `appdirs` via
`pip` during installation if necessary.
This attempt to failed on multiple platforms, however, due to
backwards-incompatible `pip` interfaces.
As a workaround, I have now directly included `appdirs` (a small module)
within `cheat` itself. This approach is explicitly supported per the
`appdirs` documentation:
https://pypi.org/project/appdirs/
Resolves the following:
- #351 (use of `sudo` when installing)
- #420 (failure to install on Windows)
- #431 (failure to install on MacOS)
Application now relies on `appdirs` module to identify the appropriate
locations for storing configuration and data, both during installation
and runtime.
This doesn't give an SSH shell, but just forwards the ports - which is what one usually requires when setting up a SOCKS proxy.
The -q is to suppress messages etc.
- Added `ci/lint.sh`, which uses `flake8` to lint the relevant files
- Made changes to appease the linter.
- Bugfix in `cheat/configuration` (missing dependency)
Refactored `Sheet` class:
- Removed unnecessary indirection and extraneous methods
- Renamed some methods to conform to Pythonic conventions
- Renamed the `create_or_edit` method to `edit` to be consistent with
subcommand name (`--edit`)
- Extracted `Colorize` class out of `Util` class. (The latter now only
contains static methods.)
- Renamed methods in `Colorize` class for improved clarity.
- Refactored as necessary to accommodate the changes above.
Performed a general refactoring, focusing on the following:
- Removing layers of abstraction in config handling
- Stubbing out proper config validator
- Updating envvar names located throughout the project
Added a missing `termcolor` dependency to `install_requires` in
`setup.py`. `termcolors` was introduced as an optional dependency when
the `CHEAT_HIGHLIGHT` envvar was implemented.
PR #391 changed the locaton into which system-wide cheatsheets are
installed to `/usr/share/cheat`, in order to comply with FHS. However,
this is causing conflicts with the `snap` packaging process.
This commit removes hard-coded references to `/usr/share/cheat` (outside
of `config/cheat`), and instead reads the cheat path via the
`CHEAT_PATH` config value (which may be set either in `cheat/config`, or
exported as an environment variable).
Lastly, this commit makes `setup.py` "aware of" the `CHEAT_PATH` env
var, allowing us to specify to where sytem-wide cheatsheets should be
installed during the `snap` build.
Previous pull-requests #406 and #413 attempted to resolve#372. They
were, however, never merged in.
Given that #391 was just merged (which rewrites a significant amount of
prior code), I here took what we learned from #406 and #413 and
re-implemented it. This approach will be less error-prone than
attempting to rebase either of the former on the changes introduced in
#391.
Constructors of classes which need direct access to configuration
now take Config class instance as parameter which will give them
better maintainability in the future
CHEAT_HIGHLIGHT has been added to Configuration class
Implemnted an assertion that `CHEAT_HIGHLIGHT` (if set) contains a value
that is acceptible to `termcolors`. This happens only once, upon the
invokation of `__main__`. If the assertion fails, `cheat` terminates
with an exit code of `1`.
PR #353 implemented highlighting on search terms within search results.
This PR:
- Merges the above
- Makes a few modifications upon the implementation
Specifically, the new implementation no longer relies on hard-coded
escape-sequences. Instead, a new `highlight` function has been created,
which in turn attempts to defer to the `termcolors` library to colorize
the necessary text.
There is a small error in this sample :
**bs=BYTES** --> read and write up to BYTES bytes at a time
**count=N** --> copy only N input blocks
just inverse please
- When using GFM code fences, strip the last line in addition to the
first
- Updated `README.md` to mention the new feature
- `minor` version-bump to `2.2.0`.
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
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.
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.
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.
- 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
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.
* 'sheets' of https://github.com/dufferzafar/chris-cheat:
New Sheet: ffmpeg - fast audio video encoder
Git cheats: Shallow clones & Submodule update
Git cheats: Change date of existing commit
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)
# To open a TCP connection to port 42 of host.example.com, using port 31337 as the source port, with a timeout of 5 seconds:
nc -p 31337 -w 5 host.example.com 42
# To open a UDP connection to port 53 of host.example.com:
nc -u host.example.com 53
# To open a TCP connection to port 42 of host.example.com using 10.1.2.3 as the IP for the local end of the connection:
nc -s 10.1.2.3 host.example.com 42
# To create and listen on a UNIX-domain stream socket:
nc -lU /var/tmp/dsocket
# To connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4, port 8080. This example could also be used by ssh(1); see the ProxyCommand directive in ssh_config(5) for more information.
nc -x10.2.3.4:8080 -Xconnect host.example.com 42
# The same example again, this time enabling proxy authentication with username "ruser" if the proxy requires it:
# To display routing table IP addresses instead of host names:
route -n
# To add a default gateway:
route add default gateway 192.168.0.1
# To add the normal loopback entry, using netmask 255.0.0.0 and associated with the "lo" device (assuming this device was previously set up correctly with ifconfig(8)).
route add -net 127.0.0.0 netmask 255.0.0.0 dev lo
# To add a route to the local network 192.56.76.x via "eth0". The word "dev" can be omitted here.
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
# To delete the current default route, which is labeled "default" or 0.0.0.0 in the destination field of the current routing table.
route del default
# To add a default route (which will be used if no other route matches). All packets using this route will be gatewayed through "mango-gw". The device which will actually be used for that route depends on how we can reach "mango-gw" - the static route to "mango-gw" will have to be set up before.
route add default gw mango-gw
# To add the route to the "ipx4" host via the SLIP interface (assuming that "ipx4" is the SLIP host).
route add ipx4 sl0
# To add the net "192.57.66.x" to be gateway through the former route to the SLIP interface.
# To install a rejecting route for the private network "10.x.x.x."
route add -net 10.0.0.0 netmask 255.0.0.0 reject
# This is an obscure one documented so people know how to do it. This sets all of the class D (multicast) IP routes to go via "eth0". This is the correct normal configuration line with a multicasting kernel
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
# To ssh via pem file (which normally needs 0600 permissions):
ssh -i /path/to/file.pem user@example.com
# To connect on an non-standard port:
ssh -p 2222 user@example.com
# To execute a command on a remote server:
ssh -t user@example.com 'the-remote-command'
# To tunnel an x session over SSH:
ssh -X user@example.com
# To launch a specific x application over SSH:
ssh -X -t user@example.com 'chromium-browser'
# To create a SOCKS proxy on localhost and port 9999
ssh -D 9999 user@example.com
# -X use an xsession, -C compress data, "-c blowfish" use the encryption blowfish
ssh user@example.com -C -c blowfish -X
# For more information, see:
# http://unix.stackexchange.com/q/12755/44856
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.