2013-04-19 10 views
6

मुझे बदसूरत पिक्सेल तीरों को प्रतिस्थापित करना अच्छा लगेगा, जो कि सरल, स्वादपूर्ण पाठ (शायद एक अच्छा यूनिकोड चरित्र, \u2026 इलिप्सिस की तरह) के साथ छिड़काव या लिपटे लाइनों को इंगित करता है। क्या यह संभव है?क्या Emacs में टेक्स्ट के साथ Fringe बिटमैप्स को प्रतिस्थापित करना संभव है?

+0

आप 'fringe.el'' देखना चाहते हैं, जहां फ्रिंज बिटमैप्स स्थापित किए गए हैं। –

उत्तर

2

नहीं, ऐसा नहीं है। Fringe "बिटमैप्स" वास्तव में बिटमैप्स हैं, जो 0/1 बिट्स के वैक्टर हैं, जो फ्रिंज पर ओवरलेड हैं। Fringe पर मनमानी यूनिकोड वर्ण सीधे प्रस्तुत करने का कोई तरीका नहीं है।

आप क्या कर सकते हैं, एक यूनिकोड चरित्र को 0/1 बिटमैप में प्रस्तुत करना है। कोई भी सभ्य छवि संपादक (उदा। गिंप, फ़ोटोशॉप, पिक्सेलमेटर, पेंट.net, आदि) ऐसा कर सकते हैं। फिर इस बिटमैप को एक फ्रिंज बिटमैप वेक्टर में कनवर्ट करें। फ्रिंज बिटमैप्स का प्रारूप Customizing Fringe Bitmaps में वर्णित है।

अंततः आप left-arrow, right-arrow (छोटा कर दिया लाइनों के लिए), left-curly-arrow, और right-curly-arrow बिटमैप्स, समारोह define-fringe-bitmap का उपयोग कर (जारी लाइनों के लिए) को बदलने के लिए इन बिटमैप वैक्टर का उपयोग कर सकते हैं।

हालांकि, मैं कहूंगा कि यह मूल्यवान होने की तुलना में अधिक परेशानी है। फ्रिंज 8 पिक्सेल चौड़ा है, इसलिए आपको अपने सुंदर यूनिकोड चरित्र को 8x8 बिटमैप में निचोड़ना होगा। इसका मतलब है कि कोई उप-पिक्सेल प्रतिपादन नहीं, कोई अलियासिंग नहीं, कोई बाइटकोड प्रतिपादन नहीं, स्क्रीन पर वर्णों को अच्छा और फैंसी बनाता है। यह आपके जैसे प्रतिस्थापित तीर के रूप में बदसूरत होगा।

+0

दिलचस्प! ऐसा कहा जाता है कि बहुत परेशानी नहीं दिखती है, विशेष रूप से देखा जाता है कि ओपी ने उल्लेख किया कि वह एक इलिप्सिस का उपयोग करना चाहता है। एक 8x8 बिटमैप में जो 2x2 पिक्सेल डॉट होगा, एक बार पिक्सेल से अलग 3 बार दोहराया जाएगा (जो 8 पिक्सल चौड़ा होगा)। मैं ओपी से सहमत हूं कि डिफ़ॉल्ट तीर भाग्य से अधिक है। क्या आप जानते हैं कि हम बाएं तीर बिटमैप को संशोधित कर सकते हैं या अपना खुद का बिटमैप जोड़ सकते हैं? – TacticalCoder

+0

@ टैक्टिकलकोडर आप 'डिफाईन-फ्रिंग-बिटमैप' जैसे सरल कॉल के साथ फ्रिंज बिटमैप्स को फिर से परिभाषित कर सकते हैं, जैसे [मैंने फ्लाईचेक में किया था] (https://github.com/lunaryorn/flycheck/blob/09a814a4a153e6be0571b5c270d0b46d7fe866e9/flycheck.el#L1821)। और मेरा विश्वास करो, फ्रिंज बिटमैप्स * एक परेशानी है। वहाँ किया गया था कि। और यहां कोई लाभ नहीं है। आप 8x8 काले/सफेद बिटमैप पर महान कला नहीं कर सकते हैं, और एक 2x2 अंडाकार डिफ़ॉल्ट तीरों की तुलना में कोई अच्छा नहीं होगा। ये तीर बदसूरत हैं क्योंकि ये बिटमैप्स इतने सीमित हैं। – lunaryorn

+0

मैं फ्लाईचेक में आपने जो किया है उस पर एक नज़र डालेंगे।मैंने 8x8 पिक्सल में "पिक्सेल आर्ट" देखा है जो बहुत बुरा नहीं लग रहा है इसलिए मैं इसे आज़मा दूंगा;) – TacticalCoder

0

चंद्रमा द्वारा उत्तर सही है, लेकिन शायद यह नौसिखिया Emacs उपयोगकर्ताओं की पहुंच से परे है - उदाहरण के लिए, मेरे जैसे प्रोग्रामर शौकिया।

समारोह fringe-helper-convert अपने पुस्तकालय फ्रिंज सहायक में Nikolaj शूमाकर द्वारा लिखित - https://github.com/nschum/fringe-helper.el - यह एक सदिश कि द्वारा किया जाता है बनाने के लिए अपने आप की तरह Emacs का शौक रखने वालों के लिए आसान बना देता है समारोह define-fringe-bitmap (जो सी स्रोत में परिभाषित किया गया है Emacs कोड)। मैंने एक पायलक्रो चुना है, लेकिन उपयोगकर्ता फिट होने वाली कोई भी छवि बनाने के लिए स्वतंत्र है - उदाहरण के लिए, पूंजी पत्र X और . की अवधि का उपयोग करके, उपयोगकर्ता एक अक्षर का आकार बना सकता है।

;; AUTHOR: Nikolaj Schumacher -- https://github.com/nschum/fringe-helper.el 
(defun fringe-helper-convert (&rest strings) 
"Convert STRINGS into a vector usable for `define-fringe-bitmap'. 
Each string in STRINGS represents a line of the fringe bitmap. 
Periods (.) are background-colored pixel; Xs are foreground-colored. The 
fringe bitmap always is aligned to the right. If the fringe has half 
width, only the left 4 pixels of an 8 pixel bitmap will be shown. 
For example, the following code defines a diagonal line. 
\(fringe-helper-convert 
\"XX......\" 
\"..XX....\" 
\"....XX..\" 
\"......XX\"\)" 
    (unless (cdr strings) 
    ;; only one string, probably with newlines 
    (setq strings (split-string (car strings) "\n"))) 
    (apply 'vector 
    (mapcar 
     (lambda (str) 
     (let ((num 0)) 
      (dolist (c (string-to-list str)) 
      (setq num (+ (* num 2) (if (eq c ?.) 0 1)))) 
      num)) 
     strings))) 

निम्नलिखित उदाहरण मानता है एक 20 के frame-char-height पिक्सल - ताकि बिटमैप छवि बफर में पाठ के रूप में एक ही ऊंचाई है। लेट-बाउंड स्निपेट लाइन के अंत में दाएं किनारे पर एक पायलक्रो आकार बनाता है (जहां भी स्निपेट का मूल्यांकन किया जाता है)। उदाहरण मानता है कि सही सीमा कम से कम चौड़ाई की चौड़ाई है - उदाहरण के लिए, (add-to-list 'default-frame-alist '(right-fringe . 11)) स्ट्रिंग में परिवर्तित यूनिकोड प्रतीक - (char-to-string ?\uE000) शायद " " के साथ प्रतिस्थापित किया जा सकता है।

(define-fringe-bitmap 'pilcrow (fringe-helper-convert 
    "......." 
    "......." 
    "......." 
    "......." 
    "......." 
    ".XXXXXX" 
    "XXXX.X." 
    "XXXX.X." 
    "XXXX.X." 
    ".XXX.X." 
    "...X.X." 
    "...X.X." 
    "...X.X." 
    "...X.X." 
    "...X.X." 
    "...X.X." 
    "......." 
    "......." 
    "......." 
    ".......")) 

(let ((peol (point-at-eol))) 
    (overlay-put (make-overlay peol peol) 'after-string 
    (propertize (char-to-string ?\uE000) 'display 
     '(right-fringe pilcrow font-lock-keyword-face)))) 
संबंधित मुद्दे

 संबंधित मुद्दे