diff --git a/README.md b/README.md index 113c140..144e7da 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,146 @@ # goto -[wip] + +`goto` is a bash utility allowing users to change faster to frequently visited **aliased** directories + +# How does it work? + +User registers directory aliases, for example: +```bash +goto -r dev /home/iridakos/development +``` +and then `cd`s to that directory with: +```bash +goto dev +``` + +![goto demo gif](https://github.com/iridakos/goto/raw/master/doc/goto.gif) + +# goto completion + +`goto` comes with a nice auto-completion script so that whenever you press the `tab` key after the `goto` command, bash prompts with suggestions of the available aliases: + +```bash +bc /etc/bash_completion.d +dev /home/iridakos/development +rubies /home/iridakos/.rvm/rubies +``` + +# Installation + +Copy the file `goto.bash` somewhere in your filesystem and add a line to source it your `.bashrc`. + +For example, if you placed the file in your home folder, all you have to do is add the following line to your `.bashrc` file: + +```bash +source ~/goto.bash +``` + +# Usage + +## Change to an aliased directory +To change to an aliased directory, type: +```bash +goto +``` + +### Example: +```bash +goto dev +``` + +## Register an alias +To register a directory alias, type: +```bash +goto -r +``` +or +```bash +goto --register +``` + +### Example: +```bash +goto -r blog /mnt/external/projects/html/blog +``` +or +```bash +goto --register blog /mnt/external/projects/html/blog +``` + +### Notes + +* `goto` **expands** the directories hence you can easily alias your current directory with: +```bash +goto -r last_release . +``` +and it will automatically be aliased to the whole path. +* Pressing the `tab` key after the alias name, you have the default directory suggestions by bash. + +## Unregister an alias + +To unregister an alias, use: +```bash +goto -u +``` +or +```bash +goto --unregister +``` +### Example +``` +goto -u last_release +``` +or +``` +goto --unregister last_release +``` + +### Notes + +Pressing the `tab` key after the command (`-u` or `--unregister`), the completion script will prompt you with the list of registered aliases for your convenience. + +## List aliases + +To get the list of your currently registered aliases, use: +```bash +goto -l +``` +or +```bash +goto --list +``` + +## Cleanup + +To cleanup the aliases from directories that are no longer accessible in your filesystem, use: + +```bash +goto -c +``` +or +```bash +goto --cleanup +``` + +## Help + +To view the tool's help information, use: +```bash +goto -h +``` +or +```bash +goto --help +``` + +## Contributing + +1. Fork it ( https://github.com/iridakos/goto/fork ) +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create a new Pull Request + +## License + +This tool is open source under the [MIT License](https://opensource.org/licenses/MIT) terms. diff --git a/goto.bash b/goto.bash new file mode 100644 index 0000000..026220d --- /dev/null +++ b/goto.bash @@ -0,0 +1,260 @@ +#!/usr/bin/env bash +# MIT License +# +# Copyright (c) 2018 Lazarus Lazaridis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Changes to the given alias directory +# or executes a command based on the arguments. +function goto() +{ + local target + + if [ -z "$1" ]; then + # display usage and exit when no args + _goto_usage + return + fi + + subcommand="$1" + shift + case "$subcommand" in + -c|--cleanup) + _goto_cleanup "$@" + ;; + -r|--register) # Register an alias + _goto_register_alias "$@" + ;; + -u|--unregister) # Unregister an alias + _goto_unregister_alias "$@" + ;; + -l|--list) + _goto_list_aliases + ;; + -h|--help) + _goto_usage + ;; + *) + _goto_directory "$subcommand" + ;; + esac +} + +function _goto_usage() +{ + cat <<\USAGE +usage: goto [