Esta é em três etapas como fiz isso funcionar para mim:
Etapa 1. Como a meta-chave funciona:
Coloque URxvt*altSendsEscape: true
em ~/.Xresources
e, em seguida, xrdb ~/.Xresources
em ~/.xinitrc
.
Para o xterm, em ~/.Xresources
, coloque xterm*metaSendsEscape: true
.
Para o rxvt, minha intuição me diz que parece idêntico ou muito similar.
Etapa 2. Corrigindo o movimento do cursor
Isso lhe dará a meta-chave do Emacs, para que você não precise procurar o Escape. Eu configurei isso ao usar o bash, e consegui que funcionasse, e então mudei para o zsh; ainda funcionou, mas, quanto à movimentação de palavras com os atalhos de teclado do Emacs, parece que o zsh e o bash são um pouco diferentes: quanto mais me aproximei do comportamento do Emacs, obtive com este patch . Se você está acostumado com o Emacs, é muito útil ter o mesmo movimento do cursor no shell.
Agora, por exemplo, defina a marca com C-SPC, marque a palavra anteriormente digitada com Mb, mate-a com Cw (ou, sem apagá-la, com Mw), insira-a com Cy e assim por diante.
OK, eu sei que você queria Ctrl-Left e assim por diante, mas isso é um downtrade enorme : dessa forma, você precisa alcançar para cada movimento do cursor alcance para retomar a digitação. Há um grande aborrecimento e queda de produtividade! Os atalhos "novos" (mas melhores) são rígidos no começo, mas eu aconselho a qualquer um, apenas force-se a usá-los, em nenhum momento (enquanto você digita o tempo todo!), Eles virão naturalmente.
Passo 3. Para copiar para a área de transferência do X, eu configuro isso (em ~/.zshrc
):
# clipboard
X_CLIPBOARD='xclip -d ":0" -selection clipboard'
alias xi="$X_CLIPBOARD" # '-i' (or '-in') is default
alias xo="$X_CLIPBOARD -o"
Agora, você pode canalizar a saída para xi
e colá-la em qualquer lugar (funciona mesmo em um X não-tty por causa do -d
, se o X estiver sendo executado); para usá-lo em um comando shell, apenas backtick xo
.
Para usá-lo no Emacs (rodando em um tty), eu tive que fazer um script duplicando a funcionalidade do xo
alias acima:
#!/bin/zsh
xclip -d ":0" -o -selection clipboard
E, em ~/.emacs
:
(defun pst ()
"Inserts the X clipboard (xclip -d ':0' -o -selection clipboard)
at point. 'M-1' (the '(1)) to insert in the current buffer."
(interactive)
(shell-command "pst" '(1))
(end-of-line) )
A razão para isso é que não consegui encontrar uma maneira de ligar o Emacs a um alias de zsh, embora eu suspeite que isso seja possível. De qualquer forma, invoque com M-x pst
.
EDITAR
Eu adicionei essa solução alternativa para tornar o Emacs forward-char
tantos caracteres quanto você acabou de inserir. (A primeira parte do código abaixo é o script - veja acima - que também mudou.) Eu uso um arquivo intermediário para fazer isso - embora, como programador, isso vá contra minha intuição (como um mau hábito), mas, bem, parece funcionar. Obviamente, o end-of-line
(na minha primeira resposta) não era bom, pois às vezes você quer inserir uma única palavra no meio de uma frase.
#!/bin/zsh
CLIP='xclip -d ":0" -o -selection clipboard'
CLIP_LEN='echo -n $CLIP | wc -c'
echo "(set-variable '*clip-len* $CLIP_LEN)" > ~/.clip_len
echo -n $CLIP
(setq *clip-len* 0)
(defun pst ()
"Inserts the X clipboard (xclip -d ':0' -o -selection clipboard)
at point. 'M-1' (the '(1)) to insert in the current buffer."
(interactive)
(shell-command "pst" '(1))
(load-file "~/.clip_len")
(forward-char *clip-len*) )