क्या मैं अपने मॉडलाइन लाइटर में एक छवि का उपयोग कर सकता हूं?


12

मेरा मॉडलाइन क्लॉटेड है। क्या मैं इसे मोड नामों के बजाय चित्र प्रदर्शित कर सकता हूं?

मैं यूनिकोड इमोजी (जैसे कि पायथन के लिए un या कॉक के लिए un) का उपयोग कर सकता हूं, लेकिन कुछ मशीनें जिन पर मैं अपने इमैक कॉन्फिग का उपयोग करता हूं, उनके पास पहले से स्थापित सही फोंट नहीं हैं (आदर्श रूप से, मैं इस तकनीक का पुन: उपयोग करना चाहता हूं। वह मोड जो मैं लिख रहा हूं, इसलिए मैं उपयोगकर्ताओं से सही फ़ॉन्ट सेटअप की उम्मीद नहीं कर सकता)।

मैंने :imageएक खिलौना माइनर-मोड के मॉडलाइन लाइटर में एक प्रदर्शन संपत्ति जोड़ने की कोशिश की , लेकिन मॉडल में कुछ भी दिखाई नहीं दिया:

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

TWEmoji मुर्गा (https://raw.githubusercontent.com/twitter/twemoji/gh-pages/72x72/1f413.png)


क्या फोंट को अपने विन्यास में लाने का कोई तरीका है?
PythonNut

2
हां, ऐसा करना पूरी तरह से संभव है। नयन-विधा देखें। क्या यह हो सकता है कि छवि को ठीक से प्रदर्शित करने के लिए छवि बहुत बड़ी हो?
वामासा

@wasamasa, ग्रेट पॉइंट! क्या आप जानते हैं कि नयन-विधा कैसे करती है?
क्लेमेंट

इस आइकन के साथ मोड-लाइन में प्रमुख-मोड स्ट्रिंग को कैसे बदलें?
stardiviner

जवाबों:


11

मोड लाइन को खंडों की सूची से प्रदान किया जाता है, जिनमें से प्रत्येक अपने स्वयं के विशेष नियमों के साथ आते हैं। देखें मोड लाइन डाटा जानकारी के लिए। प्रतीक अनुभाग में आपके कोड को बनाने के लिए एक महत्वपूर्ण संकेत होता है:

जब तक SYMBOL को "जोखिम भरा" के रूप में चिह्नित किया जाता है (यानी, इसमें गैर-'nil '' जोखिम भरा-स्थानीय-परिवर्तनीय 'संपत्ति है), SYMBOL के मूल्य में निर्दिष्ट सभी पाठ गुणों को अनदेखा किया जाता है। इसमें SYMBOL के मान के साथ-साथ सभी ': eval' और ': strtize' फॉर्म में टेक्स्ट के गुण शामिल हैं। (इसका कारण सुरक्षा है: उपयोगकर्ता को संकेत दिए बिना गैर-चर चर फ़ाइल चर से स्वचालित रूप से सेट किया जा सकता है)।

मुझे संदेह है कि न्यान-मोड इसे आदर्श तरीके से कम कर रहा है , इसलिए यहां मेरा न्यूनतम उदाहरण है:

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

मैं अंतरिक्ष और छवि की एक सूची का उपयोग क्यों कर रहा हूं इसका कारण यह है कि इसे पूर्ववर्ती लोगों से अलग करने के लिए एक स्थान के साथ एक लाइटर शुरू करना है।


वास्तव में, क्या आपने इसमें कोशिश की emacs -Q? यह स्मार्ट-मोड-लाइन सक्षम के साथ बहुत अच्छा काम करता है, लेकिन जब मैं नंगे Emacs से शुरू करता हूं तो मैं इसे काम नहीं कर सकता।
क्लीमेंट

हुह, तुम सही हो। मैं जांच करूंगा कि और क्या गायब है।
वामासा

ठीक है, मैं समझ गया हूँ। जाहिरा तौर पर वह पैकेज सिर्फ एक प्रारूप स्ट्रिंग के अंदर तारों का उपयोग करता है, जबकि असली सौदा व्यक्तिगत रूप से मोड लाइन खंडों के माध्यम से चलता है और केवल उन तारों को पहचानता है जो शुरू से अंत तक उचित हैं, इसलिए मैं एक विभाजक के लिए दो तारों की सूची के लिए गया हूं।
वामासा

ब्रिलियन, बहुत धन्यवाद! सूची :propertizeडिफ़ॉल्ट के शीर्ष-स्तर को लागू नहीं करने के लिए मोड लाइन फ़ॉर्मेटर को ट्रिक करती है mode-line-format
क्लेमेंट

@wasamasa वाह, यह अच्छा है। अब जब आप छवि पर माउस ले जाते हैं, तो एक सामान्य मेनू होता है; इसमें प्रविष्टियां कैसे होगी? माउस होवर संदेश के रूप में बस एक साधारण स्ट्रिंग भी ठीक होगी।
yPhil

4

अच्छा प्रश्न।

आप लाइटर के रूप में कुछ इस तरह का उपयोग करने की कोशिश कर सकते हैं: आपकी छवि फ़ाइल का नाम (concat " " (propertize " " 'display (create-image img-file)))कहां img-fileहै। (पहला स्पेस चार इस लाइटर को पिछले वाले से अलग करने के लिए है।)

ठीक है, मैंने इस कोड का उपयोग करते हुए बस कोशिश की, लेकिन यह मेरे लिए काम नहीं किया । आप इसके साथ कुछ और अधिक करने की कोशिश कर सकते हैं। डननो कि क्या यह संभव है।

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

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

लाइटर सिर्फ एक साधारण अंतरिक्ष चार के रूप में दिखाता है - displayसंपत्ति का सम्मान नहीं लगता है।

यदि आपको इस प्रश्न का अच्छा उत्तर नहीं मिलता है, तो एक Emacs एन्हांसमेंट अनुरोध दाखिल करने पर विचार करें M-x report-emacs-bug

एक चीज जो आप निश्चित रूप से कर सकते हैं वह है मोड-लाइन स्ट्रिंग में एक या दो यूनिकोड वर्णों का उपयोग करना। और आप उन चरों का उपयोग कर सकते हैं जो प्रभाव में हैं, ग्राफिक्स।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.