Convention sur l'utilisation de Cx ou Cc comme clés de préfixe

16

Quelles sont les conventions d'utilisation C-x, C-cou M-comme touches de préfixe?

Par exemple: est C-x, etc., pour enregistrer ou visiter des tampons? Est C-c, etc., pour l'édition de texte?

Contexte

C'est peut-être une question stupide. J'utilise un clavier espagnol et redéfinis parfois les raccourcis clavier courants pour un clavier anglais (QWERTY). Par exemple: la commande shell est liée dans Emacs vanilla à M-!. Je lie à la M-¡place, parce M-!est M-shift-1que je ne peux pas appuyer facilement. Je me demande s'il y a des conventions que j'écrase lorsque j'effectue ce genre de modifications

anquegi
la source
comme M-xpour «exécuter une commande étendue, c'est la passerelle vers un grand nombre de choses sophistiquées que vous pouvez accomplir de manière interactive dans Emacs; il vous permet d'exécuter n'importe quelle fonction Elisp par son nom». a C-cet n'a C-xpas une description comme ça?
Pinocchio

Réponses:

21

Si vous parlez de lier des clés pour votre propre usage, alors c'est la règle: vous pouvez lier toutes les clés que vous aimez.

Si vous voulez être sûr de ne pas lier une clé qui pourrait déjà être liée, utilisez-la C-csuivie d'une lettre. Toutes ces clés sont réservées aux utilisateurs (voir ci-dessous).


Si vous parlez de liaison de clés dans du code (par exemple, une bibliothèque) que vous écrivez, pour une utilisation par d'autres, les règles (conventions) sont décrites ici: conventions de liaison de clé de nœud du manuel Elisp.

Les principales règles y relatives, liées à ce que vous demandez, sont celles concernant C-c:

  • Ne définissez pas C-c LETTERcomme clé dans les programmes Lisp. Les séquences composées de C-cet d'une lettre (majuscule ou minuscule) sont réservées aux utilisateurs; ce sont les seules séquences réservées aux utilisateurs, donc ne les bloquez pas.

  • Les séquences composées de C-csuivies d'un caractère de contrôle ou d'un chiffre sont réservées aux modes principaux.

  • Les séquences composées de C-csuivi {, }, <, >, : ou ;sont également réservés aux modes principaux.

  • Les séquences constituées de C-csuivies de tout autre caractère de ponctuation ou de symbole ASCII sont allouées pour les modes mineurs. Leur utilisation dans un mode majeur n'est pas absolument interdite, mais si vous le faites, la liaison du mode majeur peut être assombrie de temps en temps par des modes mineurs.

Vous noterez qu'il n'y a pas de convention concernant C-x. Une convention non déclarée, ou tout simplement un bon conseil / pratique est celle-ci, cependant: si vous remplacez une liaison Emacs standard existante (c'est-à-dire, une que vous obtenez d'Emacs telle qu'elle est distribuée, sans charger de bibliothèques tierces), cela pourrait confondre ou ennuyer certains utilisateurs de votre code.


Vous pouvez accéder à ce document dans Emacs, de cette façon:

  1. C-h i, pour ouvrir Info, le navigateur de documents.
  2. m el TAB RET, pour m enu el isp ( TABà compléter), ou cliquez simplement sur le Elisplien avec votre souris.
  3. key bi TAB, puis n TAB RETpour terminer Key Binding Conventions.

Ou vous pouvez utiliser idans le manuel Elisp, pour compléter les entrées d'index:

  1. C-h i m el TAB RET.
  2. i key bi TAB, qui complète key bindinget vous montre deux possibilités: key bindinget key binding, conventions for. Tapez , TABpour terminer à la seconde, puis RETpour l'accepter.
A dessiné
la source
Il est préférable de suivre la convention de liaison C-cet de lettre aux commandes utilisateur. De cette façon, on peut être (presque) sûr de ne pas remplacer une autre liaison d'un mode majeur déjà installé ou à installer un jour dans le futur.
Tobias
1
@Tobias: Je ne sais pas ce que vous dites. Mieux que quoi? Toutes les conventions de liaison de clés doivent être suivies, y compris la non-liaison C-c+ LETTRE dans une bibliothèque tierce.
Drew
Vous avez correctement déclaré dans les premières phrases de votre réponse qu'il n'y a pas de règles strictes pour un usage privé. Néanmoins, il est conseillé de suivre les conventions pour les raccourcis clavier des utilisateurs pour les raisons que j'ai données dans mon premier commentaire. Vous pouvez peut-être ajouter une note à ce sujet sous votre règle de tout va dans la première section. C'est tout ce que je voulais dire, Drew. Cordialement,
Tobias
3
@Tobias: J'ai ajouté ce que je pense que vous dites; Merci. Mais il n'y a aucune convention à suivre par un utilisateur en ce qui concerne les raccourcis clavier. Les «conventions pour les raccourcis clavier des utilisateurs» dont vous parlez ne sont pas des conventions pour les utilisateurs. Ce sont des conventions de codage Lisp qui seront utilisées par d'autres. (Je sais que vous le savez. Je veux juste être clair, pour quiconque lit ceci.)
Drew
Qu'est-ce qu'un personnage de contrôle?
Didier A.
2

@ La réponse de Drew est beaucoup plus nuancée et détaillée.

C'est une question parfaitement valable! Il y a la convention que le C-xest réservé par emacs lui-même alors que le C-cpréfixe est utilisé pour les raccourcis clavier définis par l'utilisateur.

Jetez un oeil à cela , en particulier la section "Clés réservées". Je suis à peu près sûr que ces informations sont également indiquées dans le manuel emacs, mais je n'arrive pas à les trouver pour le moment. Les conventions sont décrites dans cette section du manuel emacs lisp.

Panagiotis Koutsourakis
la source
1
C-csuivi d'une lettre (minuscule ou majuscule) sans autres modificateurs est réservé aux utilisateurs. De nombreuses autres séquences de touches commençant par C-csont réservées aux modes principaux - en particulier ceux où le deuxième coup de touche est également modifié par la touche de commande.
Tobias
Vous avez raison, bien sûr. @Drew a mieux répondu à cette question.
Panagiotis Koutsourakis
comme M-xpour «exécuter une commande étendue, c'est la passerelle vers un grand nombre de choses sophistiquées que vous pouvez accomplir de manière interactive dans Emacs; il vous permet d'exécuter n'importe quelle fonction Elisp par son nom». a C-cet n'a C-xpas une description comme ça?
Pinocchio