Compose

De Disposition de clavier francophone et ergonomique bépo

Si certains caractères s’affichent mal (carrés vides, points d’interrogation), consultez l’aide Unicode sur Wikipédia.

Compose est un mécanisme pour GNU/Linux (venant d’Unix) qui permet de taper des caractères à la volée en combinant plusieurs touches mortes. Un grand nombre de séquences compose correspondent à l'enchaînement de deux touches mortes et d'une touche de composition finale, mais ce n'est pas une limitation : le mécanisme Compose autorise jusqu'à huit touches dans la séquence, dans la version actuelle d’X.Org.

L'intérêt de Compose est d'offrir un accès relativement simple à un très grand nombre de caractères UTF-8. Par exemple, si vous êtes amenés à taper régulièrement des documents scientifiques comportant des symboles mathématiques spécialisés, vous pourrez trouver intéressant de vous créer un fichier .XCompose qui vous donnera accès à tous ces caractères via une combinaison de touches mortes adéquate.

Comment l’activer ?

Attention

UTF-8 est nécessaire ici, et si votre système est encore en ISO-8859-1, Compose ne fonctionnera pas. Toutes les distributions GNU/Linux récentes sont en UTF-8. Si ce n'est pas le cas pour vous, et si vous le pouvez, passez à l’UTF-8 !

Attention

Si vous utilisez SCIM, vous ne pouvez pas utiliser de fichier XCompose personnalisé.

Sous KDE 
Dans le (Centre de) Configuration, section Disposition du Clavier, onglet Options XKb, il suffit de cocher par exemple « Compose est assignée à la touche Windows droite ». D’autres localisations sont possibles.
Sous Gnome 
Dans « Système » > « Préférence » > « Clavier » : onglet « agencement », puis bouton « Options d’agencement » (ou bien un clic droit sur l’« indicateur de claviers » si ce dernier se trouve sur votre tableau de bord). Il y a une section « Position de la touche Compose » dans laquelle il suffit de cocher l’emplacement désiré.
Avec XKb 
Dans le fichier symbols, mettre: key <RWIN> { [ Multi_key, Multi_key ] };

Une fois une touche transformée en touche Compose, il suffit de l’utiliser : Compose suivi de « s » suivie de « s » va créer le eszett allemand « ß » (U00DF) par exemple.

Comment installer ses propres combinaisons (ou celles proposées ici)

Il suffit de copier-coller le texte ci-dessous dans un fichier nommé .XCompose à la racine de son répertoire utilisateur (~/.XCompose) et toutes les combinaisons ci-dessous s’ajouteront à celles par défaut car on utilise ici le fichier le plus complet.

En tant qu’administrateur, vous pouvez aussi ajouter les changements proposés ici au fichier par défaut, afin de rendre les changements visibles pour tous les utilisateurs, mais alors là, attention pendant les mises à jour système…

Fichier ~/.XCompose

Gestion en particulier des touches mortes sous Linux, et bien plus.

On couvre ici beaucoup plus de fonctionalités que les besoins exprimés dans le projet, et bien plus aussi apparemment que les possibilités offertes par les outils équivalents sous d’autres systèmes d’exploitation plus limités.

Il faudra donc décider de ce qui est fourni en « standard », ce qui est réalisable multi-plateformes et officiellement supporté par le projet, et ce qui est disponible en plus sous GNU/Linux et systèmes basés sur XKB. Car même si les autres systèmes ne peuvent pas tout gérer, il serait dommage de s’en priver ici!

Le fichier .XCompose suivant donne accès :

  • À divers symbols mathématiques comme = + > = ⇒, > + / = ≯, > + > = ≫, ⇒ + / = ⇏, etc.
  • Quelques raccourcis bien pratiques discutés dans le projet bépo (exposants, etc)

existent déjà dans la base de donnée Compose par défaut, mais sont recopiés ici à titre d'exemple.

Nicolas Brodu <nicolas.brodu @ free.fr>
Cf discussions sur la liste pour certains exemples ci-dessous

Il faut regarder si on ne peut partir du XCompose du projet Neo plutôt que de tout refaire. Sinma

.XCompose

# On charge la base de donnée de Compose la plus complète en UTF-8
include "/usr/share/X11/locale/en_US.UTF-8/Compose"

###################
#    Ensembles    #
###################

<Multi_key> <N> <N> : "ℕ" U2115
<Multi_key> <Z> <Z> : "ℤ" U2124
<Multi_key> <Q> <Q> : "ℚ" U211A
<Multi_key> <R> <R> : "ℝ" U211D
<Multi_key> <C> <C> : "ℂ" U2102
<Multi_key> <H> <H> : "ℍ" U210D
<Multi_key> <P> <P> : "ℙ" U2119
<Multi_key> <i> <n> : "⊂" U2282
<Multi_key> <n> <i> : "⊃" U2283
<Multi_key> <slash> <i> <n> : "⊄" U2284
<Multi_key> <slash> <n> <i> : "⊅" U2285
<Multi_key> <slash> <U2282> : "⊄" U2284
<Multi_key> <slash> <U2283> : "⊅" U2285
<Multi_key> <equal> <i> <n> : "⊆" U2286
<Multi_key> <equal> <n> <i> : "⊇" U2287
<Multi_key> <slash> <equal> <i> <n> : "⊈" U2288
<Multi_key> <slash> <equal> <n> <i> : "⊉" U2289
<Multi_key> <slash> <U2286> : "⊈" U2288
<Multi_key> <slash> <U2287> : "⊉" U2289


################################
#    equality and relations    #
################################

<Multi_key> <equal> <equal> : "≣" U2263
<Multi_key> <equal> <minus> : "≡" U2261
<Multi_key> <equal> <asciitilde> : "≅" U2245
<Multi_key> <minus> <asciitilde> : "≃" U2243
<Multi_key> <asciitilde> <asciitilde> : "≈" U2248
<Multi_key> <asciitilde> <minus> : "≂" U2242
<Multi_key> <equal> <d> : "≝" U225D
<Multi_key> <equal> <degree> : "≗" U2257
<Multi_key> <equal> <asciicircum> : "≙" U2259
<Multi_key> <equal> <v> : "≚" U225A
<Multi_key> <equal> <asterisk> : "≛" U225B
<Multi_key> <equal> <Greek_DELTA> : "≜" U225C
<Multi_key> <equal> <space> <D>: "≜" U225C
<Multi_key> <equal> <m> : "≞" U225E
<Multi_key> <equal> <question> : "≟" U225F
<Multi_key> <equal> <slash> : "≠" U2260
<Multi_key> <slash> <minus> <asciitilde> : "≄" U2244
<Multi_key> <slash> <equal> <asciitilde> : "≇" U2247
<Multi_key> <slash> <equal> <minus> : "≢" U2262
<Multi_key> <greater> <equal> : "≥" U2265
<Multi_key> <less> <equal> : "≤" U2264
<Multi_key> <greater> <asciitilde> : "≳" U2273
<Multi_key> <less> <asciitilde> : "≲" U2272
<Multi_key> <less> <less> : "≪" U226A
<Multi_key> <greater> <greater> : "≫" U226B
<Multi_key> <greater> <less> : "≶" U2276
<Multi_key> <less> <greater> : "≷" U2277
<Multi_key> <slash> <greater> <equal> : "≱" U2271
<Multi_key> <slash> <less> <equal> : "≰" U2270
<Multi_key> <slash> <greater> <asciitilde> : "≵" U2275
<Multi_key> <slash> <less> <asciitilde> : "≴" U2274
<Multi_key> <slash> <greater> <less> : "≸" U2278
<Multi_key> <slash> <less> <greater> : "≹" U2279
<Multi_key> <greater> <slash> : "≯" U226F
<Multi_key> <less> <slash> : "≮" U226E
<Multi_key> <greater> <bar> : "⊳" U22B3
<Multi_key> <less> <bar> : "⊲" U22B2
<Multi_key> <bar> <greater> <equal> : "⊵" U22B5
<Multi_key> <bar> <less> <equal> : "⊴" U22B4
<Multi_key> <slash> <greater> <bar> : "⋫" U22EB
<Multi_key> <slash> <less> <bar> : "⋪" U22EA
<Multi_key> <slash> <bar> <greater> <equal> : "⋭" U22ED
<Multi_key> <slash> <bar> <less> <equal> : "⋬" U22EC
<Multi_key> <greater> <period> : "⋗" U22D7
<Multi_key> <less> <period> : "⋖" U22D6

<Multi_key> <bar> <bar> : "∥" U2225
<Multi_key> <slash> <bar> <bar> : "∦" U2226
<Multi_key> <bar> <slash> : "∤" U2224


#################
#    Flèches    #
#################

<Multi_key> <minus> <greater> : "→" U2192         # déjà présent de base
<Multi_key> <minus> <less> : "←" U2190            # consistent with equal-less
<Multi_key> <bar> <asciicircum> : "↑" U2191
<Multi_key> <bar> <v> : "↓" U2193
<Multi_key> <minus> <x> : "↔" U2194
<Multi_key> <equal> <greater> : "⇒" U21D2
<Multi_key> <equal> <less> : "⇐" U21D0            # less equal is taken
<Multi_key> <U2225> <asciicircum> : "⇑" U21D1
<Multi_key> <U2225> <v> : "⇓" U21D3
<Multi_key> <quotedbl> <asciicircum> : "⇑" U21D1
<Multi_key> <quotedbl> <v> : "⇓" U21D3
<Multi_key> <equal> <x> : "⇔" U21D4


###########################
#    Opérateurs divers    #
###########################

#slash-o, period-o, etc already taken => use o-slash, etc
<Multi_key> <o> <plus> : "⊕" U2295
<Multi_key> <o> <minus> : "⊝" U229D
<Multi_key> <o> <asterisk> : "⊛" U229B
<Multi_key> <o> <slash> : "⊘" U2298
<Multi_key> <o> <x> : "⊗" U2297
<Multi_key> <o> <o> : "⊚" U229A
<Multi_key> <o> <period> : "⊙" U2299
<Multi_key> <o> <equal> : "⊜" U229C
<Multi_key> <v> <v> : "√" U221A
<Multi_key> <2> <v> : "√" U221A
<Multi_key> <3> <v> : "∛" U221B
<Multi_key> <4> <v> : "∜" U221C
<Multi_key> <asterisk> <asterisk> : "∗" U2217
<Multi_key> <asterisk> <x> : "×" multiply
<Multi_key> <asterisk> <period> : "·" periodcentered
<Multi_key> <asterisk> <o> : "∘" U2218

#<Multi_key> <> <> : "" U

# LaTeX commands <Multi_key> <c> <o> <m> <m> <a> <n> <d>
# Partially started in another file

Démos

  • La possibilité d'insérer des espaces insécables autour des guillemets. L’idée est alors de taper Compose + Guillemet au lieu d’Espace + Guillemet. Ces espaces devraient être insécables fines, mais celles-ci ne sont malheureusement pas toujours bien gérées par les polices de caractères. En attendant, insérer un espace insécable aussi simplement est déjà bien!
  • Une idée trouvée sur la [Utilisateur:Laurent#.C2.AB_et_.C2.BB_en_acc.C3.A8s_indirect_mais_directement_avec_espace_ins.C3.A9cable|page de Laurent] est de faire en sorte que la touche « et » insérent en même temps l'espace insécable.
  • Enfin, des tas de flèches!
.XCompose

##################################################
#    Espaces insécables autour des guillemets    #
##################################################

# Avec touche Compose
<Multi_key> <guillemotleft> : "« "
<Multi_key> <guillemotright> : " »"

# L'autre solution: l'ajout direct
<guillemotleft> : "« "
<guillemotright> : " »"

###############################
#    Caractères combinants    #
###############################

# Démo pour le support des caractères combinés via Unicode "combining modifiers"
# Note: Le symbole entre quotes de la ligne ci-dessous est un "e" suivi d’un caractère
# unicode U030A "Combining ring above". Il devrait s’afficher comme un seul caractère.
<dead_abovering> <e> : "e̊"


# Démo pour un support générique des caractères combinants avec BackSpace

# exemple de combining above
<Multi_key> <BackSpace> <U2218> : U030A
<Multi_key> <BackSpace> <degree> : U030A
<Multi_key> <BackSpace> <dead_abovering> : U030A

# exemple de combining below
<Multi_key> <BackSpace> <BackSpace> <U2218> : U0325
<Multi_key> <BackSpace> <BackSpace> <degree> : U0325
# cas limite, ça change la sémantique du dead_abovering
<Multi_key> <BackSpace> <BackSpace> <dead_abovering> : U0325
<Multi_key> <BackSpace> <BackSpace> <underscore> : U0332
<Multi_key> <BackSpace> <BackSpace> <equal> : U0333

# exemple de combining overlay
<Multi_key> <BackSpace> <BackSpace> <BackSpace> <U2218> : U20D8
<Multi_key> <BackSpace> <BackSpace> <BackSpace> <degree> : U20D8
<Multi_key> <BackSpace> <BackSpace> <BackSpace> <dead_abovering> : U20D8

# on peut même écrire du t̲e̲x̲t̲e̲ s̲o̲u̲l̲i̲g̲n̲é̲ ou du t̶e̶x̶t̶e̶ ̶b̶a̶r̶r̶é̶ si on veut,
# ou plus exotique le d̳o̳u̳b̳l̳e̳ s̳o̳u̳l̳i̳g̳n̳é̳
<Multi_key> <BackSpace> <BackSpace> <BackSpace> <U2013> : U0336    # barré, grand (LONG STROKE)
<Multi_key> <BackSpace> <BackSpace> <BackSpace> <minus> : U0335    # barré, petit (SHORT STROKE)

# transforme → en → combinante (pour les vecteurs, etc)
<Multi_key> <BackSpace> <U2192> : U20D7
<Multi_key> <BackSpace> <Right> : U20D7
<Multi_key> <BackSpace> <BackSpace> <U2192> : U20EF
<Multi_key> <BackSpace> <BackSpace> <Right> : U20EF

# Même chose pour ←
<Multi_key> <BackSpace> <U2190> : U20D6
<Multi_key> <BackSpace> <Left> : U20D6
<Multi_key> <BackSpace> <BackSpace> <U2190> : U20EE
<Multi_key> <BackSpace> <BackSpace> <Left> : U20EE


#################
#    Flèches    #
#################

# Cette solution n’est pas forcément portable sous d’autres OS
# mais elle est simple. Une autre proposition a été faite sur
# la liste de discussion pour ^ + pavé numérique, mais pose
# d’autres inconvénients comme le support de ¹²³⁴⁵...

<Multi_key> <Up> : "↑" U2191
<Multi_key> <Right> : "→" U2192
<Multi_key> <Left> : "←" U2190
<Multi_key> <Down> : "↓" U2193

<Multi_key> <Multi_key> <Up> : "⇑" U21D1
<Multi_key> <Multi_key> <Right> : "⇒" U21D2
<Multi_key> <Multi_key> <Left> : "⇐" U21D0
<Multi_key> <Multi_key> <Down> : "⇓" U21D3
<Multi_key> <Multi_key> <Multi_key> <Right> : "⇛" U21DB
<Multi_key> <Multi_key> <Multi_key> <Left> : "⇚" U21DA

<Multi_key> <KP_Up> : "↑" U2191
<Multi_key> <KP_Right> : "→" U2192
<Multi_key> <KP_Left> : "←" U2190
<Multi_key> <KP_Down> : "↓" U2193
<Multi_key> <KP_Begin> : "↔" U2194

<Multi_key> <KP_8> : "↑" U2191
<Multi_key> <KP_6> : "→" U2192
<Multi_key> <KP_4> : "←" U2190
<Multi_key> <KP_2> : "↓" U2193
<Multi_key> <KP_5> : "↔" U2194

# À faire : rajouter les ↗ et consors
# Exemple: ↑ + → = ↗

# À faire également: rajouter les ½, ¼, etc
# Exemple: 1 + / + 2 = ½

# A tester: <dead_acute> <Multi_key> <space> XXX pour lettre Greque accentuée

Fichier compose personnalisés créé par les utilisateurs

Voici la liste non exhaustive des personnes ayant créé un fichier .XCompose personalisé :

Robin : nombreux symboles mathématiques.

Que faire si ~/.XCompose n'est pas reconnu ?

Activer Xim

Sous Debian et ses dérivés (Ubuntu, Xandros), le plus simple pour activer ~/.XCompose dans toutes les applications est de choisir la méthode de saisie Xim :

  • dans un terminal, taper :
im-switch -c
  • on obtient quelque chose du type :
There are 6 candidates which provide IM for /home/kaze/.xinput.d/fr_FR:

  Selection    Alternative
  -----------------------------------------------
      1        default
*     2        default-xim
      3        none
      4        scim
      5        scim-immodule
      6        th-xim
System wide default for fr_FR (or all_ALL) locale is marked with [+].
Press enter to keep the current selection[*], or type selection number:
  • choisir « default-xim » et valider, dans le cas ci-dessus : 2 [Enter]
  • redémarrer X avec un bon vieux Ctrl+Alt+Backspace

Applications GTK : OpenOffice.org, Firefox, …

Pour que Xim soit utilisé par défaut dans les applications GTK, il faut modifier votre fichier .bashrc (ou .bash_profile si vous voulez que ce soit pris en compte au login et pas juste lors de l’ouverture d’un shell) :

gedit ~/.bashrc

et ajouter la ligne suivante en fin de fichier :

export GTK_IM_MODULE=xim

Si vous souhaitez que la modification soit valable pour tous les utilisateurs, vous pouvez mettre cette ligne dans le fichier /etc/environment

Liens externes