2016-08-12 2 views
1

J'écris un shell * nix, je veux soutenir la combinaison de touches de Ctrl - Entrez. Et la bibliothèque que j'utilise est GNU readline.comment lier Ctrl + Entrée lors de l'utilisation de la bibliothèque "readline"?

J'ai passé plusieurs heures dessus, mais je ne trouve pas le chemin.

Je peux lier Entrez avec succès, comme:

========= ~/.inputrc ===============

"\C-M": "sdf" 

====================================

Lorsque je presse Entrez, J'ai reçu un "sdf", comme prévu.

Je peux aussi lier Esc, Entrez avec succès (note, voici série clé, pas la combinaison), comme:

========= ~/.inputrc === ============

"\e\C-M": "sdf" 

=============================== =====

Lorsque j'ai appuyé sur Esc, puis sur Entrez, "sdf" a été répercuté comme prévu.

Cependant, la ligne suivante ne peut pas produire un valide Ctrl - Entrée combinaison:

========= ~/.inputrc ========== =====

"\C\C-M": "sdf" 

====================================

Et, "\ C- \ CM" ne fonctionne pas aussi.

Voici deux questions liées:

how to bind the 'Enter key'

How to bind Ctrl-Enter in fish?

Quelqu'un peut-il me aider?

+0

La réponse à la deuxième question liée devrait vous indiquer que ce n'est pas vraiment possible. –

+0

La différence entre Esc et Control est que 'Esc' peut être pressé et relâché avant la prochaine touche. '\ C-M' fonctionne parce que la plupart des terminaux génèrent ASCII 13 lorsque vous appuyez sur Entrée ou sur Ctrl-m. Vous devez maintenir la touche de contrôle enfoncée avec une autre touche pour qu'elle signifie n'importe quoi; qu'est-ce que cela signifierait de le maintenir deux fois? – chepner

+0

"Qu'est-ce que cela signifierait de le maintenir deux fois?" – weiweishuo

Répondre

0

Vous ne mentionnez pas quel émulateur de terminal que vous utilisez - ce qui compte, parce qu'à la fin, il est le terminal qui décide ce que votre programme lit lorsque vous appuyez sur CTRL + ENTER

A façon de faire ce travail (en supposant que vous utilisez xterm):

  • faire xterm envoyer par exempleCTRL + k lorsque vous appuyez sur CTRL + ENTER, en ajoutant une ligne dans votre .Xdefaults:

    XTerm.vt100.translations: #override Ctrl<Key>Return: string("\013")

  • Bind ce à tout ce que vous voulez dans .inputrc:

    "\C-k": "sdf"

Pas très élégant, car cela ne fonctionne que dans xterm. Mais, autant que je peux voir, la seule façon d'obtenir ce que vous voulez.

+0

Cela a le désavantage considérable de ne pas vous laisser utiliser Ctrl-K, qui est couramment utilisé par certaines applications. Peut-être que vous pourriez mapper Ctrl-Enter à une autre séquence, pas seulement un caractère. Mais vous ne pouvez probablement pas vous attendre à ce que les autres utilisateurs configurent le même mapping (même en supposant qu'ils utilisent xterm). Il pourrait être raisonnable que l'OP ne s'attend pas à ce que quelqu'un d'autre utilise l'application. –