আমি কীভাবে বর্তমান ফাইলের পৈতৃক ডিরেক্টরিটি মডেলিনে প্রদর্শন করতে পারি?


11

আমি বর্তমান বাফার নামের থেকে পৃথক হয়ে বর্তমান ফাইলের পিতামহিত ডিরেক্টরিটির অবস্থান দেখতে সক্ষম হতে চাই।


হতে পারে ইউনিফিক লাইব্রেরি ব্যবহার করা পছন্দসই সমাধান (গিলসের উত্তর দেখুন)
alex_1948511

উত্তর:


12

আপনি ইচ্ছামত মোড লাইন ফর্ম্যাটটি কনফিগার করতে পারেন । আপনি যদি বাফার নাম (যা সাধারণত ফাইলের নাম, কোনও ফাইলটিতে আসা বাফারটির জন্য ফাইলের নাম হিসাবে) একসাথে পিতামহিত ডিরেক্টরিটি দেখাতে চান তবে পরিবর্তন করুন mode-line-buffer-identification; অন্যথায়, এন্ট্রি যুক্ত করুন mode-line-format। "বর্তমান ফাইলটির মূল ডিরেক্টরি" এর জন্য অন্তর্নির্মিত কোনও নির্মাণ নেই , সুতরাং আপনাকে নিজের তৈরি করতে হবে , উদাহরণস্বরূপ :eval। এখানে একটি উদাহরণ যা বাফার নামের পরে ডিরেক্টরি নাম যুক্ত করে এবং ফাইলগুলিতে ভিজিট না করা বাফারগুলিতে কিছুই করেনি (ডায়ার্ড সহ); আপনি এটি ফর্ম্যাটিংয়ের সাথে পরিমার্জন করতে চাইতে পারেন।

(defun mode-line-buffer-file-parent-directory ()
  (when buffer-file-name
    (concat "[" (file-name-nondirectory (directory-file-name (file-name-directory buffer-file-name))) "]")))
(setq-default mode-line-buffer-identification
      (cons (car mode-line-buffer-identification) '((:eval (mode-line-buffer-file-parent-directory)))))

অন্য পদ্ধতিটি হ'ল আপনি যে পাঠ্যটি চান সেটিতে ভেরিয়েবল সেট করে find-file-hooks। আমি কীভাবে আপনি :propertizeনির্মাণের সাথে বৈশিষ্ট্যগুলি সেট করতে পারেন তাও দেখিয়েছি ।

(defvar buffer-file-parent-directory nil
  "Parent directory of the current directory.
This variable is nil if the current buffer isn't visiting a file.")
(make-variable-buffer-local 'buffer-file-parent-directory)
(put 'buffer-file-parent-directory 'permanent-local t)
(defconst mode-line-buffer-file-parent-directory
  '(:propertize (list buffer-file-parent-directory "/") face mode-line-buffer-id))
(defun set-buffer-file-parent-directory ()
  (when buffer-file-name
    (setq buffer-file-parent-directory
          (file-name-as-directory (file-name-nondirectory (directory-file-name (file-name-directory buffer-file-name)))))))
(add-hook 'find-file-hook 'set-buffer-file-parent-directory)
(let ((list mode-line-format))
  (while (not (eq (car list) 'mode-line-buffer-identification))
    (setq list (cdr list)))
  (setcdr list (cons (car list) (cdr list)))
  (setcar list 'mode-line-buffer-file-parent-directory))

আপনি যদি সত্যিই যা চেয়েছিলেন তা যদি ডিরেক্টরি নামের একই সাথে থাকতে পারে তবে আপনার যদি একই ডিরেক্টরিতে বিভিন্ন ডিরেক্টরিতে একই নামের একাধিক ফাইল থাকে, তবে ইম্যাকস এটি বিল্ট ইন করে, অনন্য লাইব্রেরি সহ । যখন একই নামের একাধিক বাফার হবে, এই লাইব্রেরি মত দেখুন বাফার নাম ঘটায় file.ext<foo>এবং file.ext<bar>পরিবর্তে file.extএবং file.ext<2>। আপনি কাস্টমাইজ করে ফরম্যাটটি সূক্ষ্ম-টিউন করতে পারেন uniquify-buffer-name-style

(require 'uniquify)

9

আমি ধরে নিলাম আপনার অর্থ হ'ল আপনি বাফারের নামের পরিবর্তে ডিরেক্টরিটি দেখতে চান ।

(setq-default mode-line-buffer-identification
              '(:eval default-directory))

অথবা আপনি যদি নিজের বাড়ির ডিরেক্টরিটি সংক্ষিপ্ত করতে চান ~/(মূল থেকে কোনও পরম ফাইলের পরিবর্তে), তবে:

(setq-default mode-line-buffer-identification
              '(:eval (abbreviate-file-name default-directory)))

অথবা আপনি যদি একক ডিরেক্টরি-উপাদানটির নাম হিসাবে কেবল পিতামাতার ডিরেক্টরি নাম চান তবে:

(setq-default mode-line-buffer-identification
              '(:eval (file-name-nondirectory
                        (directory-file-name default-directory))))

বা আপনি যদি বাফার নামটিও রাখতে চান, যেমন @ মালবারবা মনে করেন, তবে:

(setq-default mode-line-buffer-identification
              (let ((orig  (car mode-line-buffer-identification)))
                `(:eval (cons (concat ,orig (abbreviate-file-name default-directory))
                              (cdr mode-line-buffer-identification)))))

মুল বক্তব্যটি হ'ল আপনাকে কেবলমাত্র default-directory(কোনও পরম নাম থেকে সরলীকৃত, যদি আপনি চান) এর মানটি ব্যবহার করতে হবে mode-line-buffer-identification। আপনি সেই পরিবর্তনশীলটিকে কেবল ডিরেক্টরি নামেরতে সেট করতে পারেন বা আপনি এটি এমন কোনও মানতে সেট করতে পারেন যা বাফারের নামকেও রাখে।

আপনি যা চান তা যদি default-directoryআপনি চান তবে এটি মোড লাইনটি অন্তর্ভুক্ত করার জন্য কনফিগার করা সহজ , তবে আপনি এটি উপস্থিত হতে চান। এর জন্য একাধিক গ্রন্থাগার লোড করার দরকার নেই (যা এটি smart-mode-lineকরে)।


1
তাঁর কথা বলা সত্ত্বেও, আমি মনে করি তার অর্থ "পরিবর্তে" না "ছাড়াও ছিল"। অবশ্যই, আমি ভুল হতে পারে।
মালাবারবা

1
@ মালবারবা: হতে পারে। যদি তা হয় তবে পার্থক্যটি তুচ্ছ - যুক্ত হয়।
ড্র হয়েছে

7

আপনি স্মার্ট মোড-লাইন ব্যবহার ইনস্টল করুন এটি মোড-লাইনে ফাইল পাথ প্রদর্শন করার জন্য কনফিগার করা হয়েছে, যখনই এটি প্রাসঙ্গিক।

অন্ধকার থিম

কেবল এটি ইনস্টল করুন এবং তারপরে এটি চালু করুন (sml/setup)

সেই প্রদর্শনটি আরও সংক্ষিপ্ত করে তুলতে এর অনেকগুলি বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ, "E / .emacs.d /" ": ED:" দিয়ে প্রতিস্থাপিত হয় (এবং আপনি আরও প্রতিস্থাপনগুলি কনফিগার করতে পারেন)।

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