Map Retorna sem outra entrada para um alias

2

Eu gostaria de usar Return sem nenhuma outra entrada para executar um comando com alias no shell. Isso é possível no Bash ou no Zsh?

Em outras palavras, quando eu insiro uma linha de comando vazia, quero executar um comando específico. Outras linhas de comando obviamente não devem ser afetadas.

$ ls <Return>
→ run ls
$ <Return>
→ run my aliased command
    
por hjkml 05.11.2014 / 22:45

2 respostas

2

Não tem certeza do que você quer dizer, mas com zsh :

accept-line() {: "${BUFFER:="my-aliased-command"}"; zle ".$WIDGET"}
zle -N accept-line

Pressionar Enter em um buffer vazio rodará my-aliased-command

Isso está redefinindo o widget accept-line como uma função. Nos widgets zle (editor de linhas zsh), $BUFFER contém o conteúdo da linha de comandos até o momento. Então, aqui estamos definindo-o como my-aliased-command se ele estava vazio anteriormente e, em seguida, executamos o widget accept-line incorporado ( .accept-line ).

Observe que my-aliased-command será adicionado ao histórico de comandos.

Se você não quiser, outra abordagem poderia ser:

accept-line() {
  if [[ -z $BUFFER ]]; then
    zle -I
    my-aliased-command
  else
    zle ".$WIDGET"
  fi
}
zle -N accept-line

Se $BUFFER estiver vazio, invalide o prompt (não é necessário fazer isso se o comando não gerar nada) e execute o my-aliased-command . Execute o accept-line incorporado de outra forma.

    
por 05.11.2014 / 23:25
0

Isso é possível no bash 4, mas é mais complicado do que no zsh . Você precisa definir uma função para testar se a linha de comando está vazia; a linha de comando está na variável READLINE_LINE . É mais fácil usar essa função para inserir o comando desejado para linhas vazias, em vez de organizar o comando silenciosamente. Depois de executar esta função, injete uma sequência de chaves que esteja vinculada ao mapeamento padrão para Return ; Ctrl + J é normalmente um sinônimo. Código não testado.

insert_default_command_if_empty () {
  if [[ -z $READLINE_LINE ]]; then READLINE_LINE='ls -l'; fi
}
bind '"\e[z1~": insert_default_command_if_empty'
bind '"\C-m": "\e[z1~\C-j"'
    
por 07.11.2014 / 02:12