sshyp v1.4.2
04/30/2023

the argumentative agronomist update - patch two

IMPORTANT: the next major release of sshyp, v1.5.0, will make breaking changes that will require
running through 'sshyp tweak' again - also starting with v1.5.0, a copy of the changelog will no
longer be packaged with sshyp (it will still be available on GitHub) and clipboard tools
(x-clip and wl-clipboard) will be set to optional dependencies ('sshyp tweak' will warn of this)

this release makes use of a new ports framework to make sshyp even smaller and faster than before

user-facing features:

- full WSL (Windows Subsystem for Linux) support
- partial MacOS support
    ^ fully functional; packaging support has not yet been added
- dedicated help screen for 'gen'
    ^ this was previously not included due to 'sshyp gen' being a valid command prior to v1.4.0
- removed interactive input for whitelist management
    ^ this is to be consistent with the removal of interactive input on clients in v1.4.0

fixes/optimizations:

- leading and following spaces are no longer stripped when printing entry contents
- properly display an error when trying to remove a device from the whitelist that is not whitelisted
- ports framework to remove unneeded code for each platform
    ^ BLANKS.py removes all blank lines
    ^ CLIPBOARD.py removes non-platform-critical clipboard code
    ^ COMMENTS.py removes all comments
    ^ RMSERVER.py removes server-only code for creating client-only packages
        ^ the Haiku package, which was already unsupported as a server, now only includes client code
    ^ SHEBANG.sh sets the shebang to what is required by the platform
    ^ TABS.sh converts all groups of spaces to tabs for space efficiency
    ^ UNAME.py removes all instances of platform detection and leaves only the platform-required code
    ^ THESE SCRIPTS ARE ONLY USED FOR PACKAGING AND DO NOT AFFECT THE SOURCE FILES IN THE GIT REPO

<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

sshyp v1.4.1

the argumentative agronomist update - patch one

this release improves sshyp's shell completions by adding zsh support and significantly optimizing and improving Bash support

user-facing features:

- zsh completion support
    ^ ensure modern completions are enabled in your ~/.zshrc

fixes/optimizations:

- Bash completions are now much faster due to the use of recursive globbing
- Bash completions have been modified to be functionally similar to the new zsh completions

other notable changes:

- some official packages now use more space-efficient compression

<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

sshyp v1.4.0

the argumentative agronomist update

this release overhauls sshyp's argument system and further streamlines
the experience with optimizations and the removal of legacy features

compatibility-breaking changes:

- there are no technical breaking changes, but the UX has changed significantly due to the new argument system (detailed below)

user-facing features:

- when typing an entry/folder name, it is now always the FIRST argument
    ^ e.g. instead of "sshyp copy -p /example/test", it would now be "sshyp /example/test copy -p"
    ^ this allows more easily editing the previous command to copy/edit a different field
- better extension integration
    ^ extensions can now ship with a config file that sshyp can use to call them from standard sshyp arguments
    ^ the first extension supporting this is sshyp-mfa
    ^ if sshyp-mfa v1.4.0.1+ is installed, "sshyp /example/test copy -m" will copy MFA keys to your clipboard
- entry/folder names now MUST be specified as arguments
    ^ there is no longer a separate input prompt if the entry/folder name is not provided as an argument
    ^ the input prompt was a legacy feature from before arguments could specify entrys/folders with shell completion
    ^ the entry list generated by entry_list_gen() is still present and can be viewed by running "sshyp" with no arguments
- better Bash completions
    ^ now correctly places backslashes to escape spaces in entry/folder names
    ^ slightly faster than the previous iteration
- IPv6 configuration support

fixes/optimizations:

- replaced "+=" with ".append" when extending lists to prevent creating an additional list
- optimized usage of "str.split()" and replaced it with "str.splitlines()" where applicable
- more concise "if... in ()" syntax replaces long "if" statement chains
- lists have been substituted with tuples where applicable
- entry_list_gen() has been re-written to be much smaller and faster
- os.path is now used in place of pathlib.Path in areas where it is faster
- the user's home directory is saved to a variable to prevent running expanduser() every time it is needed

other notable changes:

- removed some uncommonly used, redundant arguments
    ^ e.g. "-rm", "-s", "delete"
    ^ their functionality was NOT removed, just their redundant arguments, since "shear", "sync", and "del" are the accepted syntax
- errors containing entry/folder names reinforce correct syntax by adding leading/following slashes where necessary
- thanks to pull request #25, there are new error messages for the read shortcut
    ^ includes when no entry name is provided or the entry name only refers to a directory
- directories provided in user input are no longer denoted by a following slash
    ^ instead, os.path is used to determine if the user is referring to a file or directory
