As my time with linux, I created a lot of scripts. Some of them have input parameters and sometimes I just forget this parameters.

So I wonder if there is some way to create autocomplete parameters, like i autocomplete a path by pressing the tab key?

For example a script. ./test.sh can be completed with parameter-one, eg. ./test.sh parameter-one or ./test.sh parameter-two. If i type now ./test.sh followed by tab it should add parameter-one if i press tab again it should change to parameter-two.

How can I do that? I’m on bash…

  • unlawfulbooger@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    1
    ·
    26 days ago

    Here’s an article that does this: https://iridakos.com/programming/2018/03/01/bash-programmable-completion-tutorial

    I have done this for one of my own tools ta, which is a function that switches to a tmux session, or creates it if it doesn’t exist:

    # switch to existing tmux session, or create it.
    # overrides workdir if session name is "Work"
    function ta() {
            case "$1" in
                    Work) workdir="${HOME}/Work/" ;;
                    *) workdir="${HOME}" ;;
            esac
            if tmux has-session -t "$@" &>/dev/null; then
                    tmux switch-client -t "$@"
            else
                    tmux new-session -A -D -d -c "${workdir}" -s "$@"
                    tmux switch-client -t "$@"
            fi
    }
    
    # complete tmux sessions
    # exclude current session from completion
    function _ta_completion() {
            command="${1}"
            completing="${2}"
            previous="${3}"
            [[ "${command}" != 'ta' ]] && return
            current_session="$(tmux display-message -p '#S')"
            IFS=$'\a' COMPREPLY=( $(tmux list-sessions -F '#{session_name}' | grep -i "^${completing}" | grep -v "^${current_session}$"| tr '\n' '\a' ) )
    }
    # enable completion for ta function
    complete -F _ta_completion ta
    

    Usage

    $ tmux (starts session "0" by default)
    $ ta Personal # create session "Personal" because it doesn't exist
    $ ta Work # create session "Work" because it doesn't exist
    $ ta <tab> 
    0 Personal
    $ ta P<tab> -> $ta Personal
    $ ta <tab>
    0 Work
    
      • Flagstaff@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        ·
        26 days ago

        Its .YML formatting is really clunky. It feels like it takes up twice as much line space as .AHK (for example), which can do a lot of this kind of stuff in a single line. But I wanna go cross-platform and this is all I can find…

        • trevor (he/they)@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          0
          ·
          26 days ago

          I like YAML, as long as you aren’t using complicated syntax. Using the | operator will get you some flexible usage that’s mostly easy enough to read. YAML definitely has its problems though. If you want, I can share some snippets of my config.

          Sadly though, due to Espanso not having a working RPM build for Wayland (or a Flatpak, which they’re working on), it’s not quite as cross-platform as I want it to be. It won’t work on any of the cool uBlue-derived distros that I’ve gravitated toward, so I’m hoping we get a nice, big update this year.

          • Flagstaff@programming.dev
            link
            fedilink
            English
            arrow-up
            0
            ·
            26 days ago

            Did you put in a request for this? And sure, I’m always interested in seeing how others use it—especially to complex levels.

            • trevor (he/they)@lemmy.blahaj.zone
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              3 days ago

              It took me a while to get around to this so I could sanitize some of the highly-personal stuff there (mostly just a bunch of URLs because I don’t use browser bookmarks lol), but here’s a condensed version of what I like to use Espanso for.

              The second half is …interesting. I wanted a way to autofill passwords from my password manager in any application, not just a browser. It’s a very homebrewed solution, and it only works on Windows and Linux because macOS blocks tools like Espanso from viewing or modifying login input fields.

              Did you put in a request for this?

              For a Wayland Flatpak or RPM? I haven’t looked in a long time, but I believe there’s an open issue for a Wayland RPM.

              Edit: Found them: Flatpak issue and RPM issue.