Saya ingin dapat melihat lokasi direktori induk file saat ini, terlepas dari nama buffer saat ini.
Saya ingin dapat melihat lokasi direktori induk file saat ini, terlepas dari nama buffer saat ini.
Jawaban:
Anda dapat mengonfigurasi format garis mode sesuai keinginan. Jika Anda ingin menampilkan direktori induk bersama dengan nama buffer (yang biasanya merupakan nama file, untuk buffer yang mengunjungi file), ubah mode-line-buffer-identification
; jika tidak, tambahkan entri ke mode-line-format
. Tidak ada konstruksi bawaan untuk "direktori induk dari file saat ini", jadi Anda harus membuatnya sendiri , misalnya dengan :eval
. Berikut adalah contoh yang menambahkan nama direktori setelah nama buffer, dan tidak melakukan apa pun dalam buffer yang tidak mengunjungi file (termasuk Dired); Anda mungkin ingin memperbaikinya dengan format.
(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)))))
Metode lain adalah mengatur variabel yang berisi teks yang Anda inginkan find-file-hooks
. Saya juga menunjukkan bagaimana Anda dapat mengatur properti dengan :propertize
konstruk.
(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))
Jika yang Anda inginkan adalah memiliki nama direktori seandainya Anda memiliki banyak file dengan nama yang sama di direktori yang berbeda, Emacs memiliki built in ini, dengan pustaka uniquify . Ketika akan ada beberapa buffer dengan nama yang sama, pustaka ini menyebabkan nama buffer terlihat seperti file.ext<foo>
dan file.ext<bar>
bukannya file.ext
dan file.ext<2>
. Anda dapat menyempurnakan format dengan menyesuaikan uniquify-buffer-name-style
.
(require 'uniquify)
Saya berasumsi maksud Anda bahwa Anda ingin melihat direktori alih-alih nama buffer.
(setq-default mode-line-buffer-identification
'(:eval default-directory))
Atau jika Anda ingin direktori home Anda disingkat ~/
(alih-alih nama file absolut, dari root), maka:
(setq-default mode-line-buffer-identification
'(:eval (abbreviate-file-name default-directory)))
Atau jika Anda hanya ingin nama direktori induk, sebagai nama komponen-direktori tunggal, maka:
(setq-default mode-line-buffer-identification
'(:eval (file-name-nondirectory
(directory-file-name default-directory))))
Atau jika Anda ingin menyimpan juga nama buffer, seperti anggapan @Malabarba, maka:
(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)))))
Intinya adalah bahwa Anda hanya perlu menggunakan nilai default-directory
(mungkin disederhanakan dari nama absolut, jika Anda mau) di mode-line-buffer-identification
. Anda bisa mengatur variabel itu hanya nama direktori, atau Anda bisa mengaturnya ke nilai yang menyimpan juga nama buffer.
Jika yang Anda tanyakan adalah yang Anda inginkan, mudah untuk mengkonfigurasi garis mode untuk memasukkan default-directory
, namun Anda ingin itu muncul. Tidak perlu memuat banyak pustaka untuk ini (yang smart-mode-line
artinya).
Anda menginstal menggunakan smart-mode-line . Ini dikonfigurasi untuk menampilkan jalur file di mode-line, kapan pun itu relevan.
Cukup instal, lalu hidupkan dengan (sml/setup)
.
Ini juga memiliki banyak fitur untuk membuat tampilan yang lebih ringkas. Misalnya, “~ / .emacs.d /” diganti dengan “: ED:” (dan Anda dapat mengonfigurasi penggantian lebih lanjut).