Modelin çakmağımda bir görüntü kullanabilir miyim?


12

Benim modelim darmadağın. Mod adları yerine resimleri göstermesini sağlayabilir miyim?

Unicode Emoji'yi (Python için 🐍 veya Coq için 🐓 gibi) kullanabilirim, ancak Emacs yapılandırmamı kullandığım bazı makinelerde önceden yüklenmiş doğru yazı tipleri yok (ideal olarak, bu tekniği bir yazdığım için kullanıcıların doğru yazı tipi ayarlarına sahip olmasını bekleyemiyorum).

:imageBir oyuncak küçük modunun modeline çakmak için bir display özelliği eklemeye çalıştım , ancak modelinde hiçbir şey görünmedi:

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

TWEmoji horozu (https://raw.githubusercontent.com/twitter/twemoji/gh-pages/72x72/1f413.png)


Yazı tiplerini yapılandırmanıza getirmenin bir yolu var mı?
PythonNut

2
Evet, bunu yapmak tamamen mümkündür. Bkz. Nyan modu. Görüntünün düzgün görüntülenemeyeceği kadar büyük olabilir mi?
wasamasa

@wasamasa, Harika bir nokta! Nyan modunun nasıl olduğunu biliyor musunuz?
Clément

Mod satırındaki ana mod dizesini bu simgeyle nasıl değiştirebilirim?
stardiviner

Yanıtlar:


11

Mod satırı, her biri kendi özel kurallarıyla birlikte gelen bir parça listesinden oluşturulur. Ayrıntılar için bkz. Mod Satırı Verileri . Sembol bölümü, kodunuzun çalışması için önemli bir ipucu içerir:

SYMBOL “riskli” olarak işaretlenmediği sürece (yani, 'nil' 'riskli-yerel-değişken' özelliğe sahip değilse), SYMBOL değerinde belirtilen tüm metin özellikleri yok sayılır. Bu, SYMBOL değerindeki dizelerin metin özelliklerini ve içindeki tüm ': eval' ve ': completetize' formlarını içerir. (Bunun nedeni güvenliktir: riskli olmayan değişkenler, kullanıcıya sorulmadan dosya değişkenlerinden otomatik olarak ayarlanabilir.)

Nyan-mode'un ideal yöntemden daha az bir şekilde yaptığından şüpheleniyorum , işte asgari örneğim:

(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)

Bir boşluk ve görüntü listesi kullanmamın nedeni, bir çakmağı öncekilerden ayırmak için bir boşlukla başlatmaktır.


Aslında bunu denedin emacs -Qmi? Akıllı mod hattı etkinken harika çalışıyor, ancak çıplak bir Emacs'tan başladığımda çalışamıyorum.
Clément

Ha, haklısın. Başka nelerin eksik olduğunu kontrol edeceğim.
wasamasa

Tamam, anladım. Görünüşe göre bu paket sadece bir biçim dizesi içinde dizeleri kullanır, oysa gerçek anlaşma mod çizgisi segmentleri boyunca tek tek yürür ve sadece baştan sona doğru dizeleri tanır, bu yüzden bir ayırıcıya sahip iki dizenin bir listesine gittim.
wasamasa

Brillian, çok teşekkürler! Liste, mod satırı biçimlendiricisini :propertizevarsayılanın en üst düzeyini uygulamaz mode-line-format.
Clément

@wasamasa Wow, bu güzel. Şimdi fareyi görüntünün üzerine getirdiğinizde genel bir menü var; içine nasıl giriş yapılır? Fare vurgulu mesajı olarak basit bir dize de iyi olur.
yPhil

4

İyi soru.

Sen çakmak olarak böyle bir şey kullanmayı deneyebilirsiniz: (concat " " (propertize " " 'display (create-image img-file)))nerede img-fileresim dosyasının adıdır. (İlk boşluk karakteri bu çakmağı öncekinden ayırmaktır.)

Eh, ben sadece bu kodu kullanarak, çalıştı, ama did değil benim için çalış. Bununla biraz daha uğraşmayı deneyebilirsiniz. Mümkün olup olmadığını bilmiyorum.

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

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

Çakmak sadece sıradan bir boşluk karakteri olarak gösterilir - displayözelliğe saygı duyulmaz.

Bu soruya iyi bir cevap alamıyorsanız, kullanarak bir Emacs geliştirme isteği göndermeyi düşünün M-x report-emacs-bug.

Kesinlikle yapabileceğiniz bir şey, mod satırı dizesinde bir veya iki Unicode karakter kullanmaktır. Ve aslında grafik olan karakterleri kullanabilirsiniz.

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.