In: una cadena sin saltos de línea *
Permitir al usuario editar y enviar la línea
Out: la cadena modificada (opcionalmente con un salto de línea final)
El editor de línea debe, como mínimo, permitir al usuario:
mover un cursor visible hacia la izquierda y hacia la derecha
insertar y / o sobrescribir caracteres en la posición del cursor
eliminar caracteres en la posición del cursor
enviar la nueva cadena, es decir, dejar de editar, la cadena modificada se devolverá / imprimirá / mostrará / guardará ... (sin otro texto)
Apreciado, pero no requerido:
explicación de tu código.
enlace a un sitio de prueba en línea que puede demostrar su programa / función
Una imagen animada que demuestra el uso (TIO, por ejemplo, no permite la interactividad)
Nota:
las combinaciones de teclas son solo sugerencias
No se requiere GUI o estilo visual
Ejemplos
A continuación, el cursor se ilustra con _.
In: Just some text
permite al usuario editar: el
Just some text_ usuario presiona ←(tecla de flecha izquierda) nueve veces El
Just ̲some text usuario presiona Delcuatro veces El
Just ̲ text usuario presiona El usuario presiona Out:any
Just any_text Enter
Just any text
In: Remove me
permite al usuario editar: el
Remove me_ usuario presiona Backspacenueve veces El
_ usuario presiona Out: (cadena vacía)Enter
* Para evitar soluciones triviales del editor, esto debe proporcionarse a través de un método de entrada diferente al de los comandos de edición, o debe separarse de ellos mediante una nueva línea o similar.
fuente

Respuestas:
APL (Dyalog) , 5 bytes
Este es un tradfn, así que para usarlo, haga
Y luego llámelo usando
a, después de lo cual proporciona la cadena de inicio, y luego puede editar la cadena.fuente
JavaScript (ES6),
1514 bytes¡No entiendo por qué esto está recibiendo tantos votos positivos!
Guarde un byte gracias a la sugerencia de Adám de que muestre la entrada original en el
prompt.Intentalo
fuente
""con0o inclusos(para que el usuario pueda ver el texto original mientras lo edita, una característica ordenada).Bash 4.x, 25 caracteres
Ejecución de muestra:
(La línea 2 anterior era la edición interactiva, la línea 3 la salida del texto resultante).
fuente
-bash: read: -i: invalid option?mandice que soloersse permiten banderas.-ei-ise introdujo en Bash 4.0 (lanzado en febrero de 2009) - "-i text Use TEXT como el texto inicial de Readline".catsolo espera la transmisión entrante, para lo cual el shell no proporcionará funcionalidad de edición. Al menos no por defecto.Bash + Vi / Vim, 14 bytes
vitiene un aliasvimen macOS, no sé sobre otros sistemas operativos.fuente
:wq!o:x, así que creo que sí. OP es un poco confuso sobre lo que califica como eso.HTML + JavaScript (ES6),
77 6664 bytesHTML
JavaScript
Ahorró 10 bytes gracias a Jörg Hülsermann y 2 bytes gracias a Luke.
fuente
oninputen su lugar.oninputdispare cuandoEnterse presionae.which==13?alert(t.value):0->e.which-13||alert(t.value)guarda dos bytes.Python 2 ,
275200 bytesNo es un ganador, pero aquí está:
Explicación:
Funciona invirtiendo la entrada (con
[::-1]) y excluyendo e insertando caracteres en esa entrada invertida para que el cursor no tenga que moverse. Lo invierte nuevamente al imprimir.Uso:
Tecla [Tab] para mover a la derecha
[Ctrl + C] para mover a la izquierda
[Retroceso] para borrar
[Volver] para finalizar la edición
Cualquier otra tecla, se insertará en el texto
Ejemplo:
Usando el ejemplo de OP
In: el
Just some textJust some text>Just some> textusuario presiona Ctrl+Ccinco veces ElJust > textusuario presiona Backspacecuatro veces ElJust any> textusuario presiona El usuario presiona Out:anyJust any> textEnterJust any textVersión del editor en línea:
Si desea que el texto se edite en línea, agregue
,'\r',al final de laprintdeclaración:fuente
-y+para hacerlo, pero el editor no podría aceptar esos personajes entonces\ty\v?C + ENFERMEDADES, 573 bytes
Prueba
Just some text.aentonces ynluegoy.Enterpara terminar.Detallado
fuente
KEY_*por los enteros respectivos para guardar algunos bytes?VBScript,
2340 bytesfuente
C #, 53 bytes
Donde
ses una cadena para modificar y la salida es el nuevo valor.SendKeys.SendWait : envía las claves dadas a la aplicación activa y luego espera a que se procesen los mensajes.
o 74 bytes si no estamos en un contexto de formularios Windows Forms:
fuente
Ruby,
9192284 bytesEsto crea un enlace de entrada previa de Readline que inserta el texto sy luego vuelve a mostrar. Después de esto, irb se equivoca, así que asegúrese de ejecutar esto desde un archivo. Ejecutar como lambda, toma la cadena de entrada como argumento y devuelve la cadena de salida.
Esto usa la biblioteca Readline para realizar la edición de línea. Mi respuesta anterior solo permitía retroceder espacios.
Esto es muy, muy autoexplicativo.
Editar: me han pedido una explicación. Esto es equivalente aputs(gets).getsintroduce una cadena con un editor de línea.putslo emite.fuente
r.insert_text(s).redisplayy elimina lo siguiente;. Por cierto, según entiendo nuestra política, debe mencionar que su código se ejecutairb, porque de lo contrario necesitaría solicitarloReadline.PHP + HTML, 26 bytes
El navegador agrega automáticamente la etiqueta de cierre
$ _GET Usar una url
http://example.com?0=inputcomo la entrada crea en un HTML<input value=inputY esta es la salida para la entrada de cadena
fuente
autofocuspara que tenga el cursor al principio. Otros elementos HTML que también puede editar si establece el atributocontenteditabletest></input><script>alert("Hi");//some malicious code\n</script>Tcl, 17
Los intérpretes en línea simplemente apestan para demostrarlo, luego muestro algunas imágenes de un shell de comandos de Windows:
Caso de prueba 1
Caso de prueba 2
fuente
AHK , 32 bytes
InputBoxalmacena lo que se escribe como variablesy proporciona un mensaje inicial de la variable,1que es el primer parámetro pasado.Sendenvía pulsaciones de teclas a la ventana actual. En este caso, será el contenido des.MsgBoxera una opción pero, para jugar al golf,Sendes 2 bytes más corta.fuente
Comando de ventana inmediata de Excel VBA - 22 bytes
fuente
inputbox(0,,"Hi")guarda un byte[a1]=inputbox(0,,[a1])o algo, de lo contrario, ¿a dóndeava? Almacenar en una variable no es un método de salida válido .ZX Spectrum BASIC, 7 bytes
Trivial, incluido para completar (
INPUTyPRINTson tokens de un byte cada uno).fuente
a$?a$por entrada de teclado;a$se sobreescribirá con laINPUTpalabra clave.SmileBASIC, 138 bytes
Crea una función
Econ 1 argumento y 0 salidas. (La salida se muestra en la consola)Los caracteres escapados deberían ser los símbolos reales, pero no aparecerían aquí.
Control S:
Insertar / eliminar caracteres es al revés, por lo que es muy molesto de usar (pero aún debe cumplir con los requisitos).
fuente
Intérprete de comandos de Windows, 16 bytes
Esto es muy trivial; el intérprete de comandos es trivialmente un "editor de línea".
fuente
Commodore BASIC (C64Mini, C64 / 128, VIC-20, etc.) 179 bytes BASIC tokenizados
Esto debe escribirse en modo comercial (letras mayúsculas / minúsculas)
Permite la edición básica de texto + eliminar + nueva línea. El tamaño máximo de
a$todas las cadenas en Commodore BASIC es de 255 caracteres, por lo que cualquier cantidad mayor que eso bloqueará el programa. Encontraré una manera de hacer> 255 caracteres si es necesario.fuente