- Refactor `installer.clone` into new `repo.Clone` package and method.
- Refactor `sheets.isGitDir` into `repo.GitDir`.
Both of these changes read better, and will facilitate cleaner
architecture when `--update` is implemented.
Integrate `go-git` into the application, and use it to `git clone`
cheatsheets when the installer runs.
Previously, the installer required that `git` be installed on the system
`PATH`, so this change has to big advantages:
1. It removes that system dependency on `git`
2. It paves the way for implementing the `--update` command
Additionally, `cheat` now performs a `--depth=1` clone when installing
cheatsheets, which should at least somewhat improve installation times
(especially on slow network connections).
- Fix an issue whereby `make clean` filed to remove assets created by
`make generate`.
- Fix a subsequent issue whereby `make generate` was being run too late
in the `make build` target, which resulted in a build failure.
Fix an issue whereby a default installation (as created by the
installer) would (seemingly) fail to output colorized text, even when
the `-c` flag was passed.
The root cause of the problem was that the installer did not set a
default `style` for `chroma`, which in turn defaulted to using the `bw`
(black-and-white) style.
Thus, colorization actually *was* being applied with `-c` - it was
simply black and white!
Fix an issue whereby colorization would output ANSI codes if a pager was
not configured.
The solution here is to stop guessing about the state of the user's
system at runtime, as well as the user's intention. The installer now
chooses an appropriate installer when generating configs, and no longer
bothers searching for pagers at runtime.
Fix an issue whereby ANSI escape characters could appear in search
output when a pager was not configured.
The root cause of the problem was code that was overzealously applying
an underlying effect to search terms.
This commit simply rips out underlying entirely, both as means of
resolving this problem, and also simply for removing needless visual
noise from search output.
Modify `Sheets.Load` to not walk hidden directories like `.git`. This
optimization can potentially prevent thousands of system calls from
being made, because `.git` directories can contain many files.
Bury the `more` pager default on Linux in an effort to work around the
following problem:
https://github.com/cheat/cheat/issues/681#issuecomment-1201842334
We're satisficing for this kludge because it does not appear to be
possible to actually make `more` perform as expected in all
environments.
Fix an issue whereby the installer installed cheatsheets into the wrong
directory on Windows. This occurred because previously `path.Join` was
used where `path/filepath.Join` should have been used.
This matters, because the former always uses `/` as the path separator,
whereas the latter will use `/` or `\` as is appropriate for the
runtime environment.
This should resolve bullet point 4 in #665.
- Update the default config file to use `more` instead of `less` as the
default pager, in order to support Windows out-of-the-box. (#655, #665).
- Use `terminal` Chroma formatter (rather than `terminal16m`) in order
to accommodate less capable terminal emulators like `cmd.exe` by
default. Similarly, default to `colorize: false` in configs (changed
from `true`) (#665).
- Comment out default `style` in order to avoid printing ANSI color
codes into terminals without color support (#665)
- Attempt to intelligently choose a default editor, rather than rely on
a hard-coded `vim` in the configs. This should make it easier to use
`cheat` immediately without needing to specify configs. It should also
improve `cheat`'s Windows compatibility. (#665)
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 5c322e79b7b6fa6bef51cac2f9b03fe2eaf08163
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 803e1f014cc89c30bfb80549b64195235b8b9f62
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 99c48097e2e23755710d08a099918675895192f7
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 8e1580ff5a30ae3241c3f02b806666583c5d44b2
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 a08dca70d90bb6d568d44abf76b2bd911d929001
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 e15bc6c966bfdca3b507504c95a34b74e264be11
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 efd09575df4422449d6178cd922a680e0f871c21
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 ec10244ebeb2a48e5c694aeabb8bcbc177a77369
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 ebd9ec62873d7f286586ea0af9113d74b8a1d2f2
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 ecac5a09717a4a4714637946d3699da5db97fcc7
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 8b74d50f1fabb28b0fe58eff651847d1e5b661dd
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 9868ba2d68d4c7ded6bca2eee5e8717605c8afab
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 ac1012f743a23e3fae528206a81b4d71f06423c0
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 c8747bd91de99c8ddaa152ea38c9abf88c249029
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 825bd0139d7e6bc96084c3bed74429bd893453cd
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.
# 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.
# You can also redirect the response body to another program while the
# response headers and progress are still shown in the terminal:
http -d https://github.com/jkbrzt/httpie/tarball/master | tar zxf -
# If --output, -o is specified, you can resume a partial download using
# the --continue, -c option. This only works with servers that support
# Range requests and 206 Partial Content responses. If the server doesn't
# support that, the whole file will simply be downloaded:
http -dco file.zip example.org/file
# Prettified streamed response:
http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track='Justin Bieber'
# Send each new tweet (JSON object) mentioning "Apple" to another
# server as soon as it arrives from the Twitter streaming API:
http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track=Apple | while read tweet; do echo "$tweet" | http POST example.org/tweets ; done
# Create a new session named user1 for example.org:
http --session=user1 -a user1:password example.org X-Foo:Bar
# Now you can refer to the session by its name, and the previously used
# authorization and HTTP headers will automatically be set:
http --session=user1 example.org
# To create or reuse a different session, simple specify a different name:
http --session=user2 -a user2:password example.org X-Bar:Foo
# Instead of a name, you can also directly specify a path to a session
# file. This allows for sessions to be re-used across multiple hosts:
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.