킬 링에 운영 체제 클립 보드 추가


25

인터넷에서 코드 스 니펫을 운영 체제의 클립 보드에 복사하는 경우가 종종 있습니다. 그런 다음 다음과 같은 간단한 단계를 수행합니다.

  1. 내 이맥스 창으로 전환
  2. 코드를 붙여 넣을 곳을 찾으십시오.
  3. C-y( yank)를 사용 하여 복사 한 텍스트를 삽입하십시오.

그러나, 때때로 나는 무의식적으로 (예 : kill 명령의 형태를 사용하는 것이 (내 큰 실망에) 발견 kill-word또는 kill-line내가 이러한 경우 2 단계에있는 동안을)은 "클립 보드"에서 복사 된 텍스트는 결코 킬 (kill)로하지 않습니다 반지.

다른 응용 프로그램에서 복사 한 텍스트를 항상 킬 링에 넣는 방법이 있습니까?

나는 Linux에서 가장 자주 일하지만 Windows 및 Mac OS X에서 Emacs를 정기적으로 사용하므로 OS에 무관 한 대답이 선호됩니다.


링크를 제안해도 될까요? 전체 페이지를 탐색하면 클립 보드에서 복사 / 붙여 넣기 방법이 많이 나타납니다.
Nsukami _

@Nsukami_ 감사합니다. 나는 그것을 소화하려고 노력할 것이지만, 링크 된 페이지는 EmacsWiki에서 답을 찾는 데 지친 이유의 주요 예입니다. 많은 elisp 해커들은 elisp 코드가 자체 문서화되어 있고 설명이나 기능이나 사용법에 대한 설명이 필요 없다고 생각하는 것 같습니다. 나는 보통 코드를 리버스 엔지니어링 할 시간이 없어서 내가 원하는 것을 수행하는지 여부를 결정합니다.
nispio

하하, 이해합니다;)
Nsukami _

답변:


31

당신은 사용자 정의 할 필요 save-interprogram-paste-before-killt. 클립 보드를 붙여 넣기 전에 emacs에서 무언가를 죽일 경우 클립 보드를 킬링에 밀어 넣습니다. 관련 사용자 정의는 yank-pop-change-selectionemacs의 현재 yank를 클립 보드로 푸시하는 것입니다. 이 두 가지가 모두 작동하려면 기본값 ( emacs 25.1에서 x-select-enable-clipboard교체 됨 gui-select-enable-clipboard) t이 기본값 이어야 합니다.

기본적으로 해제되어있는 이유는 쉽게 교체 할 수있는 클립 보드와 달리 세션을 통해 지속되는 킬링에 대량의 데이터를 실수로 밀어 넣지 않도록하기 위함입니다.


1
예상보다 깨끗하고 쉬워졌습니다. save-interprogram-paste-before-kill내가 원하는 것을 정확하게하는 것 같습니다!
nispio

나는 이맥스 26에 있고 gui-select-enable-clipboard그냥라고 select-enable-clipboard합니다.
Rune Kaagaard

3

다른 해결책은 가능하면 cli 도구를 사용하는 것입니다.

  • Mac에서 pbcopy / pbpaste

  • Cygwin의 getclip / putclip

  • 리눅스에서 xsel
  • GUI Emacs의 x-clipboard (다른 사람들이 언급했듯이 x-select-enable-clipboard 플래그를 켜야합니다).

이 솔루션의 장점은 클립 보드를 항상 사용할 수 있다는 것입니다 (예 : 원격 ssh 일 때).

내 대답에는 두 부분이 있습니다. 1 부에서는 클립 보드를 조작하는 편리한 도구를 소개합니다. 두 번째 부분은 원래 질문에 대답합니다 (클립 보드를 킬 링에 저장).

1 부

~ / .emacs에 아래 코드를 삽입하십시오.

(setq *is-a-mac* (eq system-type 'darwin))
(setq *cygwin* (eq system-type 'cygwin) )
(setq *linux* (or (eq system-type 'gnu/linux) (eq system-type 'linux)) )
(defun copy-to-x-clipboard ()
  (interactive)
  (if (region-active-p)
      (progn
        (cond
         ((and (display-graphic-p) x-select-enable-clipboard)
          (x-set-selection 'CLIPBOARD (buffer-substring (region-beginning) (region-end))))
         (t (shell-command-on-region (region-beginning) (region-end)
                                     (cond
                                      (*cygwin* "putclip")
                                      (*is-a-mac* "pbcopy")
                                      (*linux* "xsel -ib")))
            ))
        (message "Yanked region to clipboard!")
        (deactivate-mark))
        (message "No region active; can't yank to clipboard!")))

(defun paste-from-x-clipboard()
  (interactive)
  (cond
   ((and (display-graphic-p) x-select-enable-clipboard)
    (insert (x-selection 'CLIPBOARD)))
   (t (shell-command
       (cond
        (*cygwin* "getclip")
        (*is-a-mac* "pbpaste")
        (t "xsel -ob"))
       1))
   ))

(defun my/paste-in-minibuffer ()
  (local-set-key (kbd "M-y") 'paste-from-x-clipboard)
  )

(add-hook 'minibuffer-setup-hook 'my/paste-in-minibuffer)

두 번째 부분

아래 코드를 ~ / .emacs에 삽입하고 지금부터 "Mx paste-from-clipboard-and-cc-kill-ring"을 사용하여 붙여 넣습니다.

(defun paste-from-clipboard-and-cc-kill-ring ()
  "paste from clipboard and cc the content into kill ring"
  (interactive)
  (let (str)
    (with-temp-buffer
      (paste-from-x-clipboard)
      (setq str (buffer-string)))
    ;; finish the paste
    (insert str)
    ;; cc the content into kill ring at the same time
    (kill-new str)
    ))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.