Відповіді:
Будьмо уважні до наших визначень тут
kill-ring-save
( як правило , пов'язані зM-w ).yank
(як правило, пов'язана з C-y).У моєму випадку (у GNOME):
Щоб зробити систему копіювання за допомогою пасти Emacs та копіювати роботу Emacs із системною пастою, потрібно додати її (setq x-select-enable-clipboard t)
до своєї .emacs
. Або спробуйте
META-X set-variable RET x-select-enable-clipboard RET t
Я думаю, що це досить стандартна сучасна поведінка Unix.
Також важливо зауважити (хоча ви кажете, що ви використовуєте Emacs в окремому вікні), що коли Emacs працює в консолі, він повністю розлучається із системою та буферами X: вирізати та вставити в цьому випадку опосередковується терміналом . Наприклад, "Правка-> Вставити" у вікні терміналу має діяти так, як якщо б ви ввели текст із буфера обміну в буфер Emacs.
META-X set-variable RET select-enable-clipboard RET t
або(setq select-enable-clipboard t)
Вставте у свій .emacs
файл:
(setq x-select-enable-clipboard t)
emacs -nw
я використовую власні ярлики терміналу; Shift-Ctrl-X для вирізання (вбивства) тексту та Shift-Ctrl-C для копіювання.
emacs -nw
всередині горизонтально розділених tmux windows.
Я вставлю це у свої .emacs:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Згодом у мене взагалі не виникає проблем із вирізанням та вставленням вперед і назад з нічого в Emacs до будь-якого іншого додатка X11 або Gnome.
Бонус: щоб ці речі траплялися в Emacs, не завантажуючи цілий .emacs, виконайте Cx Ce з курсором відразу після закриття батьків кожного з цих виразів у буфері .emacs.
Удачі!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
Складність копіювання та вставки в Emacs полягає в тому, що ви хочете, щоб вона працювала незалежно від внутрішнього kill / yank, і ви хочете, щоб вона працювала і в терміналі, і в gui. Існують надійні рішення для терміналу або gui, але не для обох. Після установки xsel (наприклад sudo apt-get install xsel
), ось що я роблю для копіювання та вставки для їх поєднання:
(defun copy-to-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(message "Yanked region to x-clipboard!")
(call-interactively 'clipboard-kill-ring-save)
)
(if (region-active-p)
(progn
(shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
(message "Yanked region to clipboard!")
(deactivate-mark))
(message "No region active; can't yank to clipboard!")))
)
(defun paste-from-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(clipboard-yank)
(message "graphics active")
)
(insert (shell-command-to-string "xsel -o -b"))
)
)
(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)
Я припускаю, що під Emacs ви маєте на увазі Emacs під X (тобто не всередині вікна терміналу).
Є два способи:
Доступні операції з буфера обміну:
Є стаття EmacsWiki, в якій пояснюються деякі проблеми з копіюванням та вставкою під X та як налаштувати його на роботу.
Це працює з M-w
Mac OSX. Просто додайте у файл .emacs .
(defun copy-from-osx ()
(shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
(let ((process-connection-type nil))
(let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc))))
(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)
Код нижче, натхненний відповіддю @ RussellStewart вище, додає підтримку x-PRIMARY та x-SECONDARY, замінює region-active-p
на те, use-region-p
щоб охопити регістр порожнього регіону, не повертається мовчки, якщо xsel не встановлено (повертає повідомлення про помилку), і включає в себе функцію "вирізати" (emacs Cy, windows Cx).
(defun my-copy-to-xclipboard(arg)
(interactive "P")
(cond
((not (use-region-p))
(message "Nothing to yank to X-clipboard"))
((and (not (display-graphic-p))
(/= 0 (shell-command-on-region
(region-beginning) (region-end) "xsel -i -b")))
(error "Is program `xsel' installed?"))
(t
(when (display-graphic-p)
(call-interactively 'clipboard-kill-ring-save))
(message "Yanked region to X-clipboard")
(when arg
(kill-region (region-beginning) (region-end)))
(deactivate-mark))))
(defun my-cut-to-xclipboard()
(interactive)
(my-copy-to-xclipboard t))
(defun my-paste-from-xclipboard()
"Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
(interactive)
(if (display-graphic-p)
(clipboard-yank)
(let*
((opt (prefix-numeric-value current-prefix-arg))
(opt (cond
((= 1 opt) "b")
((= 4 opt) "p")
((= 16 opt) "s"))))
(insert (shell-command-to-string (concat "xsel -o -" opt))))))
(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)
Я використовую наступне на основі інших відповідей тут, щоб зробити C-x C-w
та C-x C-y
скопіювати та вставити на Mac та Linux (якщо хтось знає версію для Windows, сміливо додайте її). Зауважте, що в Linux вам доведеться встановити xsel та xclip разом із менеджером пакунків.
;; Commands to interact with the clipboard
(defun osx-copy (beg end)
(interactive "r")
(call-process-region beg end "pbcopy"))
(defun osx-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "pbpaste" nil t nil))
(defun linux-copy (beg end)
(interactive "r")
(call-process-region beg end "xclip" nil nil nil "-selection" "c"))
(defun linux-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "xsel" nil t nil "-b"))
(cond
((string-equal system-type "darwin") ; Mac OS X
(define-key global-map (kbd "C-x C-w") 'osx-copy)
(define-key global-map (kbd "C-x C-y") 'osx-paste))
((string-equal system-type "gnu/linux") ; linux
(define-key global-map (kbd "C-x C-w") 'linux-copy)
(define-key global-map (kbd "C-x C-y") 'linux-paste)))
xclip
для вставки вмісту буфера обміну, а також за допомогою xclip -o
. Це може бути корисно для людей, у яких вже є xclip
і не хочуть встановлювати іншу програму, щоб робити як копіювання, так і вставлення.
Ви можете вказати, яку платформу ви використовуєте. Це на linux, unix, macosx, windows, ms-dos?
Я вважаю, що для Windows це повинно працювати. Для MacOSX він буде доданий до буфера обміну x-windows, що не те саме, що буфер обміну macosx. Для Linux це залежить від вашого смаку менеджера вікон, але я вважаю, що x-windows добре справляється з більшістю з них.
Отже, вкажіть, будь ласка.
Що я роблю, - це використовувати хороший термінальний інструмент (PuTTY для Windows, Konsole або Terminal в Linux), який має вбудовані засоби копіювання.
У PuTTY ви виділяєте потрібний текст мишкою, а потім вставляєте його в інше місце. Клацання правою кнопкою миші у вікні PuTTY вставляє вміст буфера копіювання / вставки Windows.
У Konsole або Terminal в Linux ви виділите те, що ви хочете, потім натисніть Shift + Ctrl + C для копіювання та Shift + Ctrl + V для вставки.
У компіляції win32 emacs текст yanking ставить його на буфер копіювання / вставлення .. більшу частину часу.
У Mac OS X чіткові клавіші Apple працюють чудово, оскільки Термінал захоплює їх.
Немає прямого способу зробити це в командному рядку, оскільки оболонка не підтримує буфер копіювання / вставки для кожної програми. Баш робить зберегти копію / вставити буфер для себе, і, за замовчуванням, EMACS ^ к / ^ у ярликів роботи.