2009-09-16 32 views
8

Tôi đang sửa đổi nhỏ thành SLIME, để tôi có thể nhận tất cả các ký hiệu hiện đang được tải từ Lisp, phân tích chúng và tạo phông chữ cho chúng.Cập nhật từ khóa khóa phông chữ trong emacs mà không cần tải lại chế độ chính

Tôi đã thực hiện tất cả các bước này, nhưng tôi gặp sự cố nhỏ - khi danh sách từ khóa thay đổi phông chữ, bộ đệm không được cập nhật trừ khi bạn khởi động lại chế độ lisp chính. Tôi không muốn khởi động lại chế độ lisp mỗi khi tôi cập nhật từ khóa, bởi vì tôi có một số móc trên chế độ lisp mà tôi muốn chạy chỉ khi tôi tải tệp lần đầu tiên.

Có cách nào khác để cập nhật phông chữ khóa để nó đọc tất cả các từ khóa mới và phông chữ đệm phù hợp không? Tắt khóa phông chữ và sử dụng font-lock-fontify-buffer sẽ không thực hiện thủ thuật.

UPD: Đã thêm tiền thưởng - câu hỏi vẫn tiếp tục. Tôi cần một cách để tải lại từ khóa phông chữ mà không cần tải lại chế độ chính.

Trả lời

5

Ok, làm thế nào về vấn đề này thay vì:

(defun my-font-lock-restart() 
    (interactive) 
    (setq font-lock-mode-major-mode nil) 
    (font-lock-fontify-buffer)) 
+0

Tuyệt vời, điều này dường như hoạt động! – freiksenet

1

Kích hoạt chế độ chính không phải là điều làm cho khóa phông làm điều của nó. Tôi không quen thuộc với nội bộ của SLIME hoặc chế độ lisp, nhưng chỉ cần thiết lập biến sẽ làm cho nó hoạt động. Toggling font-lock-mode sẽ làm cho font-lock bắt đầu refontifying với các từ khóa mới trong tâm trí, như nên font-lock-fontify-buffer.

Tôi đột nhập vào chế độ cperl, chủ yếu và đó là vấn đề đơn giản của cperl-init-faces (đặt các biến khóa phông chữ bên trong) và khởi động lại phông chữ. chế độ lisp không nên khác nhiều, ngoại trừ việc không cần gọi đến cperl-init-faces;)

Chỉnh sửa: một số thử nghiệm với chế độ tương tác lisp cho thấy rằng thậm chí khởi động lại chế độ khóa phông chữ là không cần thiết. Chỉ cần thay đổi font-lock-keywords là đủ, miễn là bạn kích hoạt lại fontification bằng cách nào đó. (Chỉnh sửa văn bản, font-lock-fontify-đệm, vv)

+0

Điều đó rất lạ. Bạn sử dụng những gì để sửa đổi từ khóa? Tôi sử dụng "font-lock-add-keywords". – freiksenet

+0

Khởi động lại phông chữ-lock cũng không giúp cho chế độ python chẳng hạn. Có lẽ đó là phiên bản Emacs của tôi? Bạn có phiên bản nào? Tôi có GNU Emacs 23.1.50.1 trên Ubuntu x86-64. – freiksenet

1

Bạn tạm thời có thể xóa các biến chế độ móc và khởi động lại nó:

(defun my-restart-lisp-mode() 
    (interactive) 
    (let ((lisp-mode-hook nil)) 
    (normal-mode))) 
+0

Tuyệt, tôi sẽ thử cái này. Tôi tự hỏi tại sao nó không hoạt động như jrockway được mô tả theo mặc định :) – freiksenet

+0

Được rồi, điều này là tốt hơn, nhưng điều này vô hiệu hóa tất cả các móc, bao gồm cả slime hook chẳng hạn, điều đó không tốt: (Tôi thực sự tự hỏi, nếu nó có thể làm – freiksenet

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