2013-04-11 14 views
5

私はテーマを設定しようとしています.1つは端末用、もう1つはGUI用です。 私は、このスレッドを読んだ:https://superuser.com/questions/165335/how-can-i-show-the-emacs-menu-in-gui-emacs-frames-but-not-in-tty-frames-when-usiGUI /端末emacsの設定のみ

をそして、私のニーズに合わせて機能を作成しようとしました:ここに私を導いた

Run certain Emacs init commands only in GUI mode

(defun set-frame-theme (frame) 
    (let ((want-theme (memq (framep frame) '(x w32 ns)))) 
    (set-frame-parameter frame '(load-theme '(if want-theme monokai solarized-dark) t)))) 
(add-hook 'after-make-frame-functions 'set-frame-theme) 

これは機能しません。 私はguiの場合にのみmonokaiをロードしようとしています。そうでなければ、ソラリゼーションダークをロードします。 GUIインターフェイスでは機能しますが、端末が一見クラッシュすることがあります。

提案?

答えて

11

emacs lisp関数 (display-graphic-p) emacsがGUIで実行されている場合はtrueを返します。あなたの.emacsで

、より簡単な構成のために、あなたのGUIと端末テーマ

(if (display-graphic-p) 
    (load-GUI-theme) 
    (load-Terminal-theme)) 

を切り替えるために、以下を追加し、私はと呼ばれるシンプルな機能を持っている-で末端

(defun is-in-terminal() 
    (not (display-graphic-p))) 

ますこれを使用して読みやすい関数を書くことができます

(if (is-in-terminal) 
    (load-Terminal-theme) 
    (load-GUI-theme)) 

詳細Eの私はちょうどprognと同じように動作するマクロを持っているだけの構成ターミナルへのアプローチが、Emacsが実行されている場合のみ、GUIなしで本体を評価

(defmacro when-term (&rest body) 
    "Works just like `progn' but will only evaluate expressions in VAR when Emacs is running in a terminal else just nil." 
    `(when (is-in-terminal) ,@body)) 

使用例:

(when-term 
    (load-my-term-theme) 
    (set-some-keybindings) 
    (foo-bar)) 

このブロック全体が完全になりますGUIで実行している場合は無視されますが、端末では実行されます。私はあまりにも選択しながら、ターミナルモードで実行しているときにクラッシュのemacsの問題を抱えていた

https://github.com/jordonbiondo/Emacs/blob/master/Jorbi/jorbi-util.el

+1

私は予想以上に優れています。ありがとう! – CrimsonKing

+0

私はそれを試しました、そしてemacsは "シンボルの関数定義は無効です:display-graphics-p"と言ってエラーを投げます。私は何をすべきか?私はEmacs 24を使用しています。 – CrimsonKing

+0

Oops Typo!それは(display-graphic-p)でなく(display-graphicS-p)< - 複数のことに注意してください。私は投稿を更新しました。 –

0

テーマそのものに問題があるように見えます。うーん。

0

:あなたはここでそれをチェックアウトすることができます興味があれば

すべてこのコードは、私の設定では、ファイルから取られましたカラーテーマ。 これは色のテーマではなくemacs自体に問題があると私は言うでしょう。 この記事の執筆時点では、HEADから最新版へのアップデートができました。

0

https://www.emacswiki.org/emacs/CustomizingFaces

で述べたように、「あなたは異なるディスプレイごとに異なるカラースキームをしたい場合は、あなたにもこれをカスタマイズすることができます。カスタマイズバッファでは、[状態]ボタンをクリックして選択し、 『表示中全て表示スペックを』。さまざまなディスプレイに異なるスペックを使用できるようになりました。