empêcher la pâte multiligne dans bash

10

J'utilise souvent ctrl+cpour copier du texte à partir d'une application graphique, puis le coller dans mon émulateur de terminal (terminateur), en utilisant le menu contextuel et le coller. Parfois, j'oublie que le presse-papiers contient plusieurs lignes qui, une fois collées dans bash, "exécutent" chaque ligne

Existe-t-il une solution pour empêcher complètement la pâte multiligne?

Martin Vegter
la source
collez-le d'abord dans le bloc-notes, pour voir ce que vous avez, puis si c'est OK, collez-le dans votre application
Skaperen
1
en bash, exécutez la commande sleep 999999puis faites le collage si cela semble correct. la commande sleep ne lit pas les lignes et elles sont supprimées lorsque vous appuyez sur ctrl+c.
Skaperen
2
Pertinent: security.stackexchange.com/q/39118
Stéphane Chazelas
1
@Otheus, printf '\e[?2004h'dans la plupart des émulateurs de terminaux de type xterm, permet un mode de collage entre crochets où le terminal met le texte collé entre crochets afin que les applications puissent détecter où le collage commence et où il se termine. xterm prend également en charge un autre mode avec \e[?2005hlequel tous les caractères collés sont préfixés ^V(compris par de nombreuses applications et la discipline de ligne tty comme litteral-next).
Stéphane Chazelas

Réponses:

5

Cette réponse n'est pas la plus spécifique à la question de l'utilisateur. Veuillez consulter ma deuxième réponse. Je laisse cela ici parce qu'il aborde la question plus générale .

Par les commentaires à votre message original, vous avez besoin (1) un émulateur de terminal qui supports entre crochets coller et (2) support correspondant pour tout ce qui est en cours d' exécution dans le terminal, à savoir vim, bash, zsh. Émulateurs de terminaux prenant en charge la pâte entre crochets (liste à mettre à jour en fonction des commentaires de cet article):

  • xterm - depuis ??
  • gnome-terminal - depuis ??
  • putty - depuis 0.63 (date de sortie 2013-08-06)

Applications prenant en charge le mode entre crochets:

  • vim
  • zsh

Pour bash, StéphaneChazelas a mis en place un script shell pour faciliter la détection de ce mode et prendre les mesures appropriées.

Une réponse plus spécifique - empêchant les lignes de se couper - est sans réponse sans connaître le programme unix qui s'exécute lorsque vous appuyez sur coller.

Un gestionnaire de presse-papiers peut-être ce dont vous avez besoin.

Otheus
la source
Le script il ne détecte pas la pâte entre crochets, il est un perl script qui émule une 3ème sous forme de pâte entre crochets qui ne nécessite pas de soutien dans l'application autre que les besoins de l' application pour comprendre ^ V comme-litéral suivant (ce script serait effectivement répondre à cette question mais aurait probablement besoin d'être amélioré, c'était juste un PoC).
Stéphane Chazelas
@ StéphaneChazelas n'hésitez pas à éditer / améliorer mon post. :) "L'application doit comprendre en ^Vtant que literal-next. Mais comment ^Ventrer dans le flux d'entrée de l'application?
Otheus
Il l'obtient si le périphérique tty interne n'est pas en mode icanon (comme bashl'invite de readline le verra (et le traitera comme littéral-suivant)). Si en mode icanon, la discipline de ligne de ce périphérique tty interne le supprimera (tant que le lnextcaractère est ^V), tout comme lorsque vous tapez Ctrl-V X manuellement ..
Stéphane Chazelas
1
Si vous n'utilisez pas ce script, rien n'est inséré ^Vsauf si vous utilisez le quoted pastemode xterm (activé par l'envoi \e[?2005h). Ce perlscript pourrait être adapté pour qu'il supprime tout sauf la première ligne d'un collage multiligne (mais pas de manière fiable pour les pâtes volumineuses), mais tel qu'il est déjà, car il cite la nouvelle ligne pour readline (comme si vous aviez appuyé sur Ctrl- V Ctrl-J), cela empêche les lignes d'être exécutées (elles sont juste ajoutées au tampon d'édition et vous devez toujours appuyer sur Entrée pour les exécuter).
Stéphane Chazelas
4
Quelle deuxième réponse?
Xiao