2013-04-14 33 views
5

Tôi muốn đặt các khoảng thời gian khác nhau để BẬT và nhấp nháy TẮT. Ý tôi là, tôi muốn con trỏ hiển thị trong 1 giây và TẮT trong 0,2 giây. Tôi đọc tài liệu về con trỏ nhưng gần nhất tôi thấy là khoảng thời gian nhấp nháy thay đổi cả BẬT và TẮT nhấp nháy.Emacs - đặt các khoảng thời gian khác nhau cho con trỏ nhấp nháy và tắt

Cách tốt nhất để tùy chỉnh điều này trong Emacs là gì?

Trả lời

3

Không có chức năng như vậy được xây dựng vào Emacs, nhưng bạn có thể hack nó bằng cách thêm các dòng sau vào emacs bạn file:

(defvar blink-cursor-interval-visible 1) 
(defvar blink-cursor-interval-invisible 0.2) 

(defadvice internal-show-cursor (before unsymmetric-blink-cursor-interval) 
    (when blink-cursor-timer 
    (setf (timer--repeat-delay blink-cursor-timer) 
      (if (internal-show-cursor-p) 
       blink-cursor-interval-visible 
      blink-cursor-interval-invisible)))) 
(ad-activate 'internal-show-cursor) 

Emacs thực hiện các nhấp nháy của con trỏ với một chức năng chuyển đổi gọi là bởi một bộ đếm thời gian. Mỗi khi hàm được gọi, nó sẽ ẩn con trỏ nếu nó hiện đang hiển thị hoặc hiển thị nó nếu nó không nhìn thấy được. Thật không may, bộ đếm thời gian gọi hàm này ở một khoảng thời gian cố định.

Để nhận ra thời gian trễ khác nhau tùy thuộc vào trạng thái của con trỏ, mã trên advises chức năng nội bộ hiển thị hoặc ẩn con trỏ. Mỗi lần hàm đó được gọi, lời khuyên thay đổi thời gian trễ của bộ hẹn giờ thành 1 hoặc 0,2, tùy thuộc vào việc con trỏ có hiển thị hay không. Tức là, mỗi khi con trỏ bị ẩn hoặc hiển thị, thời gian trễ của bộ hẹn giờ được thay đổi.

Khá đáng sợ, nhưng nó thực hiện thủ thuật.

+1

Bạn có thể giải thích cách hoạt động của tính năng này không? Tôi khá hứng thú. –

+0

Cảm ơn câu trả lời. Nó phá vỡ nếu bạn gọi chế độ nhấp nháy-con trỏ nhưng hoạt động như mong đợi :) – Jesse

+0

Bạn có phiền phức tạp khi nó bị hỏng không? – Thomas

2

Tôi có thể sửa đổi chức năng blink-cursor-timer-function để hỗ trợ những gì bạn muốn tôi tin tưởng.

tiên, bạn sẽ cần phải sửa đổi các giá trị của blink-cursor-interval-0,2

sau đó mã này nên làm như lừa: blink-cursor-timer-function được gọi mỗi blink-cursor-interval giây. Vì vậy, chức năng này sẽ được gọi sau mỗi giây .2 giây, nó sẽ giữ cho con trỏ BẬT cho 5 cuộc gọi rồi tắt nó đi 1. Vì vậy, 5 cuộc gọi lúc .2 giây cho mỗi cuộc gọi sẽ cung cấp cho bạn 1 giây thời gian ON, sau đó chỉ .2 giây của thời gian OFF.

;; change the interval time to .2 
(setq blink-cursor-interval .2) 

;; create a variable that counts the timer ticks 
(defvar blink-tick-counter 0) 

;; this function will be called every .2 seconds 
(defun blink-cursor-timer-function() 
    "Timer function of timer `blink-cursor-timer'." 
    (if (internal-show-cursor-p) 
     (progn 
    (if (> blink-tick-counter 4) 
     (progn 
      (internal-show-cursor nil nil) 
      (setq blink-tick-counter 0)) 
     (setq blink-tick-counter (1+ blink-tick-counter)))) 
    (internal-show-cursor nil t))) 
+0

Giải pháp của bạn hoạt động tốt, nhưng câu trả lời khác trông sạch hơn và tôi chỉ có thể chọn một câu trả lời. Dù sao, cảm ơn bạn quá – Jesse

Các vấn đề liên quan