1

Мне не нравятся основанные на GTK emacs (Снимок экрана № 1), и я все еще предпочитаю традиционные emacs (Снимок экрана № 2), которые я получаю из Ubuntu PPA.

Принципиальное отличие состоит в том, что традиционный emacs выглядит в основном как текстовый, за исключением меню, которое все еще основано на GTK. Этот шрифт и размер меню - это то, что я хочу изменить.

По сути, мне нужно сделать то же самое, что и в ссылке № 1: «Исключением является размер шрифта во всплывающих [выпадающих] меню в строке главного меню. Например, если я запускаю Emacs и щелкаю левой кнопкой мыши на "Файл" в строке главного меню, появляется всплывающее меню для функций Файла (Открыть файл, Открыть каталог и т.д.). Тем не менее, размер шрифта в этом меню очень маленький и трудно читаемый. Похоже, что ни один из параметров в группе настройки Faces не влияет на это ».

Из ссылки № 1 я узнал, что «шрифты меню контролируются GTK вне emacs». Однако после ссылки № 2 я получил тот же результат. То есть, независимо от того, как я настроил ~/.emacs.d/gtkrc из ссылок, приведенных в сообщении, меню Emacs не действует.

Затем из ссылки № 3 я узнал, что я настраивал специфичные для Emacs ресурсы GTK+ для GTK+ версии 2, в то время как мой Emacs, Emacs 24 из Ubuntu PPA, использует 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:

Скриншот # 1: Снимок экрана № 2:

Скриншот # 2:

2 ответа2

6

Предположение: в вашем домашнем каталоге у вас есть .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. Так что имейте в виду , что последнее предположение неверно.

  2. Еще одно замечание (отчасти это следствие a): несмотря на то, что css теперь кажется маленьким, стилизовать emacs Gtk3 было сложно (я позволю вам сказать, что я относительный новичок в css, но все же). Я думаю, что emacs + Gtk3 должен иметь немного лучший профиль CSS, потому что наличие элемента, который можно идентифицировать только с помощью « #pane », является слишком общим, и тот факт, что вы почти НЕ можете использовать тему полосы прокрутки, является ошибкой, на мой взгляд. Я использую emacs уже более 20 лет, и мне нравится стилизовать последний emacs-24.3 с Gtk3 точно так же, как я делал раньше emacsen с Gtk2. Наличие консистенции темы рабочего стола во многих отношениях приятно, но не в этом конкретном случае: я провожу много времени в emacs, и его нужно адаптировать к тому, что нравится моим глазам и к чему они привыкли (так что обратите внимание на разработчиков emacs !)

  3. И третье замечание: опять же, в свою очередь, в результате b): эта таблица стилей кажется деликатной! У меня такое ощущение, что удаление одного селектора и все это ломается.

  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, это не настоящий язык, не обнаруживаемый).

Попробуйте и посмотрите, как вы можете адаптировать и настроить его. Если вы получаете какие-либо идеи или советы, или обнаруживаете недостатки, ошибки или другие тематические возможности, пожалуйста, оставьте отзыв. Я уверен, что он неполный и несовершенный (во-первых, я не мог округлить нижние углы выпадающих меню).

Удачи!

1

Инструментом для установки размеров шрифта в Gnome 3 является gnome-tweak-tool .

Если вы обнаружите, что это не работает в используемой среде рабочего стола, размеры шрифтов будут считаны из $XDG_CONFIG_HOME/gtk-3.0/settings.ini:

[Settings]
gtk-font-name = Sans 20

См. Документацию GtkSettings для более подробной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .