2014-02-21 61 views
0

我用這作爲我的emacs模式行模式行,但
'(:eval (last-dir default-directory))
是顯示在消息緩衝區
Error during redisplay: (eval (last-dir default-directory)) signaled (void-function last-dir) [594 times]
我怎樣才能得到它正常工作,請嗎?以及如何將文件大小放入模式行?問題與顯示

(setq-default mode-line-format 
(list 
    " " 
    mode-line-buffer-identification 
    " │ " 
    "dir: " 
    '(:eval (last-dir default-directory)) 
    " │ " 
    ;; '%02' to set to 2 chars at least; prevents flickering 
    "%04l" 
    "," 
    "%02c" 
    " │ " 
    '(:eval (format-time-string "%H:%M")) 
    " | " 
    '(:eval (if (buffer-modified-p) "M" "-")) 
    '(:eval (if buffer-read-only "R" "-")) 
    '(:eval (if (window-dedicated-p (selected-window)) "D" "-")) 
    " │ " 
    mode-line-modes 
    )) 

回答

0

確實沒有定義函數last-dir。是否要提取目錄名稱的最後一個組件?如果是的話,你也可以使用這樣的:

(:eval (file-name-nondirectory (directory-file-name default-directory))) 
你可以用`緩衝-size`功能添加文件大小:(:eval (format "%d" (buffer-size)))

要在模式行的緩衝區大小,使用%I作爲描述於Iqbal Ansari's answer

+0

謝謝,它的中途,一旦我在每個(:eval,但緩衝區大小超過四位數字前面放置一個',它們如何可以顯示爲'kb',甚至'MB'請? – boudiccas

1

要顯示緩衝區大小(以KB或MB爲單位),請在模式行格式中添加「%I」。從文檔

%i - 打印緩衝區的大小。

%I - %i,但用k,M,G等縮寫。

因此,要獲得模式符合目錄的名稱和緩衝區大小,你可以做

(setq mode-line-format '((:eval (file-name-nondirectory (directory-file-name default-directory))) ", file is of size %I")) 

我建議您閱讀模式行格式的文檔,請vmode-line-formatRET它解釋了可用於格式化模式行的各種選項。