Tôi có thể sử dụng một hình ảnh trong bật lửa mô hình của tôi?


12

Modeline của tôi là bừa bộn. Tôi có thể làm cho nó hiển thị hình ảnh thay vì tên chế độ?

Tôi có thể sử dụng biểu tượng cảm xúc unicode (như cho Python hoặc cho Coq), nhưng một số máy tôi sử dụng cấu hình Emacs của tôi không có phông chữ phù hợp được cài đặt sẵn (lý tưởng là tôi cũng muốn sử dụng lại kỹ thuật này trong chế độ mà tôi đang viết, vì vậy tôi không thể mong đợi người dùng có thiết lập phông chữ phù hợp).

Tôi đã thử thêm một thuộc tính :imagehiển thị vào bật lửa mô hình của chế độ phụ đồ chơi, nhưng không có gì xuất hiện trong mô hình:

(define-minor-mode my/test-mode
  "Test mode."
  :lighter (propertize " 🐓" 'display '(image :type imagemagick
                                             :file "/home/clement/.emacs.d/rooster.png")))

Gà trống TWEmoji (https://raw.githubusercontent.com/twitter/twemoji/gh-pages/72x72/1f413.png)


Có cách nào để đưa phông chữ vào cấu hình của bạn không?
PythonNut

2
Vâng, hoàn toàn có thể làm điều đó. Xem chế độ nyan. Có thể là hình ảnh quá lớn để được hiển thị đúng?
wasamasa

@wasamasa, điểm tuyệt vời! Bạn có biết làm thế nào nyan-mode không?
Clément

Làm cách nào để thay thế chuỗi chế độ chính trong dòng chế độ bằng biểu tượng này?
stardiviner

Câu trả lời:


11

Dòng chế độ được hiển thị từ một danh sách các phân đoạn, mỗi phân đoạn đi kèm với các quy tắc đặc biệt của riêng chúng. Xem dữ liệu Line Mode để biết chi tiết. Phần biểu tượng chứa một gợi ý quan trọng để làm cho mã của bạn hoạt động:

Trừ khi SYMBOL được đánh dấu là rủi ro rủi ro (tức là nó có thuộc tính không phải là "biến rủi ro-cục bộ"), tất cả các thuộc tính văn bản được chỉ định trong giá trị của SYMBOL đều bị bỏ qua. Điều này bao gồm các thuộc tính văn bản của các chuỗi trong giá trị của SYMBOL, cũng như tất cả các biểu mẫu ': eval' và ': orthtize' trong đó. (Lý do cho điều này là bảo mật: các biến không rủi ro có thể được đặt tự động từ các biến tệp mà không nhắc người dùng.)

Tôi nghi ngờ chế độ nyan đang thực hiện nó theo cách không lý tưởng , vì vậy đây là ví dụ tối thiểu của tôi:

(defvar my-nyan-mode-lighter
  (list " " (propertize ":3" 'display
                        `(image :type imagemagick
                                :file ,(expand-file-name "~/nyan.png")))))
(put 'my-nyan-mode-lighter 'risky-local-variable t)

(define-minor-mode my-nyan-mode
  "Nyan mode"
  :lighter my-nyan-mode-lighter)

(my-nyan-mode)

Lý do tại sao tôi sử dụng một danh sách không gian và hình ảnh là bởi vì đó là quy ước để bắt đầu một cái bật lửa với một không gian để tách nó ra khỏi những cái trước đó.


Trên thực tế, bạn đã thử điều này trong emacs -Q? Nó hoạt động rất tốt với chế độ dòng thông minh được kích hoạt, nhưng tôi không thể làm cho nó hoạt động khi tôi bắt đầu từ một Emacs trần.
Clément

Huh, bạn nói đúng. Tôi sẽ kiểm tra những gì còn thiếu.
wasamasa

OK, tôi đã tìm ra nó. Rõ ràng gói đó chỉ sử dụng các chuỗi bên trong một chuỗi định dạng trong khi giao dịch thực sự đi qua các phân đoạn dòng chế độ riêng lẻ và chỉ nhận ra các chuỗi được điều chỉnh hợp lý từ đầu đến cuối, vì vậy tôi đã đưa ra danh sách hai chuỗi có dấu phân cách.
wasamasa

Brillian, cảm ơn rất nhiều! Danh sách đánh lừa trình định dạng dòng chế độ thành không áp dụng mức cao nhất :propertizecủa mặc định mode-line-format.
Clément

@wasamasa Wow, thật tuyệt. Bây giờ khi bạn di chuột qua hình ảnh, có một menu chung; Làm thế nào một người sẽ đặt các mục trong đó? Chỉ cần một chuỗi đơn giản như một tin nhắn di chuột cũng sẽ ổn thôi.
yPhil

4

Câu hỏi hay.

Bạn có thể thử sử dụng một cái gì đó như thế này như một cái bật lửa : (concat " " (propertize " " 'display (create-image img-file))), img-filetên của tệp hình ảnh của bạn ở đâu. (Char không gian đầu tiên chỉ là để tách chiếc bật lửa này khỏi cái trước đó.)

Chà, tôi vừa thử, sử dụng mã này, nhưng nó không hoạt động với tôi. Bạn có thể thử nghịch một chút với nó. Cho dù đó là có thể.

(defvar my-lighter-string
        (concat " " (propertize " " 'display (create-image "/path/to/an/image/file.png"))))

(define-minor-mode foo "..." nil my-lighter-string)

Cái bật lửa chỉ hiển thị như một char không gian thông thường - displaytài sản dường như không được tôn trọng.

Nếu bạn không nhận được câu trả lời tốt cho câu hỏi này, hãy xem xét việc gửi yêu cầu tăng cường Emacs, sử dụng M-x report-emacs-bug.

Một điều bạn chắc chắn có thể làm là sử dụng một hoặc hai ký tự Unicode trong chuỗi dòng chế độ. Và bạn có thể sử dụng ký tự, trong thực tế, đồ họa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.