GTK + 3 Configuração de menu para o Emacs

1

Eu não gosto do emacs baseado em GTK (Screenshot # 1) e ainda prefiro a tradição emacs (Screenshot # 2), que eu recebo do Ubuntu PPA.

A diferença fundamental é que a tradição do emacs parece mais com base em texto, exceto o menu, que ainda é baseado em GTK. Esta fonte e tamanho do menu é o que eu quero mudar.

Basicamente, eu preciso fazer a mesma coisa que Ref # 1: "A exceção é o tamanho da fonte nos menus pop-up [drop-down] da barra de menu principal. Por exemplo, se eu iniciar o Emacs e sair -Clique em "Arquivo" na barra de menu principal, aparece o menu pop-up para as funções Arquivo (Abrir Arquivo, Abrir Diretório, etc.) No entanto, o tamanho da fonte neste menu é extremamente pequeno e difícil de ler. Nenhuma das opções no grupo de personalização Faces parece afetá-lo. "

Eu aprendi com a Ref # 1 que "as fontes do menu são controladas pelo GTK, fora do emacs". No entanto, seguindo Ref # 2, eu tenho o mesmo resultado. Ou seja, não importa como eu ajustei o ~ / .emacs.d / gtkrc das referências dadas na mensagem, não há efeito no menu do Emacs.

Então descobri na Ref # 3 que o que eu estava fazendo era ajustar os recursos GTK + específicos do Emacs para a versão 2 do GTK +, enquanto o Emacs, Emacs 24 do Ubuntu PPA, estava usando o GTK + versão 3.

OK, agora vem a minha pergunta, como configurar a fonte e o tamanho do menu do GTK + 3? Eu procurei em todos os lugares, mas talvez a configuração do GTK + 3 seja tão nova (ou complicada) que ninguém blogue / fale sobre isso.

Alguém pode me dar um exemplo de como configurar o tamanho e fonte do menu GTK + 3, por favor?

Obrigado

Ref # 1: link

Ref # 2: link

Ref # 3: link

Screenshot # 1:

Screenshot#2:

    
por xpt 18.05.2013 / 15:14

2 respostas

6

Suposição: No seu diretório home, você tem um subdiretório .themes . Nesse subdiretório, digamos que você copiou recursivamente um tema de /usr/share/themes , para leitura e leitura costumização. Vamos chamar esse tema, ou melhor, seu diretório, ~/.themes/mytheme . (Nota: preste muita atenção e, se necessário, modifique o conteúdo do arquivo ~/.themes/mytheme/index.theme ).

Dentro desse diretório ~/.themes/mytheme você tem outro subdiretório ~/.themes/mytheme/gtk-3.0 . Existe um arquivo chamado gtk.css . Este arquivo pode ser grande ou pequeno. No último caso, geralmente há várias declarações "@import url", importando outros arquivos CSS (folhas de estilo) de outro lugar, por exemplo, assim:

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

(substitua o nome da sua conta por WHOAMI)

Sua folha de estilos do emacs (amostra chegando) para este exemplo será chamada - você adivinhou - emacs.css , e nós precisamos para adicioná-lo a gtk.css , assim como as outras importações. Vamos dizer:

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

Antes de entregar a minha cópia, algumas notas:

  1. Estilo Gtk3: ao contrário do que você poderia esperar (eu certamente fiz), as folhas de estilo específicas do aplicativo que podem estar disponível em um tema (como o acima mencionado emacs.css e possivelmente outros no subdiretório gtk-3.0 ou qualquer outro subdiretórios aninhados lá como aplicativos), essas folhas de estilo específicas do aplicativo NÃO estão limitadas a esse respectivo aplicativo só! Como parece, o Gtk3 apenas analisa todas as folhas de estilo alegremente dentro do mesmo espaço de nomes (eu apenas estou inventando o último termo aqui, mas parece apropriado).

    O que isso significa é que, por exemplo, quando você está estilizando um menu na sua folha de estilo e chama o seletor de CSS, por exemplo, 'GtkMenu', você está, na verdade, estilizando TODAS as instâncias do GtkMenu em TODAS as aplicações. Isso pode ou não ser o que você tinha em mente, mas no meu caso eu achei muito contraproducente e muito chato, quando eu estou trabalhando em uma folha de estilo que Eu chamei o emacs.css por uma razão - a saber, limitar sua aplicabilidade ao emacs. Então esteja avisado, essa última suposição é INVALID.

  2. Outra nota (em parte uma consequência de a): mesmo que o css pareça pequeno, o estilo do emacs Gtk3 foi difícil (eu lhe darei isso Eu sou um novato relativamente css, mas ainda assim). Eu acho que o emacs + Gtk3 precisa ter um perfil CSS um pouco melhor, porque ter um elemento apenas identificável por ' #pane ' é um pouco geral demais, e o fato de que você pode quase não tema a barra de rolagem é um bug na minha opinião. Eu tenho usado emacs por mais de 20 anos e Eu gosto de estilizar o mais recente emacs-24.3 com Gtk3 exatamente como eu tive anteriormente no emacsen com o Gtk2. Tendo a consistência de um tema de desktop é legal na maioria dos aspectos, mas não neste caso em particular: eu gasto um muito tempo dentro do emacs, e ele precisa ser moldado ao que meus olhos gostam e estão acostumados (então, note desenvolvedores do emacs!)

  3. E uma terceira nota: novamente por sua vez resultante de b): esta folha de estilos parece delicada! Tenho a sensação de que removendo um seletor e a coisa toda se desfaz.

  4. Quando você começa a hackear uma folha de estilo, não inicia o aplicativo a partir de um iniciador . Comece a partir do terminal linha de comando, então qualquer feedback que o Gtk3 possa dar sobre erros de modelagem / análise está bem na frente do seu rosto. E, você NÃO DEVE ter absolutamente nenhuma outra instância do mesmo aplicativo aberta em qualquer lugar . Se você fizer isso, Gtk aparentemente caches styling data, e uma nova instância apenas usará os dados em cache e deixará você se perguntando por que a edição que deveria finalmente fazer com que funcione de fato não é uma opção. Então, com cada modificação de estilo: ciclo de energia: saia do emacs, acione-o novamente a partir do CLI.

Então, com isso, aqui está, meu 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;
}

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

Parece um covarde? Bem, há muitas horas de estilo e tentativa e erro lá dentro (eu odeio CSS, não é um linguagem real, não tem descoberta).

Experimente e veja como você pode se adaptar e adaptá-lo. Se você der alguma ideia ou dicas ou descobrir deficiências ou erros ou outras possibilidades de temas, por favor dê feedback. Estou certo de que é incompleto e imperfeito uma coisa, eu não conseguia arredondar os cantos inferiores dos menus suspensos).

Boa sorte!

    
por 26.12.2013 / 22:38
1

A ferramenta para configurar tamanhos de fonte no Gnome 3 é gnome-tweak-tool .

Se você achar que isso não funciona no ambiente de área de trabalho que você está usando, os tamanhos das fontes serão lidos em $XDG_CONFIG_HOME/gtk-3.0/settings.ini :

[Settings]
gtk-font-name = Sans 20

Consulte a documentação do GtkSettings para obter mais detalhes.

    
por 22.05.2013 / 00:57