মডেলিনে কিছু আইটেম কীভাবে রাইট করবেন?


9

নিম্নলিখিত মডেলিন কনফিগারেশন দেওয়া:

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

আমি সর্বশেষ আইটেমটি ডান-প্রান্তরে প্রদর্শিত হতে চাই like


1
এখানে একটি সম্পর্কিত থ্রেড একটি লিঙ্ক stackoverflow.com/q/16775855/2112489
lawlist

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প্যাডিংস লিনুম এবং সজ্জিতগুলিও গণনা করতে হবে।
সান্দ্রিক

এই উত্তরের একটি বাগ রয়েছে যেখানে ফিরে মোড-লাইনটি আবার একটি মোড-লাইন হিসাবে মূল্যায়ন করা হবে। অর্থের %অক্ষরগুলি দু'বার বিন্যাস করার চেষ্টা করবে। আমার উত্তরে এটির জন্য অ্যাকাউন্টস , emacs.stackexchange.com/a/37270/2418 - এছাড়াও ব্যবহার করুন window-total-width(ধন্যবাদ!)
ধারণাগুলি 42

এই উত্তরে বাগটি সমাধান করেছেন: emacs.stackexchange.com/a/37270/2418
ধারণাগুলি 42

2

@ জর্ডন-বিওনডোর উত্তরে প্রসারিত করতে এবং একটি বাগ প্রদর্শনের সমাধান করতে %

এই উদাহরণটি দেখায় যে মোড মোড লাইনের ভেরিয়েবলগুলি প্রান্তিককরণের সাথে কীভাবে ব্যবহার করা যেতে পারে - যা খুঁজে পেতে আমাকে কিছুটা সময় নিয়েছিল।

(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প্যাকেজটি এটি সমর্থন করে। আপনি হয় সেই প্যাকেজটি ব্যবহার করতে পারেন, বা এটি যা আপনি চান তার চেয়ে বেশি যদি ব্যবহার করে তবে আপনি যে বৈশিষ্ট্যটি জিজ্ঞাসা করছেন তা বাস্তবায়ন করে এমন বিটগুলি বের করুন।


অপশনটি অনুসরণ না করায় আমি @ মালাবারবার মন্তব্যটিকে উত্তরে পরিণত করেছি। এইভাবে প্রশ্নটি "উত্তরহীন" নয় এবং এই প্যাকেজটি একই প্রশ্নযুক্ত অন্যান্য ব্যবহারকারীরা কীভাবে ব্যবহার করতে চান তা খুব ভাল হতে পারে।
তারসিউস

এটাই আমি শেষ করেছিলাম, প্রাসঙ্গিক কার্যকারিতা থেকে smart-mode-lineএটিকে বের করে আমার ডটম্যাকস এ যুক্ত করেছি। ডানদিকে আমি কতটা স্থান চাই তা নির্ধারণের জন্য এটির প্রয়োজন but ম্যানুয়াল চর গণনা থেকে মুক্তি পাওয়ার উপায় যদি কেউ পোস্ট না করে তবে আমি কোনও উত্তর গ্রহণ করব না।
এমকেইটো

0

যদিও একটি বিকল্প পদ্ধতি যুক্ত করে 'সঠিক' বাম / ডান প্রান্তিককরণ করা সম্ভব হয়েছে কারণ একটি সহজ বিকল্প আছে যখন কেবল সঠিক প্রান্তিককরণের জন্য বাম এবং ডানাকে পুরোপুরি মূল্যায়ন করা কিছুটা ভারী।

আপনি যদি জানেন যে আপনার কেবলমাত্র ডানদিকে একটি নির্দিষ্ট পরিমাণের জায়গা প্রয়োজন, আপনি এন অক্ষর ব্যতীত সমস্তগুলি পূরণ করতে পারেন , এটি ডান আকারটি একটি নির্দিষ্ট দৈর্ঘ্যের যতক্ষণ কাজ করবে works

স্ট্রিং ফর্ম্যাটিং %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%

নোট করুন যে আপনি ডানদিকে কয়েকটি আইটেম প্রদর্শন করতে চাইলে এটি কেবল ঠিক কাজ করে - উদাহরণস্বরূপ - লাইন / কলাম / শতাংশ। উদাহরণস্বরূপ সমস্ত ছোট ছোট মোড দেখানো ভাল কাজ করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.