Eu tenho usado o Emacs + tramp + plink para editar arquivos no servidor Unix remoto desde o Emacs 22. Recentemente eu atualizei meu Emacs para o 24, e descobri que ele não funciona mais ... ele diz que encontrou o prompt do shell remoto, mas apenas preso lá.
Abaixo está minha configuração de tramp, que funcionou perfeitamente no Emacs 23:
(require 'tramp)
(modify-coding-system-alist 'process "plink" 'utf-8-unix)
(setq tramp-default-method "plink"
tramp-completion-without-shell-p t)
(setq tramp-verbose 10)
(setq tramp-debug-buffer t)
Eu tenho um perfil de laboratório / plink "lab", que aponta para um servidor Unix remoto. Eu abro o arquivo um do servidor remoto como este:
/plink:myaccount@lab:/home/myaccount/somefile.txt
A partir do log de depuração do tramp, posso ver que o tramp descobriu o shell remoto:
17:45:58.430000 tramp-get-connection-property (7) # check-remote-echo nil
17:45:58.430000 tramp-process-one-action (5) # Call 'tramp-action-process-alive'
17:45:58.430000 tramp-accept-process-output (10) # *tramp/plink myaccount@lab* run
17:45:58.476000 tramp-accept-process-output (10) #
plink -l myaccount -ssh lab && exit || exit
Last login: Wed Aug 14 17:43:54 2013 from 192.168.0.1
Unauthorized access to this system is strictly prohibited.
[myaccount@unixhost ~]$
O problema é que aparece tramp, em seguida, preso em um loop infinito:
17:45:58.476000 tramp-get-connection-property (7) # process-buffer nil
17:45:58.492000 tramp-maybe-open-connection (3) # Found remote shell prompt on 'lab'
17:45:58.492000 tramp-get-connection-property (7) # remote-shell nil
17:45:58.492000 tramp-open-shell (5) # Opening remote shell '/bin/sh'...
17:45:58.492000 tramp-get-connection-property (7) # process-name nil
17:45:58.492000 tramp-get-connection-property (7) # remote-echo nil
17:45:58.492000 tramp-send-command (6) # exec env ENV='' PROMPT_COMMAND='' PS1=\#\$\ PS2='' PS3='' /bin/sh
17:45:58.492000 tramp-get-connection-property (7) # process-name nil
17:45:58.492000 tramp-get-connection-property (7) # chunksize nil
17:45:58.492000 tramp-set-connection-property (7) # last-cmd-time (21003 17350 492000 0)
17:45:58.492000 tramp-send-string (10) # exec env ENV='' PROMPT_COMMAND='' PS1=\#\$\ PS2='' PS3='' /bin/sh
17:45:58.492000 tramp-get-connection-property (7) # process-buffer nil
17:45:58.492000 tramp-get-connection-property (7) # check-remote-echo nil
17:45:58.492000 tramp-get-connection-property (7) # check-remote-echo nil
17:45:58.492000 tramp-accept-process-output (10) # *tramp/plink lum@lab* run
17:45:58.539000 tramp-accept-process-output (10) # exec env ENV='' PROMPT_COMMAND='' PS1=\#\$\ PS2='' PS3='' /bin/sh
#$ #$
17:45:58.539000 tramp-get-connection-property (7) # check-remote-echo nil
17:45:58.539000 tramp-get-connection-property (7) # check-remote-echo nil
17:45:58.539000 tramp-accept-process-output (10) # *tramp/plink lum@lab* run
17:45:59.539000 tramp-accept-process-output (10) # exec env ENV='' PROMPT_COMMAND='' PS1=\#\$\ PS2='' PS3='' /bin/sh
#$ #$
Isso levaria para sempre, até que eu use ctrl-g para quebrá-lo.
Não sei qual parte deu errado, novamente a mesma configuração funciona perfeitamente sob o Emacs 23 ...