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.
- 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.
Previously, `cheat` would exit if run by `root`. The rationale was:
If `cheat` was run by an unprivileged user (`chris`, for example), the
`$DEFAULT_CHEAT_DIR` would default to `/home/chris/.cheat`. If cheat was
run via `sudo`, however, the `$DEFAULT_CHEAT_DIR` would suddenly be
`/root/.cheat`.
Presuming that those individual user cheat dirs actually contained cheat
sheets, this could cause confusion, because cheat sheets accessible to
one user (`chris`) would not be accessible to the other (`root`). Thus,
cheatsheets would appear and disappear, depending on which user was
running `cheat`. (This would only be an issue, of course, for cheat
sheets that existed within the respective users' cheat dirs. System-wide
cheat sheets would be unaffected.)
`cheat` was thus programmed to gracefully fail when run as `root` to
prevent that possible confusion.
However, I'm backing away from that reasoning, because:
1. It's causing a headache for real users who'd like to run `cheat` as
root
2. Other venerable programs (`vim`, etc.) suffer from the same problem,
but nobody seems to mind enough to do anything about it. Thus, I suppose
the laissez-faire approach is essentially the sanctioned "solution" to
this problem.
3. Users sufficently troubled by this confusion may rememdy the problem
manually by setting environment variables (`$DEFAULT_CHEAT_DIR`, etc.)
Thus, `cheat` no longer complains if run by `root`.
Version-bumped to 2.1.0.
Previously, `sheets.print()` would query the filesystem every time it
was invoked. This was inelegant, because it is called multiple times
every time `cheat` is executed. Thus, unnecessary calls were being made
out to the filesystem.
Now the result of that function is being buffered into a module variable
when it is executed the first time, and served from there thereafter. I
broke the "functional" paradigm to a degree by doing this, but it wasn't
worth the complexity of implementing proper memoization (decorators,
etc) for such a trivial case.
Bumped the version number accordingly.
Performed an extensive refactoring on the entire application for the
sake of code-cleanliness.
- Refactored out of an ad-hoc Imperative paradigm into more of a
functional/declarative paradigm. IMO, this makes the application
signifcantly easier to understand.
- Moved away from `argparse` and into `docopt` for argument parsing
- Version bump to 2.0.0
- Performed extensive refactoring on the setup.py script. Script should
install to the system more cleanly now.
- Made minor formatting changes to the --list flag output
- Updated the README
Squashed commit of the following:
commit e5681bd536aa0220cdeb7884cc248db55be408c9
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 23:30:21 2014 -0400
Fixed many bugs
Everything seems to work now, I think.
commit 764ec5950cee958eb1b8333ddfcb6bcd45c28429
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 21:51:31 2014 -0400
Restructuring for the sake of setup.py
Seem to finally have a working install script
commit 5a866c23857b77ec65070dd8023cd734f2b7c242
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 18:01:11 2014 -0400
Nits
commit a79954ba5b33d992fa6a32abffb33b161d624e3d
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 17:53:03 2014 -0400
Implemented search
commit b570a897e9a12c15affe1a72628deae31836dee2
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 17:11:27 2014 -0400
Nits
commit 1a8d85b44457f1b2131b3e8475c5270b5d0899e3
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 17:02:22 2014 -0400
Still refactoring across files
Trying to make the program structure clearer
commit 34dffd6462e492e81ea558e2009a71051b7663c9
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 16:40:37 2014 -0400
Breaking app into several files
This is for the sake of code-cleanliness
commit 4825d678ff5f9817ccbf727ef71e5dea15ff2586
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 15:55:19 2014 -0400
Got syntax highlighting working
commit c37d7a626d451bfca3d4a072eb9fed604085170f
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 15:29:22 2014 -0400
Reduced verbosity of function names
commit 8e626045186b37dce2480f5af1994ddfa8db79b5
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 15:24:41 2014 -0400
Refactored argument passing
Fewer arguments now need to be passed throughout the app.
commit 807ba814650010b3dd1b59d27400b3fb4fcfede7
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Sat Apr 26 11:40:05 2014 -0400
Working through the refactor
commit e34e6540d4f8cd727e98aac68289d515a02d5fe6
Author: Chris Lane <chris@chris-allen-lane.com>
Date: Thu Apr 24 20:00:10 2014 -0400
Got a basic end-to-end refactor working
Have re-implemented just the most basic functionality in the "cheat2"
file.