<double-mouse-1> öğesine bağlı sözcük / simge seçme işlevi nedir


11

Şu anda çift fare tıklaması ile yaptığım noktada kelime / sembol seçme yeteneğini seviyorum. Klavyeden yapabilmek istiyorum ve bu yüzden bir tuşa (ya da zaten zaten?) Bağlamak istiyorum, bu yüzden işlevin adına ihtiyacım var. Fonksiyonun zaten var olması gerektiğini düşünüyorum, ancak adının ne olduğunu anlayamıyorum.

Denedim C-h kama fareyi çift tıklattığımda yardım <down-mouse-1>ortaya çıkıyor (yardım sisteminin ikinci tıklamayı falan beklemediğini varsayıyorum). Ayrıca, bu işlevselliğin bölüm 21.2'de tanımlandığı belgeleri de aradım, ancak işlevin adını söylemiyor.

Güncelleme: Tipik keybinding için ben eşdeğerdir varsayalım <C-left>ardından <C-S-right>hangi vardır left-wordve right-wordShift tuşu ikincisi düzenlenen olmasına rağmen, sırasıyla. (Üst karakter tuşuyla klavye tanımlamaları ve işlevlerle eşleştirilmeleri arasındaki ilişkiyi tam olarak anlamıyorum, yardımın onu tanımlanmadan önce <C-S-right>çevirmesine yardımcı olur )<C-right>right-word


C-h bBu arabellek kullanılarak ve arandığında, belirli bir olayla <double-mouse-1>yapılan çağrıların mouse-set-point("mouse.el" den) gösterilmektedir. Bunun ne kadar
işe yaradığından

1
C-sağ ve C-solun kaydırılmış ve kaydırılmamış versiyonu arasındaki ilişki için, bunun etkisi shift-selection-mode(bkz. (info "(emacs) Shift Selection")). Ayrıca bkz. Emacs.stackexchange.com/questions/12858/…
YoungFrog

Emacs'ımın çoğunu klavye makroları olarak programlamayı sağlayan şey bu tür bir karışıklıktır. Basit bir kbd makrosu <right> <C-left> <C-S-right>, bu bağlantıda uzun süre tartışılan ince konuları tam olarak ele almam gerekmediği anlamına gelir.
Chip Grandits

Yanıtlar:


9

Aslında biraz karmaşık. Çift tıkladığınızda mouse-1birden çok eylem vardır. <down-mouse-1>önce düğmeye bastığınızda oluşur. Ardından mouse-1, düğmeyi bıraktığınızda oluşur.

<down-mouse-1>, komuta bağlıdır mouse-drag-regionve bu komut çağırır mouse-drag-track. Bu işlev fare düğmesi tıklamalarını sayar ve herhangi bir fare hareketini izler (çift tıklarsanız fareyi hareket ettirmediğiniz anlamına gelir).

mouse-drag-trackmouse-start-end seçilecek metin aralığını belirlemek için işlev çağırır . Bu geçer mouse-start-endüçüncü arg, sizin için tıkladım pozisyon, ilk iki args ve Tıklama sayısına. Bu mouse-start-end:

mouse-start-end is a compiled Lisp function in `mouse.el'.

(mouse-start-end START END MODE)

Return a list of region bounds based on START and END according to MODE.
If MODE is 0 then set point to (min START END), mark to (max START END).
If MODE is 1 then set point to start of word at (min START END),
mark to end of word at (max START END).
If MODE is 2 then do the same for lines.

Üçüncü argüman ( MODE) olarak iletilen tıklama sayısı , çift tıklama için 1'dir.

Bu kodun bir kısmını bir klavye tuşu dizisinden arayamazsınız, ancak kodu incelemek, istediğinizi yapmak için klavyeden bir tuşa basılabilir komut yazmanıza yardımcı olabilir.


Fare olaylarında neden C-h k çalışmadığını açıkladığınız için teşekkür ederiz . Emacs "fare ele" nasıl araştırmak için anladım en iyi yolu bir klavye makro olarak kaydetmek, adlandırmak ve daha sonra insert-kbd-macro genellikle tarafından oluşturulan bir fare olayı kullanmak için denemek olmaz Bu geçici makrolar sadece Emacs'ın ne yaptığını görmek için kullanışlıdır.
Chip Grandits

6

@Drew, fare eylemlerine bağlı olaylarla ilişkili bazı karmaşıklıkları açıkladı. Klavyeyi kullanarak noktayı işaretlemek için nihai hedefinize gelince, genişleme bölgesi ile ilgilenebilirsiniz .

expand-regionbölgeyi anlamsal birimlerle değiştirmenize olanak tanır. Örneğin, hiçbir bölge etkin olmadığında, çağrılması er/expand-region(genellikle bağlı C-=) geçerli sözcüğü işaretler. Tekrar çağırmak bölgeyi geçerli cümleye genişletir. Ve sonra paragraf, bölüm vb. Gerçek birimler bulunduğunuz moda bağlı olacaktır, bu nedenle lisp modlarında sembol, sembolü çevreleyen ifade, ifadeyi çevreleyen ifade vb.

Bağlantı verilen sayfanın daha fazla açıklaması ve bunu gösteren bir videosu vardır.


1
evet melpa paket listesinde genişletme bölgesi paketini görüyorum. Çok yararlı, Emacs'da varsayılan olmadığına veya en azından CEDET ile birlikte gelmediğine şaşırdım. Bahşiş için teşekkürler!
Chip Grandits

Chip Grandits: Bu, yazarların paketlerini uygun telif hakkı ataması ile FSF'ye göndermelerine bağlıdır. Yazarlar göndermediyse Emacs'ın varsayılan bir parçası olamaz.
phils

2

İşte mouse-set-regionçift ​​tıkladığınızda işaretleme yapan bir işlev çıkarım:

(defun ora-mark-like-double-mouse-1 ()
  (interactive)
  (let ((bnd (mouse-start-end (point) (point) 1)))
    (goto-char (car bnd))
    (push-mark)
    (set-mark (point))
    (goto-char (cadr bnd))))
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.