O que é primário para uma chave?

18

Acabei de ver um atalho estranho no editor do dconf:

<Primary><Alt>KP_End

O que é <Primary> ?

Eu também vi uma chave Above-Tab . Eu entendo completamente a que isso se refere, mas foram esses nomes de chaves definidos?

    
por Robert Siemer 17.11.2014 / 19:44

2 respostas

14

<Primary> é uma coisa gtk+ .
gtk+ 2.24.7 & gtk+ 3.2.1 introduziu o conceito de um modificador acelerador de agnóstico de plataforma, <Primary> , que pode ser usado em vez de <Control> :

a new facility is provided in Gtk+ (as of this writing it is in Git for Gtk+-2.24, and released in Gtk+-3.2.0) to use the <Primary> descriptor in place of <Control> for accelerators and bindings. This will map the accelerator to Command on OSX and to Control for anything else.1

De acordo com este compromisso :

gtk: allow to specify accelerators in a platform-independent way. Introduce <Primary> in accelerator strings, which resolves to GDK_CONTROL_MASK on X11/Win23, and to GDK_META_MASK on quartz.

está definido (juntamente com outros aceleradores) em gtkaccelgroup.c

gtk_accelerator_name (guint accelerator_key,
                     GdkModifierType accelerator_mods)
{
  static const gchar text_release[] = "<Release>";
  static const gchar text_primary[] = "<Primary>";
  static const gchar text_shift[] = "<Shift>";
  static const gchar text_control[] = "<Control>";
  static const gchar text_mod1[] = "<Alt>";
  static const gchar text_mod2[] = "<Mod2>";
  static const gchar text_mod3[] = "<Mod3>";
  static const gchar text_mod4[] = "<Mod4>";
  static const gchar text_mod5[] = "<Mod5>";
  static const gchar text_meta[] = "<Meta>";
  static const gchar text_super[] = "<Super>";
  static const gchar text_hyper[] = "<Hyper>";

<Above_tab> é uma coisa de gerenciador de janelas.
De acordo com este commit em metacity :

We want switching between the windows of an application to be an easily accessible operation. The convenient and memorable keybinding is the key above the tab key - but the keysym for that key isn't consistent across different keyboard layouts. Add code that figures out the key from the XKB geometry and a magic keysym name "Above_Tab" that refers to this key and switch the default binding for cycle_group to Above_Tab

Veja também este commit em mutter e arquivos de origem meta-accel-parse.c e meta-accel-parse.h

    
por 17.11.2014 / 20:48
5

<Primary> geralmente significa Ctrl Super (também conhecido como botão do Windows), mas pode ser redefinido (vi-o mapeado para Ctrl Shift em alguns lugares). O wiki do GNOME diz :

The primary system modifier key should be (Super/Windows/Command key).

Argh. Há alguma confusão aqui. Embora o GNOME Wiki diga a "chave modificadora do sistema primário", isso pode, na verdade, ser diferente da "chave primária". Dois fórum posts note que Primary é Ctrl , como eu pensava inicialmente. Há um um bug (fixo) de dois anos de idade sobre a confusão no Ctrl e Primary arquivado contra compiz no Ubuntu, que diz:

Previously we used to call the control key <Control> but this has now been changed in GNOME so when the control key is pressed <primary> is returned. In compiz we set keyboard shortcuts as (for example) <Control><Alt><Left>.

Fico com tentativa e erro: tente Ctrl primeiro, depois Super .

    
por 17.11.2014 / 19:52