"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.

Работает для меня.

Другие вопросы по тегам