"yank" не вставляет текст при использовании Emacs поверх SSH
Когда я попытался запустить Emacs на удаленном сервере через ssh, C-y
(четное M-x yank
) не может работать. Каждый раз, когда я нажимаю C-y
, он говорит "Марк установлен", но больше ничего не происходит. Я работаю под Linux, а удаленный сервер - Mac Pro.
Теперь я могу только загрузить файл на свой компьютер. Есть идеи как лучше решить эту проблему?
2 ответа
Я подозреваю, что ваша проблема не в том, что Emacs работает удаленно, а в том, что Emacs работает в "текстовом режиме" (т.е. работает внутри эмулятора терминала). При работе в таком режиме Emacs не знает ни о каком графическом интерфейсе, который может быть запущен, поэтому C-y
только возвращает текст, который вы ранее убили в том же сеансе Emacs через что-то вроде C-w
или же M-w
,
Вы можете попытаться выполнить "вставку" в эмуляторе терминала (вероятно, Cmd-v), которая отправит выбранный текст в основное приложение (в данном случае, Emacs), как если бы он был напечатан. Пока текст, который вы вставляете, состоит из "достаточно простых" символов, он может работать нормально. Если он содержит какие-то забавные контрольные символы, все ставки отключены (если он содержит не-ASCII-символы, он также может вести себя странным образом, в зависимости от того, настроены ли все "терминал-эмулятор +ssh+Emacs" правильно или нет),
Проблема с текстовым режимом не была моей проблемой.
У меня есть MacBook, где я запускаю Emacs. Я использую tramp-mode для редактирования файлов (удаленно) на компьютере с Linux. Там нет удаленного Emacs. Это все локально.
Я установил копирование / вставку на Mac таким образом, чтобы я мог "вырвать" из системного буфера обмена вне emacs:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; handle copy/paste intelligently
(defun copy-from-osx ()
"Handle copy/paste intelligently on osx."
(let ((pbpaste (purecopy "/usr/bin/pbpaste")))
(if (and (eq system-type 'darwin)
(file-exists-p pbpaste))
(shell-command-to-string pbpaste))))
(defun paste-to-osx (text &optional push)
"Handle copy/paste intelligently on osx.
TEXT gets put into the Macosx clipboard.
The PUSH argument is ignored."
(let* ((process-connection-type nil)
(proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc)))
(setq interprogram-cut-function 'paste-to-osx
interprogram-paste-function 'copy-from-osx)
По-видимому, tramp-mode пытается быть умным, и когда дергает текст, он запускает команду pbpaste, которую я настроил, удаленно. Или пытается. Который я не хочу. Поэтому я изменил copy-from-osx
быть таким:
(defun copy-from-osx ()
"Handle copy/paste intelligently on osx."
(let ((pbpaste (purecopy "/usr/bin/pbpaste")))
(if (and (eq system-type 'darwin)
(file-exists-p pbpaste))
(let ((tramp-mode nil)
(default-directory "~"))
(shell-command-to-string pbpaste)))))
Обратите внимание, что он временно устанавливает значение tramp-mode на ноль перед запуском pbpaste.
Работает для меня.