Emacs imleci ekrandan çıkarsın


23

Bu soru aslında /programming/15895313/let-emacs-move-the-cursor-off-screen adresinde sorulmuştu , ancak aldığım tüm cevaplar "az da olsa yapılamaz" dedi. , emacs ile sadece kabul etmiyorum.

Çoğu GUI metin editörünün çalışması gibi, Emacs imlecinin ekran dışına taşınmasına izin vermek mümkün müdür? Herhangi bir GUI editörü üzerinde Emacs kullandığımda bu beni rahatsız eden en büyük şeylerden biri. Aşağı kaydırdığımda, imleç tamponun üst tarafından "ileri itiliyor".

Daha önce bunun tamamen imkansız olduğunu düşünmüştüm, çünkü bu Emacs'in mimarisine bağlıydı, ancak daha sonra ikincil imleçler için tam olarak bunu yapan çoklu imleçler gördüm (kaydırma işlevlerinin sekonder üzerinde hareket etmesini engellediğinizi düşünerek) imleçler). Ana imleci bazı gizli arabellekte kullanmak için çoklu imleçler kullanmak mümkün olabilir mi ve etkili imleç aslında düzenlediğim şey olabilir mi? Ya da belki başka bir akıllı hile? Ya da belki benim Googling'im başarısız oldu ve bu gerçekten herhangi bir sihir olmadan mümkün mü?

Terminal emacs kullanıyorum, o yüzden orada çalışması gerekiyor.


Tüm çoklu imleçler paketinin yaptığı, gerçek olanın kısıtlamalarına tabi olmayan sahte imleçler eklemek olduğunu unutmayın. Umarım önceki sorunuzun önerilerine göre bir cevap olacaktır.
wasamasa

Bu sorunun kaydırma çubuklarını kullanmaya özgü olduğunu varsayıyorum, doğru mu?
nispio

1
Peki, imleci yanınıza almamanız için hangi kaydırma komutlarını kullanıyorsunuz? Deneyimlerime göre, PgUp / PgDn veya ok tuşlarını kullanırken imleç sizi tüm editörlerde takip eder .
nispio

4
@nispio belki fare tekerleği ile kaydırma?
ffevotte

2
Sayfa yukarı ve Sayfa aşağı (Cv ve Mv), imleç ekrandan çıkmadığı sürece imleci emacs içinde hareket ettirmez. Kaydırma, hareket etmekten farklıdır (imleç).
asmeurer

Yanıtlar:


11

Kullanıma sunulan yeni bir paket var GNU ELPA denilen scroll-restoregirişimleri bu sorunu gidermek için bu. Aralarından seçim yapabileceğiniz çok sayıda farklı davranış vardır, ancak bunu kendim için yapılandırma biçimim (aşağıya bakın), kaydırma komutları sırasında imlecin görünmez olmasına ve ardından tekrar yazmaya başladığımda orijinal konumuna geri dönmesine neden olur.

Şimdiye kadar birkaç hatayla karşılaştım, ancak paket çoğunlukla reklamı yapılmış gibi görünüyor. Yükleyerek test edebilirsiniz.

M-x package-install RET scroll-restore RET

Paket yüklendikten sonra küçük modu

M-x scroll-restore-mode

Şahsen, Scroll Lockanahtarı çok bağlıyım çünkü inanılmaz derecede apropos gibi görünüyor! Bu, init dosyama ekleyeceğim şey:

(require 'scroll-restore)
(scroll-restore-mode 1)
;; Allow scroll-restore to modify the cursor face
(setq scroll-restore-handle-cursor t)
;; Make the cursor invisible while POINT is off-screen
(setq scroll-restore-cursor-type nil)
;; Jump back to the original cursor position after scrolling
(setq scroll-restore-jump-back t)
;; Toggle scroll-restore-mode with the Scroll Lock key
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode)

1
Anahtarını bağladıysanız, bazen devre dışı bırakmak istediğinizi varsayalım. Bu mod normal düzenleme için can sıkıcı mı?
T. Verron

1
@ T.Verron Şu anda oldukça sıkıntılı görünüyor ve başarısızlık modlarından biri imlecinizi bir alanda "yakalamak" ve bırakmasına izin vermemek. İmlecimi tekrar serbest bırakmanın tek yolu modu devre dışı bırakmak. Tüm böcekler çözüldüğünde, sürekli kullanmaktan sakıncası olmaz.
nispio

2
Bunun nasıl çalışması gerekiyor? Bir şey yapmasını sağlayamıyorum.
asmeurer

5

Her zaman kullandığım yöntem, geri atlamak istediğim işareti ayarlamak ve ardından arabellek kullanımını bitirdiğimde, işaretini kullanarak işaretlerim C-u C-SPC. Gitmeden önce işareti koymayı unuttuğumda bile, işaretin patlamasının genellikle geldiğim yere oldukça yakın olduğumu görüyorum. Bu, kısmen bazı komutların ( isearchörneğin, sizin) farkında olmadan bile işareti koymasından kaynaklanmaktadır. Demek ki, düzenleme sürecinde, yanlışlıkla küçük bir ekmek kırıntısı izi bırakıyorsunuz.

Belgelerden:

set-mark-command is an interactive compiled Lisp function in `simple.el'.

It is bound to C-@, C-SPC.

(set-mark-command ARG)

....

With prefix argument (e.g., C-u C-SPC), jump to the mark, and set the mark
from position popped off the local mark ring (this does not affect the global
mark ring).  Use C-x C-@ to jump to a mark popped off the global mark ring
(see `pop-global-mark').

Neredeyse ayar imleri veya kayıtları ile rahatsız asla, ama neredeyse her zaman hızlı bir şekilde kullanarak geldi yolumu geri bulabilirsiniz C-u C-SPCya pop-global-mark.


Açıkçası, insanların imlecin ekran dışına çıkabilmelerini istemelerinin ana nedeni, imlecin konumlarının uygun bir geçmişi olmayan editörlere alışkın olmalarıdır. Ayrıca o kadar o yapabilir scroll-upve scroll-downböylece otomatik olarak getirip kabul C-u C-SPCsen nereden geldiğini geri almak için emin olacaktır.
Radon Rosborough

0

Aşağıdaki kod, fare tekerleği kaydırma işleminden sonra geri sıçramam için yeterince iyi:

(advice-add 'mwheel-scroll :before (lambda (arg) (if (not (eq last-command 'mwheel-scroll)) (setq point-before-mwheel-scroll (window-point)))))
(defun jump-back () (goto-char point-before-mwheel-scroll))
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.