diff options
| author | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-11-26 16:33:45 +0100 | 
|---|---|---|
| committer | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-11-26 16:33:45 +0100 | 
| commit | 42c8c1657de27ca7b35981c89f6edb8f31fbfe1a (patch) | |
| tree | 2130f4da0b432616c13c1a75da97c81039085c1c | |
| parent | 3b659f14503defce477efa12c3af2c8796b1d8eb (diff) | |
checkpoint
| -rwxr-xr-x | bin/extra/usbtoggle | 2 | ||||
| -rwxr-xr-x | bin/guiscripts/slmpd | 5 | ||||
| -rw-r--r-- | config/common/mpd/mpd.conf | 4 | ||||
| -rw-r--r-- | config/common/mpv/input.conf | 2 | ||||
| -rw-r--r-- | config/essentials/zsh/comp.zsh | 212 | 
5 files changed, 219 insertions, 6 deletions
diff --git a/bin/extra/usbtoggle b/bin/extra/usbtoggle index 7adb2a2..e8d4634 100755 --- a/bin/extra/usbtoggle +++ b/bin/extra/usbtoggle @@ -4,7 +4,7 @@  # dependencies  # - lsusb (to list usb devices) -# - commander (menu command) +# - fzf (menu command)  # - doas (to run as root)  device="$(lsusb | fzf)" diff --git a/bin/guiscripts/slmpd b/bin/guiscripts/slmpd index 96d9cd1..a102ba0 100755 --- a/bin/guiscripts/slmpd +++ b/bin/guiscripts/slmpd @@ -1,6 +1,7 @@  #!/bin/sh  if mpc > /dev/null 2>&1   then -	test "`mpc status %totaltime%`" = "0:00" || -		echo -n " $(mpc status "%currenttime%/%totaltime%") $(mpc -f "[[%title%]|%file%]" | head -n -2) " +    if [ "$(mpc status "%totaltime%")" != "0:00" ]; then +		printf '%s %s' "$(mpc status "%currenttime%/%totaltime%")" "$(mpc -f "[[%title%]|%file%]" | head -n -2)" +    fi  fi diff --git a/config/common/mpd/mpd.conf b/config/common/mpd/mpd.conf index 095b345..f9e7f9e 100644 --- a/config/common/mpd/mpd.conf +++ b/config/common/mpd/mpd.conf @@ -5,8 +5,8 @@ pid_file             "~/.config/mpd/pid"  state_file           "~/.local/state/mpd/state"  auto_update          "yes"  restore_paused       "yes" -bind_to_address		 "127.0.0.1" -port                 "6600" +# bind_to_address		 "/run/user/1000/mpd/socket" +# port                 "6600"  audio_output {  	type "pulse"  	name "pulse audio" diff --git a/config/common/mpv/input.conf b/config/common/mpv/input.conf index b7932fa..5615d5f 100644 --- a/config/common/mpv/input.conf +++ b/config/common/mpv/input.conf @@ -193,7 +193,7 @@ LEFT seek -2 exact  UP seek 2 keyframes  DOWN seek -2 keyframes -ctrl-l cycle-values loop-file "inf" "no"    # toggle infinite looping +ctrl+l cycle-values loop-file "inf" "no"    # toggle infinite looping  # Speed  ] add speed 0.5 diff --git a/config/essentials/zsh/comp.zsh b/config/essentials/zsh/comp.zsh index 7a53337..7cded53 100644 --- a/config/essentials/zsh/comp.zsh +++ b/config/essentials/zsh/comp.zsh @@ -89,3 +89,215 @@ compdef _go_flag_complete wbr  compdef esc="which"  compdef gdbcore="which"  compdef pkgfile="which" +#compdef ytui +compdef _ytui ytui + +# zsh completion for ytui                                 -*- shell-script -*- + +__ytui_debug() +{ +    local file="$BASH_COMP_DEBUG_FILE" +    if [[ -n ${file} ]]; then +        echo "$*" >> "${file}" +    fi +} + +_ytui() +{ +    local shellCompDirectiveError=1 +    local shellCompDirectiveNoSpace=2 +    local shellCompDirectiveNoFileComp=4 +    local shellCompDirectiveFilterFileExt=8 +    local shellCompDirectiveFilterDirs=16 +    local shellCompDirectiveKeepOrder=32 + +    local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder +    local -a completions + +    __ytui_debug "\n========= starting completion logic ==========" +    __ytui_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}" + +    # The user could have moved the cursor backwards on the command-line. +    # We need to trigger completion from the $CURRENT location, so we need +    # to truncate the command-line ($words) up to the $CURRENT location. +    # (We cannot use $CURSOR as its value does not work when a command is an alias.) +    words=("${=words[1,CURRENT]}") +    __ytui_debug "Truncated words[*]: ${words[*]}," + +    lastParam=${words[-1]} +    lastChar=${lastParam[-1]} +    __ytui_debug "lastParam: ${lastParam}, lastChar: ${lastChar}" + +    # For zsh, when completing a flag with an = (e.g., ytui -n=<TAB>) +    # completions must be prefixed with the flag +    setopt local_options BASH_REMATCH +    if [[ "${lastParam}" =~ '-.*=' ]]; then +        # We are dealing with a flag with an = +        flagPrefix="-P ${BASH_REMATCH}" +    fi + +    # Prepare the command to obtain completions +    requestComp="${words[1]} __complete ${words[2,-1]}" +    if [ "${lastChar}" = "" ]; then +        # If the last parameter is complete (there is a space following it) +        # We add an extra empty parameter so we can indicate this to the go completion code. +        __ytui_debug "Adding extra empty parameter" +        requestComp="${requestComp} \"\"" +    fi + +    __ytui_debug "About to call: eval ${requestComp}" + +    # Use eval to handle any environment variables and such +    out=$(eval ${requestComp} 2>/dev/null) +    __ytui_debug "completion output: ${out}" + +    # Extract the directive integer following a : from the last line +    local lastLine +    while IFS='\n' read -r line; do +        lastLine=${line} +    done < <(printf "%s\n" "${out[@]}") +    __ytui_debug "last line: ${lastLine}" + +    if [ "${lastLine[1]}" = : ]; then +        directive=${lastLine[2,-1]} +        # Remove the directive including the : and the newline +        local suffix +        (( suffix=${#lastLine}+2)) +        out=${out[1,-$suffix]} +    else +        # There is no directive specified.  Leave $out as is. +        __ytui_debug "No directive found.  Setting do default" +        directive=0 +    fi + +    __ytui_debug "directive: ${directive}" +    __ytui_debug "completions: ${out}" +    __ytui_debug "flagPrefix: ${flagPrefix}" + +    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then +        __ytui_debug "Completion received error. Ignoring completions." +        return +    fi + +    local activeHelpMarker="_activeHelp_ " +    local endIndex=${#activeHelpMarker} +    local startIndex=$((${#activeHelpMarker}+1)) +    local hasActiveHelp=0 +    while IFS='\n' read -r comp; do +        # Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker) +        if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then +            __ytui_debug "ActiveHelp found: $comp" +            comp="${comp[$startIndex,-1]}" +            if [ -n "$comp" ]; then +                compadd -x "${comp}" +                __ytui_debug "ActiveHelp will need delimiter" +                hasActiveHelp=1 +            fi + +            continue +        fi + +        if [ -n "$comp" ]; then +            # If requested, completions are returned with a description. +            # The description is preceded by a TAB character. +            # For zsh's _describe, we need to use a : instead of a TAB. +            # We first need to escape any : as part of the completion itself. +            comp=${comp//:/\\:} + +            local tab="$(printf '\t')" +            comp=${comp//$tab/:} + +            __ytui_debug "Adding completion: ${comp}" +            completions+=${comp} +            lastComp=$comp +        fi +    done < <(printf "%s\n" "${out[@]}") + +    # Add a delimiter after the activeHelp statements, but only if: +    # - there are completions following the activeHelp statements, or +    # - file completion will be performed (so there will be choices after the activeHelp) +    if [ $hasActiveHelp -eq 1 ]; then +        if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then +            __ytui_debug "Adding activeHelp delimiter" +            compadd -x "--" +            hasActiveHelp=0 +        fi +    fi + +    if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then +        __ytui_debug "Activating nospace." +        noSpace="-S ''" +    fi + +    if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then +        __ytui_debug "Activating keep order." +        keepOrder="-V" +    fi + +    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then +        # File extension filtering +        local filteringCmd +        filteringCmd='_files' +        for filter in ${completions[@]}; do +            if [ ${filter[1]} != '*' ]; then +                # zsh requires a glob pattern to do file filtering +                filter="\*.$filter" +            fi +            filteringCmd+=" -g $filter" +        done +        filteringCmd+=" ${flagPrefix}" + +        __ytui_debug "File filtering command: $filteringCmd" +        _arguments '*:filename:'"$filteringCmd" +    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then +        # File completion for directories only +        local subdir +        subdir="${completions[1]}" +        if [ -n "$subdir" ]; then +            __ytui_debug "Listing directories in $subdir" +            pushd "${subdir}" >/dev/null 2>&1 +        else +            __ytui_debug "Listing directories in ." +        fi + +        local result +        _arguments '*:dirname:_files -/'" ${flagPrefix}" +        result=$? +        if [ -n "$subdir" ]; then +            popd >/dev/null 2>&1 +        fi +        return $result +    else +        __ytui_debug "Calling _describe" +        if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then +            __ytui_debug "_describe found some completions" + +            # Return the success of having called _describe +            return 0 +        else +            __ytui_debug "_describe did not find completions." +            __ytui_debug "Checking if we should do file completion." +            if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then +                __ytui_debug "deactivating file completion" + +                # We must return an error code here to let zsh know that there were no +                # completions found by _describe; this is what will trigger other +                # matching algorithms to attempt to find completions. +                # For example zsh can match letters in the middle of words. +                return 1 +            else +                # Perform file completion +                __ytui_debug "Activating file completion" + +                # We must return the result of this command, so it must be the +                # last command, or else we must store its result to return it. +                _arguments '*:filename:_files'" ${flagPrefix}" +            fi +        fi +    fi +} + +# don't run the completion function when being source-ed or eval-ed +if [ "$funcstack[1]" = "_ytui" ]; then +    _ytui +fi  | 
