すべてのUnicodeグリフに単一のフォントを強制する


8

OS XのGUIでGNU Emacs 24.4.1を使用しています。Emacsがおそらく最も適切なものを選択できるようにするのではなく、単一のフォントだけを使用してすべての文字を強制的に表示したいのです。すべてのグリフを含むフォントはないことを理解していますが、多くの優れたフォントで十分にカバーされるUnicodeの限定サブセットを使用しています。

unicode-fontsパッケージを使用して文字の範囲のフォントを設定することについて多くの話を見てきましたが、すべてのブロックを個別に設定するために私の設定に1000行を追加したくありません。

Emacsが異なるグリフを異なるフォントに自動的にマッピングしないようにするにはどうすればよいですか?

ありがとう。


1
あなたはあなたのフォントの名前が(set-fontset-font t nil MY-FONT)どこにMY-FONTあるか試しましたか?
lunaryorn 14

@lunaryorn提案をありがとう。私は今それを試しました、そして私はまだ異なる文字のために異なるフォントを得ます。フォントをPragmata Proに設定してみたところ、Menloユニコードグリフ(で確認済みdescribe-char)が表示されました。
karl

回答:


6

Emacsのフォントセット定義で遊ぶことが答えになるはずです。

読んだあと

  • フォントセットのドキュメント

    起動フォントセットは、指定したフォント、またはレジストリとエンコーディングが異なるバリアントを、そのフォントでサポートされているすべての文字に対して使用し、他の文字については「fontset-default」にフォールバックします。

    一部の文字が空のボックスまたは16進コードとして画面に表示される場合は、それらの文字に使用されているフォントセットにそれらの文字のフォントがないことを意味します。

  • set-fontset-fontの説明:

    TARGETは短所かもしれません。(FROM。TO)、FROMとTOは文字です。その場合は、FROMとTO(両端を含む)の範囲のすべての文字にFONT-SPECを使用します。

    TARGETはスクリプト名のシンボルです。その場合、スクリプトに属するすべての文字にFONT-SPECを使用します。

    TARGETは文字セットの場合があります。その場合、文字セットのすべての文字にFONT-SPECを使用します。

    TARGETはnilの場合があります。その場合、FONT-SPECが指定されていない文字については、FONT-SPECを使用してください。

  • 文字セットのチェックに関するドキュメント:

    文字セットに関する情報を取得するために使用できるコマンドは2つあります。コマンドMx list-charset-charsは、文字セット名の入力を求め、その文字セットのすべての文字を表示します。コマンドMx describe-character-setは、文字セット名の入力を求め、Emacs内の内部表現を含む、その文字セットに関する情報を表示します。

    バッファー内の文字がどの文字セットに属しているかを調べるには、その前にポイントを置き、Cu Cx =

initファイルでは、1つのフォントを全範囲の文字に設定できるはずです。

 (let ((my-font "DejaVu Sans Mono-14"))
  (set-fontset-font "fontset-startup" '(#x000000 . #x3FFFFF) my-font)
  (set-fontset-font "fontset-default" '(#x000000 . #x3FFFFF) my-font)
  (set-fontset-font "fontset-standard" '(#x000000 . #x3FFFFF) my-font))

しかし、ある範囲の文字のフォントを設定し、それサポートしていない文字の代替フォントとして強制するに nilは、ターゲットとして追加する必要があります。

(let ((my-font "DejaVu Sans Mono-14")
      (font-sets '("fontset-default"
                   "fontset-standard"
                   "fontset-startup")))
  (mapcar
   (lambda (font-set)
     ;; all the characters in that range (which is the full possible range)
     (set-fontset-font font-set '(#x000000 . #x3FFFFF) my-font)

     ;; for all characters without font specification
     ;; in another words it is a setting for lack of fallback font
     ;; if e.g. ℕ called DOUBLE-STRUCK CAPITAL N is not covered by our font
     ;; it will be displayed as placeholder-box,
     ;; because fallback for our font is now... our font :)
     (set-fontset-font font-set nil my-font))
   font-sets))

C-u C-x =or でアンダーポイント(カーソル)を見ることができるようになりましたM-x describe-char

             position: 1430 of 1954 (73%), column: 16
            character: ℕ (displayed as ℕ) (codepoint 8469, #o20425, #x2115)
    preferred charset: unicode (Unicode (ISO10646))
code point in charset: 0x2115
               script: symbol
               syntax: w    which means: word
             category: .:Base, L:Left-to-right (strong)
             to input: type "C-x 8 RET HEX-CODEPOINT" or "C-x 8 RET NAME"
          buffer code: #xE2 #x84 #x95
            file code: #xE2 #x84 #x95 (encoded by coding system utf-8-unix)
              display: no font available

Character code properties: customize what to show
  name: DOUBLE-STRUCK CAPITAL N
  old-name: DOUBLE-STRUCK N
  general-category: Lu (Letter, Uppercase)
  decomposition: (font 78) (font 'N')

重要な部分:表示:使用可能なフォントがありません

それを.Xresourcesファイルで設定できるはずです:

Xリソース 'Emacs.Font'を使用すると、実際のフォント名と同じようにフォントセット名を指定できます。

しかし、そのための適切な構文が何かはわかりません。

その変更の前に、選択したフォントでサポートされていない多くのUnicodeグリフを見ることができました。その変更後—私のEmacsには1つのフォントしか表示されず、フォントでサポートされていないグリフの空のボックスプレースホルダーが表示されます。

それは私のシステムで動作し、誰かがあなたに詳細で技術的で正しい答えを与える前に今のところ十分であるはずです


あなたの説明は理にかなっていますが、実際の提案構成は機能していないようです。OS XでEmacsのCocoaビルドを使用しているため、Xresourcesアプローチを使用することはできませんが、提案どおりにフォントセットフォントを設定しても効果がないようです。list-fontsetsinitファイルにコードを書き込んだ後、4つのリストが表示され、1つだけが設定したフォントに関連しています。
karl 14

1
明確にする必要があります。これは不思議なことに、グリフのチャンクの問題を修正しているようですが、すべてではありません。必要なフォントで75%の文字が表示されますが、一部のフォントではフォールバックが発生します。
karl 2014

はい、それは'unicode range に対してのみ有効です。より多くのエンコーディングをカバーしたい場合は、それらのフォントセットも変更する必要があります。私は私の答えを更新しますが、これはおそらくいくつかのハッカーです。Emacsの長老たちからの回答を待つ必要があります。:)
kmicu 2014

私はこれまでのところ本当に助けに感謝し、あなたの答えを受け入れられたものとしてマークし、最後の問題を1つ保存します。これが役に立たない修正を行った後でも機能しないことに気づき続けている主な特徴は、自然数のセットを示すために使用される「二重打たれた大文字N」です。私がそれを調べると、describe-charあなたが使用した範囲のコードポイントを持つユニコードのようですが、それでも別のフォントで表示されます。
karl 14

1
この最後の更新で、解決済みとしてマークされているすべての情報が得られました。ご協力いただきありがとうございます。
karl 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.