Skip to content

ybda/shmarks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

shmarks - a fast, easy, robust and convenient way of handling bookmarks of directories

crates.io

Create, remove, view sorted (by bookmark names of directory paths) bookmarks of your favorite directories

Example-Screenshot

Installation

  1. Install binary

    > cargo install shmarks --locked
  2. Add code in your .zshrc (should work with little changes in other shells as well)

    Adding this into your directory of plugins might be a more clean option (include in .zshrc with source plugins_dir/shmarks.zsh)

    export SHMARKS_LIST_PATH="$HOME/.local/share/shmarks.toml" # place where your shell bookmarks (shmarks) stored
    export SHMARKS_AUTO_SORT="d" # sort on adding new alias: a = by aliases, d = by directories, otherwise no sorting
    export SHMARKS_DEFAULT_ALIAS="dd" # default alias to jump into if no alias name was provided
    
    # Jump by alias
    f() {
        if [[ $# -eq 0 ]]; then
            # jump to default dir if no arguments provided
            cd "$(shmarks -a "$SHMARKS_DEFAULT_ALIAS")"
        else
            cd "$(shmarks -a "$@")"
        fi
    }
    
    # Might be interesting to you
    
    alias s='shmarks' # shortcut for 'shmarks' binary
    alias p='shmarks ls -d' # colored list print with directories
    alias se="$EDITOR "$SHMARKS_LIST_PATH"" # edit shmarks
    alias pf='shmarks ls -d | rg'  # find in print of directories
    
    # fzf jumper
    sf() {
        local choice="$(shmarks ls -dp | fzf)"
    
        if [ -n "$choice" ]; then
            local dir="$(echo "$choice" | awk '{print $2}')"
            cd "$dir"
        fi
    }
    
    # Autocompletion of alias
    _shmarks_compzsh() {
        reply=($(shmarks ls))
    }
    compctl -K _shmarks_compzsh f # change 'f' to alias set for jumping (6th line)

    For PowerShell:

    # Jump by alias
    function f($aliasName) {
        if (!$aliasName) {
            # Jump to default dir if no arguments provided
            Set-Location (shmarks -a $env:SHMARKS_DEFAULT_ALIAS)
        } else {
            # Jump to directory based on alias argument
            Set-Location (shmarks -a $aliasName)
        }
    }

Usage

> shmarks
Directory bookmarks for the shell.

Usage: shmarks [OPTIONS]
       shmarks <COMMAND>

Commands:
  new   Create new mark. Creates mark for current directory by default [aliases: n]
  rm    Remove mark. Removes mark of current dir if no args provided [aliases: r]
  ls    List all marks [aliases: l]
  sort  Sort shmarks file [aliases: s]
  help  Print this message or the help of the given subcommand(s)

Options:
  -a, --alias <ALIAS>  Alias of the directory to jump into
  -h, --help           Print help
  -V, --version        Print version

Jump by alias 'default' into default dir

> f

Jump by alias

> f myalias

Edit marks file in $EDITOR

> se

Save current dir (pwd) to shmarks and sort shmarks file if $SHMARKS_AUTO_SORT was set

> shmarks new myalias
> s n myalias

Save specified dir to shmarks

> shmarks new myalias /my/dir

Remove current dir from shmarks

> shmarks rm

Remove alias specified by its directory path

> shmarks rm -d /my/dir

Remove alias specified by its name

> shmarks rm -a myalias

List all saved marks like plain GNU "ls" utility

> shmarks ls 

List all saved marks like "/bin/ls -l" in columns with dirs showed, colored

> shmarks ls -d
> p

Sort shmarks by directories (alphabetical order)

> shmarks sort -d

Note

  • By default, shmarks.toml located in $XDG_DATA_HOME or $HOME/.local/share. You could override it with $SHMARKS_LIST_PATH

Inspired by