3

Emacs の現在のウィンドウ幅に基づいて何かを行う関数を作成しようとしています。問題は、列の幅について Emacs が混乱していることです。私のカスタムセットではなく、元のフォントサイズに基づいて計算しているようです。説明するスクリーンショットを次に示します。

問題を示すスクリーンショット

カスタムフォント設定を削除すると正しく動作するように見えるので、新しいフォントに切り替えた後、列の大きさを更新していないに違いないと思います。

私のビジュアル設定の関連部分は次のとおりです。

(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)))

ドキュメントによると、 window-body-width 関数は編集領域のみを返す必要があるため、列数と合計フレームサイズの不一致は排除する必要があります...

フォントを変更した後、列幅の理解を Emacs に更新させるにはどうすればよいですか?

4

1 に答える 1

1

示されている「行と列」の位置は、視覚的な表示サイズに基づくのではなく、文字数に基づいています (一部の文字は 2 列以上として数えることができ、TAB が一般的な例です)。異なる行は異なるサイズのフォントを使用できるため、異なる行は異なる「列」で右マージンに達します。対照的に、ウィンドウのサイズは「標準サイズの文字セルの数」でカウントされます。その標準文字セルのサイズは、そのフレームに使用されるデフォルトのフェイス (つまり、default-frame-alist で指定したフォント) に依存します。 .

あなたのスクリーンショットでは、不一致を明確に説明するものは何もありません。通常の等幅フォントを使用しているようで、すべてのテキストが同じフォントを使用しているようtext-scale-increaseで、のようなものを使用していないようです。あなたが見ているものを見ている理由を正確に確認してください。

于 2012-10-11T19:07:41.493 に答える