seleção de turno Zsh

5

Como usar shift para selecionar parte da linha de comando (como em muitos editores de texto)?

    
por Ugo 24.03.2011 / 00:06

1 resposta

4

Uma maneira de fazer isso é

  1. define novos widgets que ativam a marcação em teclas de movimento deslocadas,
  2. redefina todos os widgets de ação para operar na região (se houver um) e
  3. redefina todos os widgets de movimento padrão para desativar a marcação.

Aqui está uma prova de conceito (para xterm ), trabalhando para:

  • Shift-Left e Shift-Right : comece a selecionar à esquerda / direita, respectivamente
  • Left , Right : cancelar a seleção e mover para a esquerda / direita, respectivamente,
  • Delete : excluir seleção se houver um, caso contrário, caractere sob o cursor.

Os avisos de isenção se aplicam (pode haver outras formas melhores, seu gato pode comer sua torradeira, etc.).

bindkey -e

function zle-line-init {
    marking=0
}
zle -N zle-line-init

function select-char-right {
    if (( $marking != 1 )) 
    then
        marking=1
        zle set-mark-command
    fi
    zle .forward-char
}
zle -N select-char-right

function select-char-left {
    if (( $marking != 1 )) 
    then
        marking=1
        zle set-mark-command
    fi
    zle .backward-char
}
zle -N select-char-left

function forward-char {
    if (( $marking == 1 ))
    then
        marking=0
        NUMERIC=-1 zle set-mark-command
    fi
    zle .forward-char
}
zle -N forward-char

function backward-char {
    if (( $marking == 1 ))
    then
        marking=0
        NUMERIC=-1 zle set-mark-command
    fi
    zle .backward-char
}
zle -N backward-char

function delete-char {
    if (( $marking == 1 ))
    then
        zle kill-region
        marking=0
    else
        zle .delete-char
    fi
}
zle -N delete-char

bindkey '^[[1;2D' select-char-left   # assuming xterm
bindkey '^[[1;2C' select-char-right  # assuming xterm
    
por 17.04.2011 / 11:56

Tags