alterar teclas de atalho do bash como Ctrl-C?


21

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

Aqui estão os atalhos que eu gostaria de configurar:

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

  • Ctrl- Vpara colar da área de transferência no terminal.

  • Ctrl- Zpara 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 em segundo plano.

  • Ctrl- Shift- V(ou Super- V) para ser o comando de inserção literal (ou o que Ctrl+ zfoi feito antes).

Como faço essas alterações?

BTW, eu 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 (ao contrário de muitas outras coisas no OS X).

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


alguns destes "atalhos" não pode ser "implementada" em bash, mas tem que ser colocado no próprio terminal (xterm, gnome-terminal, konsole etc) .. por exemplo, "texto selecionado", "clipboard"
akira

Respostas:


10

Essas não são características do bash, são características 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

5
ESTÁ BEM. Obrigado pela pista. Agora, eu ainda gostaria de alcançar meu objetivo. E também sei que o inputrc pode remapear Ctrl-C. Mas eu realmente não me importo com o que faço, só quero saber como remapear esses atalhos em um terminal.
Paulo

15
Aqui está o "peixe": stty intr \ ^ k (onde o comando terminar, anteriormente Ctrl-C agora se torna Ctrl-K, K pode ser qualquer tecla alfa) Ninguém "me deu esse peixe". Eu trabalhei duro para encontrar sozinho. Então, pregar com provérbios faz você parecer um idiota, IMO.
Paulo

Como você pode remapear para Ctrl + Shift + C?
crypdick

8

Isso está quase completamente resolvido agora. Parte da solução foi trazida à minha atenção pelo MTK358 em http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . Ele apontou o fato (bastante óbvio, para meu embaraço) de que as teclas de atalho de copiar e colar podem ser facilmente alteradas pelas configurações do menu do konsole. Depois que vi isso, demorou cerca de 1 minuto para configurar o Ctrl-C e o Ctrl-V para copiar e colar no terminal.

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

Decidi qual chave não numérica queria substituir Ctrl-C como o comando final. (Eu usei "k"). Eu nunca encontrei nenhuma informação sobre como transmitir um modificador de mudança para stty, então desisti disso. Com isso decidido, tudo que eu precisava fazer era inserir o seguinte na linha de comando:

stty intr \ ^ k

Eu verifiquei que tudo funcionava como desejado.

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

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

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


Você já determinou qual é o script de inicialização "certo" a ser usado ou a melhor maneira de fazer isso? Estou lutando com esse mesmo problema (sua pergunta original). Mas enquanto eu posso fazer 'stty intr \ ^ k' vincular ctrl-k, ele não é desvinculado ctrl-c e nem 'stty intr undef' nem 'stty intr = ^ -' fazem isso, ctrl-c ainda envia uma interrupção . E 'stty -a' nunca mostra nenhuma alteração que eu tenha feito.
EricS 17/10

4

Alguns destes podem ser configurados usando o mecanismo de atalho de teclado normal do KDE. No menu "Configurações" do Konsole, clique em "Configurar atalhos" e você verá uma caixa de diálogo que poderá ser usada para alterar as combinações de teclas das funções que são tratadas pelo KDE. Isso permitirá que você remapeie Ctrl + C para copiar e Ctrl + V para colar - mas lembre-se de que, depois disso, essas seqüências de teclas não serão mais passadas para o terminal, para que você não possa usar Ctrl + C para interromper um programa, por exemplo.

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

C-z: revert-line

mas essa sequência de teclas provavelmente já está interceptada pelo terminal, portanto, você pode precisar sttydesassociá-lo antes que ele funcione. Primeiro procure ^Zna saída de stty -a(como mostrado na resposta de Ignacio) e, em seguida, por exemplo, se aparecer susp = ^Z, execute

stty susp ^-

para desvincular esse mapeamento de chave.

As outras mudanças que você está perguntando teriam que ser feitas sttycomo Ignacio diz, já que essas são funções terminais, mas não sei exatamente como. A questão é que não sei se o terminal reconhece a Shift, ou se reconhece, como transmitir essas informações stty.


3

Usos Bash emacsou vimodo na linha de comando. Não tem conceito de "seleção" ou "área de transferência". Ele usa coisas como "buffer de interrupção" e "ponto", "marca", "palavra", "linha", "interrupção" e "puxão" etc.

Tentar usar a funcionalidade do estilo GUI nele será frustrante na melhor das hipóteses e não funcionará completamente. Você terá que tentar combinar funções de stty, readlinee seu terminal (presumivelmente Terminal.apppara você). Você vai precisar para remapear funções, tais como intr, susp, lnext, etc., assim você ainda pode usar seus recursos.

Eu recomendo fortemente contra tais modificações radicais. Apenas não foi projetado para fazer o que você deseja.

Quando em Roma...


Dave, para um sistema que funciona como o OS X, posso sugerir que você use o OS X? Como Dennis sugeriu, mesmo que você consiga fazê-lo funcionar, você ficará bastante prejudicado ao fazer login como qualquer coisa, menos na sua própria máquina.
msw

Não posso garantir os outros comandos, mas copiar e colar faz todo o sentido em uma janela de comando e é muito útil. Eu os uso constantemente para copiar e colar entre outras janelas e o console, e faço isso há muitos anos. Shift-Ctrl-C e Shift-Ctrl-V funcionam dessa maneira para o Konsole fora da caixa. E embora eu faça isso todos os dias há anos, inevitavelmente esqueço e pressionei Ctrl-c no Konsole. Pessoalmente, estou pronto para parar de aplicar o ditado "quando em Roma" e remapear para que funcionem como praticamente TODAS as outras aplicações existentes.
EricS 17/10

1

Eu corro Ubuntu e mudou o atalho para copiar a partir do padrão Ctrl+ Shift+ Cpara o mais normal e simples Ctrl+ C. Este, porém, me fez correr em problema não ser capaz de enviar o comando de interrupção ^ C .

Graças à resposta @Paul , encontrei executando o comando

tty intr \^k

Permitirá que eu envie o comando de interrupção usando Ctrl+ K. No entanto, esse comando precisava ser executado toda vez que abria o terminal, o que é um aborrecimento (assim como ele se mencionou).

Com um pouco de pesquisa (pesquisando no Google) , descobri como executar um comando cada vez que o terminal é aberto (no Ubuntu de qualquer maneira) .

Assim, finalmente, executar o seguinte comando (uma vez) (no Ubuntu 18.04 e provavelmente mais) fornecerá o comportamento esperado sempre.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

Por fim, vale ressaltar que você não deve usar o Kbotão. Você pode trocar a letra k em todos os comandos acima para qualquer tecla de sua escolha.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.