2012-10-11 29 views
3

我正在嘗試編寫一個基於Emacs當前窗口寬度的功能。問題是,Emacs對列的寬度感到困惑。它似乎是基於它的計算原始字體大小,而不是我自定義設置一個。下面是截圖來說明:如何在計算列寬時讓Emacs知道字體大小已更改?

Screenshoot illustrating the problem

看來,當我刪除我的自定義字體設置才能正常工作,所以我認爲它必須不更新它有多大認爲一列被切換到新的字體後。

這裏是我的視覺配置的相關部分:

(setq default-frame-alist 
    '(
    (font . "-apple-Ubuntu_Mono-medium-normal-normal-*-17-*-*-*-p-0-iso10646-1") 
    (width . 130) 
    (height . 45))) 

(顯然框架是從我的圖片默認大小,但是這是我的字體被設置成這似乎相關)

這裏是我用來確定計算的當前寬度功能:

(defun get-window-size() 
    (interactive) 
    (message "The width is %d." (window-body-width))) 

根據該文檔,窗體寬度函數返回剛纔編輯區域,因此應該消除列號和總幀大小之間的任何差異...

如何讓Emacs在更改字體後更新其對列寬的理解?

+0

似乎給了我相同的結果。好東西要檢查,但。 – BaseCase

回答

1

指示的「行&列」位置是基於字符的數量(某些字符可以計爲2列或更多,TAB是常見示例),而不是基於其視覺顯示大小。不同的線條可以使用不同大小的字體,因此不同的線條將在不同的「列」處到達右邊距。相比之下,窗口大小以「標準大小的char-cell的數量」計算,其中標準char-cell的大小取決於用於該幀的默認面(即,您在默認幀alist中指定的字體) 。

在你的屏幕截圖中,我沒有看到任何明顯解釋這種差異的東西:你似乎在使用正常的等寬字體,所有的文本都使用相同的字體,而且你似乎沒有使用類似text-scale-increase的東西,所以我不確定你爲什麼看到你所看到的。

+0

啊,明白了!我沒有意識到「標準字符單元大小」和「列」可能有所不同,但這導致我調整了字體大小。原來,17pt不是我的字體正式支持的大小,但18pt是。如果我將字體設置爲18pt,那麼計算結果相匹配!感謝您的線索! – BaseCase