GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Abschluss abbrechen, aber nur Abschluss, in Zsh?

Wenn eine Abschlussfunktion lange dauert, kann ich sie unterbrechen, indem ich Strg drücke +C (Terminal-Interrupt-Taste, sendet SIGINT) oder Ctrl +G (gebunden an send-break ). Mir bleibt dann das unvollständige Wort.

Wenn ich jedoch zufällig Strg drücke +C oder Strg +G So wie die Vervollständigungsfunktion beendet ist, kann mein Tastendruck die Befehlszeile abbrechen und mir eine neue Eingabeaufforderung geben, anstatt die Vervollständigung abzubrechen.

Wie kann ich zsh so einrichten, dass eine bestimmte Taste eine laufende Vervollständigung abbricht, aber nichts tut, wenn keine Vervollständigungsfunktion aktiv ist?

Akzeptierte Antwort:

Hier ist eine Lösung, die einen SIGINT-Handler einrichtet, der Ctrl erstellt +C nur unterbrechen, wenn Vervollständigung aktiv ist.

# A completer widget that sets a flag for the duration of
# the completion so the SIGINT handler knows whether completion
# is active. It would be better if we could check some internal
# zsh parameter to determine if completion is running, but as 
# far as I'm aware that isn't possible.
function interruptible-expand-or-complete {
    COMPLETION_ACTIVE=1

    # Bonus feature: automatically interrupt completion
    # after a three second timeout.
    # ( sleep 3; kill -INT $$ ) &!

    zle expand-or-complete

    COMPLETION_ACTIVE=0
}

# Bind our completer widget to tab.
zle -N interruptible-expand-or-complete
bindkey '^I' interruptible-expand-or-complete

# Interrupt only if completion is active.
function TRAPINT {
    if [[ $COMPLETION_ACTIVE == 1 ]]; then
        COMPLETION_ACTIVE=0
        zle -M "Completion canceled."            

        # Returning non-zero tells zsh to handle SIGINT,
        # which will interrupt the completion function. 
        return 1
    else
        # Returning zero tells zsh that we handled SIGINT;
        # don't interrupt whatever is currently running.
        return 0
    fi
}

Linux
  1. Welches Terminal ist besser:Bash vs. Zsh

  2. ${!foo} Und Zsh?

  3. Facl Ignorieren der „x“-Berechtigung, aber nur für Dateien?

  4. Ein einfaches Bash-Vervollständigungs-Tutorial?

  5. Nur Ziel von Symlink finden?

Warum zeigt „ls -all“ für einige Dateien die Uhrzeit an, für andere jedoch nur das Jahr?

Rücktaste in Zsh stecken?

Dynamische Zsh-Autovervollständigung für benutzerdefinierte Befehle?

Tab-Vervollständigung hängt?

Zsh:Setze Term=screen-256color in Tmux, aber Xterm-256color ohne Tmux?

Warum gibt es `/lib` und `/lib64` aber nur `/bin`?