Yüzüğü öldürmek için işletim sistemi panosu ekleyin


25

Genellikle kendimi bir kod pasajını işletim sistemimin panosuna internetten kopyalarken buluyorum. Sonra aşağıdaki basit adımları atacağım:

  1. Emacs pencereme geç
  2. Kodu yapıştırmak istediğim yeri bul
  3. Kopyalanan metni eklemek için C-y( yank) düğmesini kullanın .

Bununla birlikte, bazen (2 yaşımdayken) istemeden bir çeşit kill komutu ( kill-wordya da gibi kill-line) kullandığımı (büyük hayal kırıklığım için) buluyorum. yüzük.

Diğer uygulamalardan kopyalanan metnin her zaman öldürme halkama yazdığından emin olmanın bir yolu var mı?

En sık Linux'ta çalışıyorum, ancak Windows ve Mac OS X'te düzenli olarak Emacs kullanıyorum, bu nedenle OS-agnostik bir cevap tercih ediliyor.


Bu bağlantıyı önerebilir miyim ? tüm sayfayı tarayarak, kopyala / yapıştır seçeneğinin panodan / panoya kopyalandığını görebilirsiniz
Nsukami _

@Nsukami_ Teşekkürler. Onu sindirmeye çalışacağım, ancak bağlantılı sayfa EmacsWiki’de cevapları aramaktan neden bıktığımın en iyi örneği. Elisp bilgisayar korsanlarının birçoğu, elisp kodunun kendi kendini belgeleme olduğunu ve yorum gerektirmediğini ve işlev veya kullanım ile ilgili açıklama gerektirmediğini düşünüyor. İstediğim şeyi yapıp yapmamasına karar vermek için genellikle kodu tersine çevirecek zamanım yok.
nispio

haha, anlıyorum;)
Nsukami _

Yanıtlar:


31

Özelleştirmeniz save-interprogram-paste-before-killgerekir t. Bu, panoyu yapıştırmadan önce emacs'te bir şey öldürmeniz durumunda panonuzu killring'in üzerine itecektir. İlgili yank-pop-change-selectionyanlaştırma, geçerli yankınızı emacs’de panoya iter. Her ikisinin de çalışması için , varsayılan olan x-select-enable-clipboard( gui-select-enable-clipboardemacs 25.1'de değiştirilen ) gerekir t.

Bunun varsayılan olarak kapatılmasının nedeni, kolayca değiştirilen panodan farklı olarak, oturum boyunca devam eden ve büyük miktarda veriyi istemeden devam ettiren engellemeye istemektir.


1
Beklediğimden daha temiz ve kolay. save-interprogram-paste-before-killtam olarak istediğimi yapmak gibi görünüyor!
nispio

Emacs 26'dayım, ve gui-select-enable-clipboardsadece deniyor select-enable-clipboard.
Rune Kaagaard

3

Başka bir çözüm, mümkünse sadece cli aracını kullanmak

  • Mac'te pbcopy / pbpaste

  • Cygwin'de getclip / putclip

  • Linux'ta xsel
  • GUI Emacs'daki x-clipboard (diğerleri belirtildiği gibi, x-select-enable-clipboard işaretini açmanız gerekir).

Bu çözümün avantajı panoya her zaman kullanılabilir olmasıdır (örneğin, ssh uzaktan olduğunda).

Cevabımın iki bölümü var. birinci bölümde panoyu değiştirmek için bazı kullanışlı araçlar tanıtıldı. ikinci bölüm orjinal sorunuzu cevaplayacaktır (panoya kill ringine koyun).

BÖLÜM BİR

~ / .Emacs içine aşağıdaki kodu ekleyin

(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)

BÖLÜM İKİ

~ / .emacs içine aşağıdaki kodu ekleyin ve bundan sonra, yapıştırmak için "panodan-yapıştır-ve-cc-kill-ring" mx kullanın:

(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)
    ))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.