altera as teclas de atalho do bash como Ctrl-C?

17

Estou usando o Kubuntu 10.04. Eu gostaria de alterar algumas das teclas de atalho padrão para bash (terminal).

Aqui estão os atalhos que gostaria de configurar:

  • Ctrl-C para copiar o texto selecionado o terminal para a área de transferência.

  • Ctrl-V para colar na área de transferência no terminal.

  • Ctrl-Z para desfazer a edição na linha atual no terminal.

  • Ctrl-Shift-C (ou melhor ainda, Super-C) para finalizar o comando.

  • Ctrl-Shift-Z (ou Super-Z) para ser o comando do plano de fundo.

  • Ctrl-Shift-V (ou Super-V) para ser o comando de inserção literal (ou seja o que for que o Ctrl-z tenha feito antes).

Como faço essas alterações? Obrigado.

BTW, gosto da maneira como o terminal funciona no OS X. O uso da tecla de comando torna todos os comandos de copiar / colar muito consistentes (diferente de muitas outras coisas no OS X).

P.S. Eu li a página man do bash e isso não ajudou. Isso me deu idéias, mas eu preciso de exemplos específicos para as combinações acima. Obrigado.

    
por Dave 06.07.2010 / 05:18

4 respostas

10

Esses não são recursos do bash, eles são recursos do driver do terminal. Como tal, eles são especificados por stty(1) .

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
    
por 06.07.2010 / 05:22
6

Isso está quase completamente resolvido agora. Parte da solução foi primeiramente trazida à minha atenção pelo MTK358 em link . Ele apontou o fato (bastante óbvio, muito para meu constrangimento) de que as teclas de atalho de copiar e colar podem ser facilmente alteradas pelas configurações de menu do konsole. Depois de ver isso, demorou cerca de 1 minuto para configurar Ctrl-C e Ctrl-V para copiar e colar no terminal.

A outra parte da solução deveria estar clara na página man stty, mas não era (para mim). Acabei apenas experimentando com base em várias pistas, como as postadas acima.

Eu decidi qual chave não-numérica eu queria substituir Ctrl-C como o comando terminate. (Eu usei "k"). Eu nunca encontrei nenhuma informação sobre como transferir um modificador de shift para stty, então desisti disso. Com isso decidido, tudo que eu tinha que fazer era digitar o seguinte na linha de comando:

stty intr \ ^ k

Eu verifiquei que tudo funcionava como desejado.

Agora eu só tinha que colocar o único comando acima (stty intr \ ^ k) em um script de inicialização. Eu não tenho certeza qual é o "correto". Eu gostaria que essa mudança fosse ampla e permanente.

Alguma sugestão sobre em qual script devo colocar o comando?

E finalmente, quanto às respostas pregadas, elas são desnecessárias e inúteis.

    
por 07.07.2010 / 18:20
3

Alguns desses podem ser definidos usando o mecanismo normal de atalho de teclado do KDE. No menu "Configurações" do Konsole, clique em "Configurar atalhos" e você terá uma caixa de diálogo que poderá usar para alterar as combinações de teclas para as funções que são manipuladas pelo KDE. Isso permitirá que você remapeie Ctrl + C para copiar e Ctrl + V para colar - mas tenha em mente que, uma vez que você fizer isso, essas sequências de teclas não serão mais passadas para o terminal, então você não poderá usar Ctrl + C para interromper um programa, por exemplo.

Outras funções são controladas pela biblioteca readline , que você pode configurar editando o arquivo ~/.inputrc . Para que Ctrl + Z reverta as edições feitas na linha atual, você deseja adicionar

C-z: revert-line

mas essa sequência de teclas provavelmente já está presa pelo terminal, então você pode ter que usar stty para desvinculá-lo antes que ele funcione. Primeiro, procure ^Z na saída de stty -a (como mostrado na resposta de Ignacio) e, por exemplo, se ele aparecer em susp = ^Z , execute

stty susp ^-

para desvincular esse mapeamento de chaves.

As outras alterações que você está perguntando teriam que ser feitas com stty , como diz Ignacio, já que essas são funções de terminal, mas não sei exatamente como. A questão é que eu não sei se o terminal reconhece Shift, ou se sim, como transmitir essa informação para stty .

    
por 06.07.2010 / 06:05
3

O Bash usa o modo emacs ou vi na linha de comando. Não tem conceito de "seleção" ou "área de transferência". Ele usa coisas como "kill buffer" e "point", "mark", "word", "line", "kill" e "yank", etc.

Tentar incorporar funcionalidades no estilo GUI será, na melhor das hipóteses, frustrante e não funcionará totalmente. Você terá que tentar combinar funções de stty , readline e seu terminal (presumivelmente Terminal.app para você). Você precisará remapear funções como intr , susp , lnext , etc., para que você ainda possa usar seus recursos.

Eu recomendo strongmente contra essas modificações radicais. Apenas não foi projetado para fazer o que você quer.

Quando em Roma ...

    
por 06.07.2010 / 11:24