Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

agnos.is Forums

  1. Home
  2. Linux
  3. Autocomplete custom scripts?

Autocomplete custom scripts?

Scheduled Pinned Locked Moved Linux
linux
13 Posts 7 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    Guest
    wrote on last edited by
    #1

    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…

    extremedullard@lemmy.sdf.orgE U A F 4 Replies Last reply
    0
    • System shared this topic on
    • ? Guest

      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…

      extremedullard@lemmy.sdf.orgE This user is from outside of this forum
      extremedullard@lemmy.sdf.orgE This user is from outside of this forum
      [email protected]
      wrote on last edited by
      #2

      With shell scripts, I'm not sure.

      With Python scripts, you want argcomplete.

      1 Reply Last reply
      0
      • ? Guest

        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…

        U This user is from outside of this forum
        U This user is from outside of this forum
        [email protected]
        wrote on last edited by
        #3

        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
        
        ? N 2 Replies Last reply
        0
        • ? Guest

          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…

          A This user is from outside of this forum
          A This user is from outside of this forum
          [email protected]
          wrote on last edited by
          #4

          Not exactly what you are looking for, but modern shells like fish or zsh (probably?) are good at suggesting completions from history. fzf is another great tool for that. Both are super useful for remembering and repeating commands.

          1 Reply Last reply
          0
          • U [email protected]

            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
            
            ? Offline
            ? Offline
            Guest
            wrote on last edited by
            #5

            Many thx. This is exactly what I want. Will try that when I'm batch from vacation.

            1 Reply Last reply
            0
            • ? Guest

              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…

              F This user is from outside of this forum
              F This user is from outside of this forum
              [email protected]
              wrote on last edited by
              #6

              https://espanso.org

              T 1 Reply Last reply
              0
              • U [email protected]

                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
                
                N This user is from outside of this forum
                N This user is from outside of this forum
                [email protected]
                wrote on last edited by
                #7

                This really looks great, I got a question though. As I understand it, it works based on your bash_history which can be very small or autodeleted after each poweroff for privacy & security reasons.

                So it doesn't work in that case. However, creating a file containing a list or array? Of commands could that be a possible way to implemented a similar behavior?

                I'm asking because I'm not very proficient in any programming language but have done some small bash scripts here and there and quite interested in this functionality !

                1 Reply Last reply
                0
                • F [email protected]

                  https://espanso.org

                  T This user is from outside of this forum
                  T This user is from outside of this forum
                  [email protected]
                  wrote on last edited by
                  #8

                  Espanso is probably the most useful software that nobody is using. I can't live without it.

                  I hope it gets an update soon...

                  F 1 Reply Last reply
                  0
                  • T [email protected]

                    Espanso is probably the most useful software that nobody is using. I can't live without it.

                    I hope it gets an update soon...

                    F This user is from outside of this forum
                    F This user is from outside of this forum
                    [email protected]
                    wrote on last edited by
                    #9

                    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...

                    T 1 Reply Last reply
                    0
                    • F [email protected]

                      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...

                      T This user is from outside of this forum
                      T This user is from outside of this forum
                      [email protected]
                      wrote on last edited by
                      #10

                      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.

                      F 1 Reply Last reply
                      0
                      • T [email protected]

                        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.

                        F This user is from outside of this forum
                        F This user is from outside of this forum
                        [email protected]
                        wrote on last edited by
                        #11

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

                        T 1 Reply Last reply
                        0
                        • F [email protected]

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

                          T This user is from outside of this forum
                          T This user is from outside of this forum
                          [email protected]
                          wrote on last edited by
                          #12

                          It took me a while to get around to this so I could sanitize some of the highly-personal stuff there (mostly just bookmarks 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.

                          F 1 Reply Last reply
                          0
                          • T [email protected]

                            It took me a while to get around to this so I could sanitize some of the highly-personal stuff there (mostly just bookmarks 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.

                            F This user is from outside of this forum
                            F This user is from outside of this forum
                            [email protected]
                            wrote on last edited by
                            #13

                            macOS blocks tools like Espanso from viewing or modifying login input fields.

                            I wonder if SikuliX may be of interest to you, then. I just invoke KeePassXC's built-in autotyper; it's not too much more painful for me. Anyway, thanks for sharing! We certainly use it for very different things.

                            1 Reply Last reply
                            0
                            • System shared this topic
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups