0

Customize-create-theme を使用して emacs-23 カスタム テーマを作成しました。X (Linux gnome デスクトップ) では問題なく動作します。ただし、tty で (gnome-terminal 内で) 実行すると、一部の色が正しくありません。

問題となるのは色の正確さではなく (両方の状況で色を一致させることができればよいのですが)、実際には機能しないほどずれているものもあります。たとえば、X の下に緑色で表示される関数名は tty の下では見えませんが、X の下に金色で表示されるキーワードは tty の下でも金色 (または少なくともある種の黄色) に表示されます。

おそらく、tty の下では色を正確に一致させることができないため、似たようなものが代用されていますか? もしそうなら、これはいつもうまくいくとは限りません。

どうすればこれを修正できますか? 「カスタマイズ」GUI または ~/.emacs.d/my-theme.el ファイルのいずれかで、特定の面が X に表示されるフレームにのみ適用され、他の面が tty のみに適用されるように指定することは可能ですか?似ている?

(外部のカラー テーマ システムを使用するのではなく、組み込みの emacs テーマ システムを動作させることに興味があります。)

4

2 に答える 2

1

フレームで色が使用できない場合、emacs は「近い」ものを選択しようとする必要がありますが、限られた色のディスプレイでは、これはしばしば非常に間違っています。M-x list-colors-display(実際に色を表示するために)使用するか(display-color-cells)、スクラッチバッファーで実行するかのいずれかで、gnome-terminal にあると考えられる色の数を emacs に問い合わせる必要があります。8 つしかないと表示されている場合は、 emacs を起動する前に、TERM環境変数を次のように変更することを検討してくださいxterm-256color(ただし、これが gnome-terminal で実際にどの程度機能するかはわかりません。私は xterm を使用しています)。

これは、emacs がより近い色を見つけるのに役立つかもしれませんが、それでも間違っている場合は、ウィンドウ システムに基づいて色を設定するなど、より抜本的なことを行う必要があります。

デーモンモードを使用していない場合は、次のようなものを使用できます

(if window-system
    (set-face-foreground 'font-lock-function-name-face "LightSkyBlue"))

を使用するM-x describe-faceと、どの面を記述したいか尋ねられ、現在ポイントにある面がデフォルトになります。そこから名前 (および通常は色) を取得できます。

デーモン モードを使用している場合は、フレームごとに異なる色が必要になります。その場合、新しいフレーム フックでフレームの色を設定する必要があります。次のようになります。

(defun set-new-frame-colors (frame)
   "Set colors based on frame type."
   (if (window-system frame)
       (set-face-forgeground 'font-lock-function-name-face "LightSkyBlue" frame)
       (set-face-forgeground 'font-lock-function-name-face "blue" frame)))
(add-hook 'after-make-frame-functions 'set-new-frame-colors)

または、 をチェックする代わりに、システムでサポートされている色の数に基づいて(window-system frame)チェック(length (defined-colors frame))し、8 色と 256 色の端末で異なる色を使用できるようにすることもできます。

于 2010-02-11T23:30:44.093 に答える
0

変数 を調べることで、現在のフレームがグラフィカル ウィンドウに関連付けられているかどうかを判断できますwindow-system。リンクにはドキュメントがありますが、次のようになります。

window-system is a variable defined in `C source code'.
Its value is nil

Documentation:
Name of window system through which the selected frame is displayed.
The value is a symbol--for instance, `x' for X windows.
The value is nil if the selected frame is on a text-only-terminal.

したがって、現在のテーマを

(if window-system
    ;; current theme configuration
)

そして、xterm では、好きな新しいものを作成し、それを else (または別のifステートメント、またはunlessand when)に入れます。

于 2009-11-13T22:07:18.120 に答える