मॉडल में कुछ वस्तुओं को दाएं कैसे संरेखित करें?


9

निम्नलिखित मॉडलइन विन्यास को देखते हुए:

(setq-default mode-line-format
   (list
    ;; Current buffer name
    "%b "
    ;; Major mode
    "[%m] "
    ;; Modified status
    "[%*] "
    ;; Cursor position
    "Line: %l/%i Column: %c"))

मैं अंतिम आइटम को सही-संरेखित करना चाहूंगा।


1
यहां एक संबंधित सूत्र का लिंक दिया गया है: stackoverflow.com/q/16775855/2112489
16

1
चूँकि आपने एक विशिष्ट के लिए कहा mode-line-formatथा, यह एक उचित उत्तर नहीं है, लेकिन डिफ़ॉल्ट रूप से smart-mode-lineराइट-एलाइन करता mode-line-misc-infoहै, और यह मामूली-मोड की सूची को सेटिंग पर राइट-एलाइन कर सकता sml/mode-widthहै 'right
मालाबार

जवाबों:


11

टिप्पणियों में उत्तर की तरह, आप अपने आप को अच्छी तरह से लिखी गई स्ट्रिंग वापस करने के लिए कोड लिखकर ऐसा कर सकते हैं।

यहां एक सरल तरीका है जो आपके विनिर्देशों पर लागू केवल बाएँ और दाएँ गठबंधन पाठ का समर्थन करता है।

;; write a function to do the spacing
(defun simple-mode-line-render (left right)
  "Return a string of `window-width' length containing LEFT, and RIGHT
 aligned respectively."
  (let* ((available-width (- (window-width) (length left) 2)))
    (format (format " %%s %%%ds " available-width) left right)))


;; use the function in conjunction with :eval and format-mode-line in your mode-line-format
(setq mode-line-format
      '((:eval (simple-mode-line-render
                ;; left
                (format-mode-line "%b [%m] [%*]")
                ;; right
                (format-mode-line "Line: %l/%i Column: %c")))))

यह इस तरह दिखता है: यहाँ छवि विवरण दर्ज करें

यह भी ध्यान दें, मैंने आपके मोड-लाइन-फॉर्मेट आर्ग्स को आपके द्वारा निर्दिष्ट के रूप में उपयोग किया था, लेकिन मेरा मानना ​​है कि आपके द्वारा% i का गलत तरीके से उपयोग किया जा रहा है, जो बाइट के बाइट के आकार को प्रिंट करता है, न कि लाइनों की संख्या को। आप (line-number-at-pos (point-max))अपने बफर में लाइनों की संख्या प्राप्त करने के लिए कुछ का उपयोग कर सकते हैं ।


एक अतिरिक्त - आपको window-total-widthलिनुम की गणना करने के लिए भी उपयोग करने की आवश्यकता है और अतिरिक्त पैडिंग को फ्रिंज करता है।
22

इस उत्तर में एक बग है जहां लौटे मोड-लाइन का मूल्यांकन फिर से मोड-लाइन के रूप में किया जाएगा। मतलब %अक्षर दो बार स्वरूपित करने का प्रयास करेंगे। मेरे जवाब में इसके लिए जिम्मेदार हैं, emacs.stackexchange.com/a/37270/2418 - भी उपयोग करें window-total-width(धन्यवाद!)
ideasman42

इस उत्तर में बग को हल किया: emacs.stackexchange.com/a/37270/2418
ideasman42

2

@ Jordon-biondo के उत्तर पर विस्तार करने और एक बग दिखाने का समाधान करने के लिए %

यह उदाहरण दिखाता है कि मोड मोड लाइन चर का उपयोग संरेखण के साथ कैसे किया जा सकता है - जो मुझे पता लगाने में थोड़ी देर लगी।

(defun simple-mode-line-render (left right)
  "Return a string of `window-width' length containing LEFT, and RIGHT aligned respectively."
  (let* ((available-width (- (window-total-width) (+ (length (format-mode-line left)) (length (format-mode-line right))))))
    (append left (list (format (format "%%%ds" available-width) "")) right)
    )
  )

(setq-default
  mode-line-format
  '
  (
    (:eval
      (simple-mode-line-render
        ;; left
        (quote ("%e " mode-line-buffer-identification " %l : %c" evil-mode-line-tag "[%*]"))
        ;; right
        (quote ("%p " mode-line-frame-identification mode-line-modes mode-line-misc-info))
        )
      )
    )
  )
)

उदाहरण आउटपुट:

init.el 1 : 0 <N> [-] Top -F1 (Emacs-Lisp WK ivy drag AC GitGutter)


0

यह आउट-ऑफ-द-बॉक्स समर्थित नहीं है, लेकिन smart-mode-lineपैकेज इसका समर्थन करता है। आप या तो उस पैकेज का उपयोग कर सकते हैं, या यदि आप जो चाहते हैं उससे अधिक करता है, तो केवल उन बिट्स को निकालें जो आपके द्वारा मांगी जा रही सुविधा को लागू करते हैं।


चूंकि op का पालन नहीं हुआ, इसलिए मैंने @ Malabarba की टिप्पणी को उत्तर में बदल दिया। इस तरह प्रश्न "अनुत्तरित" नहीं है और यह पैकेज बहुत अच्छी तरह से हो सकता है कि अन्य उपयोगकर्ताओं के पास एक ही प्रश्न का उपयोग करना चाहते हैं।
तारसियस

यही कारण है कि मैं क्या कर रही है, प्रासंगिक कार्यक्षमता को निकालने smart-mode-lineऔर इसे अपने dotemacs में जोड़ने के लिए। मुझे यह पता लगाने की आवश्यकता है कि मुझे सही जगह कितनी चाहिए, लेकिन यह कुछ भी नहीं से बेहतर है। जब तक कोई व्यक्ति मैनुअल चार काउंटिंग से छुटकारा पाने का कोई रास्ता नहीं बताता, तब तक मैं एक जवाब स्वीकार नहीं करूंगा।
मिकितो

0

हालांकि एक वैकल्पिक पद्धति को जोड़ना 'सही' बाएँ / दाएँ संरेखण करना संभव है क्योंकि पूरी तरह से संरेखण के लिए बाएँ और दाएँ का पूर्ण मूल्यांकन करना थोड़ा भारी है, जब एक सरल विकल्प होता है।

यदि आप जानते हैं कि आपको दाईं ओर केवल एक निश्चित स्थान की आवश्यकता है, तो आप सभी लेकिन N वर्णों को भर सकते हैं , यह तब तक काम करता है जब तक कि सही आकार निश्चित लंबाई है।

स्ट्रिंग %12sको आकार नहीं देने के लिए स्ट्रिंग स्वरूपण और समान का उपयोग किया जा सकता है।

(defun mode-line-fill (face reserve)
  "Return empty space using FACE and leaving RESERVE space on the right."
  (when
    (and window-system (eq 'right (get-scroll-bar-mode)))
    (setq reserve (- reserve 3)))
  (propertize " "
    'display
    `((space :align-to (- (+ right right-fringe right-margin) ,reserve)))
    'face face
    )
  )

(setq-default
  mode-line-format
  (list
    ;; left align
    "%e %b [%*]"
    ;; right align
    (mode-line-fill 'mode-line 18)
    "%6l, %4c, %8p"
    )
  )
)

उदाहरण के लिए:

CMakeLists.txt [-] 1590, 0, 94%

ध्यान दें कि यह केवल अच्छी तरह से काम करता है यदि आप दाहिने हाथ की ओर कुछ वस्तुओं को प्रदर्शित करना चाहते हैं, जैसे कि इस उदाहरण के साथ - लाइन / कॉलम / प्रतिशत। उदाहरण के लिए सभी छोटे मोड दिखाने से अच्छा काम नहीं करेगा।

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