emacs, Bölge nasıl kopyalanır ve vurgulanır?


9

(kill-ring-save)Komut çalıştırıldığında bölgenin vurgulamasını kaybeden varsayılan Mw ile yeterince mutluyum . Davranışını değiştirmek istemiyorum, ancak <C-insert>benzer bir eylemi gerçekleştirmek ve bölgenin vurgulamasını korumak için yeniden bağlanmak istiyorum .

(Un) transient-mark-modedoğrudan ve bir işlev aracılığıyla ayar denedim , ancak bölge hala vurgulama kaybeder.

Yalnızca (kill-ring-save (region-beginning) (region-end))etkileşimli bir işlevde çalıştırmak beklendiği gibi çalışır, yani. vurgulamayı kaybeder.

Yalnızca (exchange-point-and-mark) (exchange-point-and-mark)etkileşimli bir işlevde çalıştırmak beklendiği gibi çalışır, yani. bölgeyi yeniden vurgular ve noktayı orijinal / doğru yerine koyar / bırakır.

Bir işlevde hepsini buluşmanızı koyduğunuzda Ancak, yok değil bölgeyi-vurgulamak yeniden. İşte çalışmayan işlev ve bağlama:

(defun kill-ring-save-keep-highlight ()
  (interactive)
  (kill-ring-save (region-beginning) (region-end))
  (exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key   (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

Kullanım: Ubuntu 10.04.3'te GNU Emacs 23.1.1

Yanıtlar:


8

Çalıştırma kill-ring-saveişareti doğrudan devre dışı bırakmaz, ancak daha sonra devre dışı bırakma işleminin yapılabilmesi için değişkeni deactivate-markolarak ayarlar . Bunu önlemek için , devre dışı bırakmadan önce sıfırlayın .tdeactivate-marknil

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (prog1 (kill-ring-save beg end)
    (setq deactivate-mark nil)))

(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

0

İşaret "aktif" olduğu için bölge vurgulanır - bu nedenle işaretin açıkça etkinleştirilmesi hile yapar. Not: Nokta / işareti değiştirmenin neden işe yaramadığından emin değilim. İşte güncellenmiş bir fonksiyon, ben de argümanları doldurmak için interaktif kullanmak için güncelledim.

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))

Etkileşimli argümanlar için işaretçiler için teşekkürler ve activate-markama yine de çalışmıyor. Hatta .emacsbu işlev olmakta olan tek kodla Ubuntu 11.04'ün temiz kayrak bir C-x C-xC-insert
VM'sini kurdum

@ fred .emacs dışında bir Emacs denediniz mi? yani emacs -qkod ile çalıştırın ve çalışıp çalışmadığını kontrol edin.
Trey Jackson

Bu işlev dışında~/.emacs ve içinde hiçbir şey olmadan (başarısız bir şekilde) çalıştırmıştı ~/.emacs.d/ve belirtildiği gibi, yepyeni bir VM'de emacs'ın yepyeni bir yüklemesinde .... Şimdi bu komutu denedim, ama o da çalışmıyor: /usr/bin/emacs --no-init-file --no-site-file --eval '(defun kill-ring-save-keep-highlight (beg end) (interactive "r") (kill-ring-save beg end) (activate-mark))'... Fonksiyon sizin için çalışıyor mu?
Peter.O
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.