/ / ¿Cómo deshabilito los caracteres extraños del "modo de pegado entre corchetes" en el terminal predeterminado de Mac OS X? - linux, macos

¿Cómo deshabilito los caracteres extraños del "modo de pegado entre corchetes" en el terminal predeterminado de Mac OS X? - linux, macos

Encontré un problema con mi terminal donde, cuando pego texto, es prefijado por 00~ y sufijo con 01~.

Por ejemplo, resaltaré texto y presionaré Command-C. Entonces presiono Command-V en la terminal y veo que esos extraños caracteres aparecen al principio y al final del texto.

Por ejemplo, puedo resaltar text y pegarlo en la terminal. Entonces veo 00~text01~.

El texto puede ser desde cualquier lugar, incluso desde elTerminal en sí. No tengo ningún complemento de copiar / pegar instalado, esto es solo la copia / pegado normal. Estoy usando la Terminal Mac predeterminada sin ninguna modificación.

Hice algunas búsquedas en línea, aparentemente la Pastaajusta el texto en caracteres especiales para que ciertas aplicaciones vean que se trata de texto pegado y lo manejen correctamente. Sin embargo, el terminal no está manejando esto correctamente, y por lo tanto no está eliminando los caracteres extraños. Al parecer, este modo de pegado se denomina "Modo de pegado entre paréntesis" http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Bracketed-Paste-Mode

Encontré otra pregunta que dio una solución sobre cómo resolver este problema en una máquina Linux, pero después de probar esa solución todavía tengo el mismo problema.

¿Alguien puede decirme cómo puedo deshabilitar el modo de pegado entre corchetes para el terminal? ¿O dime la manera correcta de deshacerme de estos molestos personajes?

Respuestas

2 para la respuesta № 1

Es posible que esto no se aplique directamente a su problema, pero encontré que este síntoma probablemente se debió, en mi caso, a mi mcedit editor de elección (Midnight Commander)

Para aliviar el problema de errores, agregué la siguiente función a mi archivo .bashrc:

### vvv "function mcedit" is a fix-up for the ~0/~1 paste problem function mcedit() { command mcedit $@ ; printf "e[?2004l" ; }

Entonces "source .bashrc"

Ahora, cada vez que ejecuto "mcedit", se agrega automáticamente "printf" e [? 2004l "" cuando se cierra para restablecer el "Modo de pegado entre paréntesis"

Funciona para mí, YMMV.


0 para la respuesta № 2
  1. El texto ha llegado al búfer de copia del "sistema" (por ejemplo, X, MacOS / Aqua) desde algún lugar, tal vez desde el mismo terminal. El texto no se altera aquí.

  2. El texto se pega en la terminal; es decir, "sistema" se encarga de que el terminal (por ejemplo, xterm) recibe la secuencia de caracteres inalterada del búfer de copia. El terminal es consciente de que se trata de una entrada pegada, no de teclado.

  3. El terminal envía la secuencia char en elbúfer al programa que se ejecuta en primer plano (un shell, un editor, lo que sea). Para el programa, los datos recibidos no se pueden distinguir de la entrada del usuario a través del teclado.

Discusión

Esta transparencia (o la opacidad? lo que sea) a menudo es algo muy parecido al paradigma de Unix de tuberías transparentes en general. Pero a veces los programas podrían manejar mejor los datos si supieran que están pegados. Por ejemplo, un editor como vim podría desactivar la sangría automática. Después de todo, ¡el código probablemente ya esté sangrado!

Pasta entre corchetes

Entrar pasta entre corchetes. Por razones principales el paradigma dela tubería transparente de datos no puede ser alterada; pero los datos se pueden decorar con secuencias que normalmente no aparecerían en la entrada terminal para marcar su inicio y fin. Si el terminal está configurado así - para el xterm la configuración sería enviar ESC [ ? 2 0 0 4 l - Los datos pegados están entre corchetes con secuencias de escape: ESC [ 2 0 0 ~ <buffer contents> ESC [ 2 0 1 ~.

El programa en primer plano recibe estos datos "decorados", y depende del programa para manejarlos. Un programa ingenuo lo trata todo como entrada del usuario, que es lo que ve.

Remedios

Hay dos problemas en su caso: el terminal termina inesperadamente en el modo de pegado entre corchetes; y el programa receptor - probablemente el shell - no lo maneja.

  • Una solución es user83536 "s: Identifique el programa que deja el terminal en ese estado y llámelo a través de una envoltura que simplemente desactiva el modo de pegado entre corchetes una vez que el programa ha finalizado.

  • El programa probablemente intentó apagar el modo de pegado entre corchetes pero falló. Una razón puede ser que envía la secuencia de escape incorrecta. Intenta configurar el TERMINAL Variable de entorno al valor que mejor describe su terminal.

  • Trate de desactivar la pasta entre corchetes en la aplicación ofensiva. En vim uno diría set t_BE=. Eso evita que vim ponga el terminal en modo de pegado entre corchetes y cuando se establece en una sesión, envía el "modo de pegado entre corchetes" al terminal.

  • Abrazar la pasta entre corchetes. Parece ser una buena idea. Para el bash y otros programas usando readline uno pondría set enable-bracketed-paste on. Para vim se pueden seguir las sugerencias. aquí.