web-dev-qa-db-ja.com

EmacsのGTK + 3メニュー構成

私はGTKベースのemacs(スクリーンショット#1)が好きではありませんが、Ubuntu PPAから入手した従来のemacs(スクリーンショット#2)を好みます。

基本的な違いは、従来のemacsは、メニューがまだGTKベースであることを除けば、ほとんどテキストベースのように見えることです。このメニューのフォントとサイズは私が変更したいものです。

基本的に、参照番号1と同じことを行う必要があります。「例外は、メインメニューバーのポップアップ[ドロップダウン]メニューのフォントサイズです。たとえば、Emacsを起動して左クリックした場合メインメニューバーの「ファイル」にファイル機能(ファイルを開く、ディレクトリを開くなど)のポップアップメニューが表示されますが、このメニューのフォントサイズは非常に小さくて読みにくいです。 Facesカスタマイズグループのオプションが影響しているようです。」

参考文献#1から、「メニューフォントはemacsの外でGTKによって制御されている」ことを学びました。しかし、参考文献#2に従って、同じ結果が得られました。つまり、メッセージに示されている参照から〜/ .emacs.d/gtkrcをどのように微調整しても、Emacsメニューには影響がありません。

次に、参考文献#3から、GTK +バージョン2用にEmacs固有のGTK +リソースを微調整しているのに対し、UbuntuPPAのEmacs24はGTK +バージョン3を使用していることがわかりました。

さて、GTK + 3メニューのフォントとサイズを設定する方法について質問がありますか?私はどこでも検索しましたが、おそらくGTK + 3の構成は非常に新しい(または複雑な)ため、誰もブログや話題になりません。

GTK + 3メニューのフォントとサイズを設定する方法の実例を教えてください。

ありがとう

参照#1: http://forums.gentoo.org/viewtopic-t-516665-view-next.html?sid=b8448a7a0c04d2f6d6c80cbd43bfd931

参照#2: http://lists.debian.org/debian-user/2013/05/msg00169.html

参照#3: http://www.gnu.org/software/emacs/manual/html_node/emacs/GTK-resources.html#GTK-resources

スクリーンショット#1:

Screenshot#1: スクリーンショット#2:

Screenshot#2:

1
xpt

仮定:ホームディレクトリにサブディレクトリ.themesがあります。このサブディレクトリ内で、閲覧とカスタマイズのために、/usr/share/themesからテーマを再帰的にコピーしたとします。そのテーマ、またはむしろそのディレクトリを~/.themes/mythemeと呼びましょう。 (注:ファイル~/.themes/mytheme/index.themeに細心の注意を払い、必要に応じて変更してください)。

そのディレクトリ~/.themes/mytheme内に、別のサブディレクトリ~/.themes/mytheme/gtk-3.0があります。そこにはgtk.cssというファイルがあります。このファイルは大きくても小さくてもかまいません。後者の場合、通常、いくつかの「@import url」ステートメントがあり、他の場所から他のCSSファイル(スタイルシート)をインポートします。たとえば、次のようになります。

@import url("/home/WHOAMI/.config/gtk-3.0/apps/someother.css");
@import url("./another.css");

(WHOAMIは自分のアカウント名に置き換えてください)

この例のemacsスタイルシート(サンプルが近づいています)は-あなたが推測したように-emacs.cssと呼ばれ、他のインポートと同様にgtk.cssに追加する必要があります。まあ言ってみれば:

@import url("/home/WHOAMI/.themes/gtk-3.0/emacs.css");

私のコピーを渡す前に、いくつかのメモ:

  1. Gtk3スタイリング:あなたが期待するものとは反対に(私は確かにそうしました)、テーマで利用できる可能性のあるアプリケーション固有のスタイルシート(前述のemacs.cssや、おそらくgtk-3.0サブディレクトリまたはそこにあるネストされたサブディレクトリの他のスタイルシートなど)アプリのように)、これらのアプリ固有のスタイルシートは、それぞれのアプリケーションだけに限定されません!見たところ、Gtk3は同じ名前空間内のすべてのスタイルシートを適切に解析するだけです(ここでは後者の用語を作成しているだけですが、適切なようです)。

    つまり、たとえば、スタイルシートでメニューのスタイルを設定し、CSSセレクター(「GtkMenu」など)を呼び出すと、事実上、すべてのアプリケーションでGtkMenuのすべてのインスタンスのスタイルが設定されます。それはあなたが考えていたものかもしれないし、そうでないかもしれませんが、私の場合、私がemacs.cssと名付けたスタイルシートで作業しているとき、それは非常に逆効果で非常に迷惑であることがわかりました-つまり、 emacsへの適用性。したがって、後者の仮定はINVALID。であることに注意してください。

  2. 別の注意(部分的にaの結果):cssは小さく見えますが、emacs Gtk3のスタイリングはhard(I私は相対的なCSS初心者であることを認めますが、それでも)。 '#pane'でしか識別できない要素を持つことはやや一般的すぎるため、emacs + Gtk3は少し優れたCSSプロファイルを持つ必要があると思います。スクロールバーにテーマを設定できないという事実は、私の意見ではバグです。私は20年以上emacsを使用しており、Gtk2で以前のemacsenとまったく同じように、Gtk3で最新のemacs-24.3をスタイリングするのが好きです。デスクトップテーマの一貫性を持つことはほとんどの点で素晴​​らしいですが、この特定のケースではそうではありません:私はemacs内で多くの時間を過ごします、そしてそれは私の目が好きで慣れているものに成形される必要があります(したがってemacs開発者に注意してください!)

  3. そして3番目の注意:これもb)の結果です:このスタイルシートは繊細に見えます!セレクターを1つ外すと全部バラバラになってしまうような気がします。

  4. スタイルシートでハッキングを開始するときは、ランチャーからアプリケーションを起動しないでください。ターミナルのコマンドラインから起動して、Gtk3がスタイリング/解析エラーに関して与える可能性のあるフィードバックが顔のすぐ前にあるようにします。そして、同じアプリケーションの他のインスタンスをどこでも開いてはいけません。そうした場合、Gtkは明らかにスタイリングデータをキャッシュし、新しいインスタンスはキャッシュされたデータを使用するだけで、最終的に機能するはずの編集が実際にはダメなのか疑問に思います。したがって、スタイリングを変更するたびに、パワーサイクル:emacsを終了し、CLIから再度起動します。

それで、これが私のemacs.cssです:

/*
    see:

    http://developer.gnome.org/gtk3/3.4/GtkCssProvider.html
    http://www.gnu.org/software/emacs/manual/html_node/emacs/GTK-resources.html
    http://thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css/
    http://www.gtkforums.com/viewtopic.php?f=3&t=988&p=72088=GTK3+with+CSS#p72088
*/

/*----------------------------------------------------------------*/
/*
General notes:
- try to make selectors as long as possible, so as not to interfere
  with the controls of other applications; this can be achieved only partly
  (e.g., #pane is a very general selector)
-

TODO:
- checkmarks in menus are black instead of white
- the 'exit emacs' popup dialog somehow gets the wrong resize grip
*/
/*----------------------------------------------------------------*/
/* this works */
#xxxpane
{
    background-color: alpha( @theme_selected_bg_color, 0.8 );
    color: purple;
}

#xxxframe                   /* works, but touches other applications */
                            /* (and we don't need it) )*/
{
    background-color: #708090;
    border-radius: 3px;
    font-size: 12pt;
    color: red;
}

/*----------------------------------------------------------------*/
#pane #verticalScrollBar
{
    /* the vertical scrollbar in emacs has a bug where it sometimes covers the fringe */
    border: 2px solid #292929;                  /* works ! */
    padding: 1px 10px;                          /* second value has enormous effect oddly in vertical dimension! */
    margin: 1px 10px;                           /* second value has enormous effect oddly in vertical dimension! */
    /*border-radius: 2px;*/                     /* works */
    /*
    GtkScrollbar:
    "fixed-slider-length"               gboolean
    "has-backward-stepper"              gboolean
    "has-forward-stepper"               gboolean
    "has-secondary-backward-stepper"    gboolean
    "has-secondary-forward-stepper"     gboolean
    "min-slider-length"                 gint
    */
    /*-GtkScrollbar-fixed-slider-length: 1;*/
    -GtkScrollbar-min-slider-length: 25;
    -GtkScrollbar-has-backward-stepper: 0;
    -GtkScrollbar-has-forward-stepper: 0;
    /*
    GtkRange:
    "activate-slider"          gboolean
    "arrow-displacement-x"     gint
    "arrow-displacement-y"     gint
    "arrow-scaling"            gfloat
    "slider-width"             gint
    "stepper-position-details" gboolean
    "stepper-size"             gint
    "stepper-spacing"          gint
    "trough-border"            gint
    "trough-side-details"      gboolean
    "trough-under-steppers"    gboolean
    */
    /*-GtkRange-activate-slider: 1;*/
    -GtkRange-slider-width: 4;                  /* works */
    -GtkRange-trough-border: 0;                 /* works */ /* with a large width it reveals a bug in emacs and/or gtk3 */
    -GtkRange-trough-side-details: 0;
    -GtkRange-trough-under-steppers: 0;
}

/*----------------------------------------------------------------*/
/* the toolbar is almost never visible */
#emacs-toolbar,
#emacs-toolbar *
{
    background-color: #536B84;
    color: white;
    padding: 0px 6px;
    border: 1px solid white;
}

/*----------------------------------------------------------------*/
/* objective: get menu pulldown menu's to have thin and rounded borders */

#pane #menubar GtkMenuShell
{
    border: 1px solid #78BAD4;  /* light blue */
    border-radius: 5px;
}

/* also give the menus a slightly larger font */
#pane #menubar,
#pane #menubar GtkMenuShell,
#pane #menubar GtkMenuShell *
{
    font-family: "Ubuntu Sans Mono";
    font-size: 7px;
}

/*----------------------------------------------------------------*/
#pane #menubar              /* works */
{
    background-color: #536B84;
    border: none;
    padding: 0px 0px;
    margin: 25px;
}

/* top menu item */
/* this works, but it needs a parent Emacs class specifier */
#pane #menubar > GtkLabel,
#pane #menubar > GtkMenuItem
{
    padding: 2px 18px;  /* works */
    margin: 3px 0px;    /* works */
    color: aquamarine;  /* works */
}

/*----------------------------------------------------------------*/
/* disabled ("greyed out") menu items */
/* note: #emacs-menuitem:insensitive only does one level deep; test on Edit > GoTo > ... */
#emacs-menuitem *:insensitive
{
    color: #292929;                         /* works */
    text-shadow: none;                      /* works */
}

#emacs-menuitem * :hover,
#xxxxemacs-menuitem * :active
{
    background-color: transparent;          /* FINALLY WORKS! */
    color: white;                           /* works */
}

#emacs-menuitem *,                          /* works */
#emacs-menuitem > GtkLabel                  /* works */
{
    background-color: #536B84;
    color: white                            /* works (also for tear lines!) */
}

#emacs-menuitem                             /* with only this it ALMOST works beautifully; only the tear lines are still white */
{
    background-color: #536B84;
    color: #292929;                         /* works -- this affects only the separators */
    border: 0px none;
    /*padding: auto auto;*/
    /*margin: 0px 0px 0px 0px;*/
    /*margin: auto auto auto auto;*/
}

/*----------------------------------------------------------------*/
/* popup dialog */
#emacs-dialog
{
    background-color: #536B84;
    color: white;
    border: 0px none;
}

/*----------------------------------------------------------------*/

弱虫のようですか?そこには何時間ものスタイリングと試行錯誤があります(私はCSSが嫌いで、実際の言語ではなく、発見可能性がありません)。

それを試してみて、それを適応させてカスタマイズするのにどのようにうまくいくかを見てください。洞察やヒントを導き出したり、欠点やバグ、その他のテーマの可能性を発見した場合は、フィードバックをお寄せください。私はそれが不完全で不完全であると確信しています(一つには、プルダウンメニューの下隅を丸くすることができませんでした)。

幸運を!

6
Roadowl

Gnome3でフォントサイズを設定するためのツールはgnome-Tweak-toolです。

使用しているデスクトップ環境でこれが機能しない場合は、代わりにフォントサイズが$XDG_CONFIG_HOME/gtk-3.0/settings.iniから読み取られます。

[Settings]
gtk-font-name = Sans 20

詳細については、 GtkSettingsドキュメント を参照してください。

1
mavit