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
""
con0
o 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
?man
dice que soloers
se permiten banderas.-ei
-i
se introdujo en Bash 4.0 (lanzado en febrero de 2009) - "-i text Use TEXT como el texto inicial de Readline".cat
solo 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
vi
tiene un aliasvim
en 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
oninput
en su lugar.oninput
dispare cuandoEnter
se 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 text
Just some text>
Just some> text
usuario presiona Ctrl+Ccinco veces ElJust > text
usuario presiona Backspacecuatro veces ElJust any> text
usuario presiona El usuario presiona Out:anyJust any> text
EnterJust any text
Versión del editor en línea:
Si desea que el texto se edite en línea, agregue
,'\r',
al final de laprint
declaración:fuente
-
y+
para hacerlo, pero el editor no podría aceptar esos personajes entonces\t
y\v
?C + ENFERMEDADES, 573 bytes
Prueba
Just some text
.a
entonces yn
luegoy
.Enter
para terminar.Detallado
fuente
KEY_*
por los enteros respectivos para guardar algunos bytes?VBScript,
2340 bytesfuente
C #, 53 bytes
Donde
s
es 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)
.gets
introduce una cadena con un editor de línea.puts
lo emite.fuente
r.insert_text(s).redisplay
y 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=input
como la entrada crea en un HTML<input value=input
Y esta es la salida para la entrada de cadena
fuente
autofocus
para que tenga el cursor al principio. Otros elementos HTML que también puede editar si establece el atributocontenteditable
test></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
InputBox
almacena lo que se escribe como variables
y proporciona un mensaje inicial de la variable,1
que es el primer parámetro pasado.Send
envía pulsaciones de teclas a la ventana actual. En este caso, será el contenido des
.MsgBox
era una opción pero, para jugar al golf,Send
es 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óndea
va? Almacenar en una variable no es un método de salida válido .ZX Spectrum BASIC, 7 bytes
Trivial, incluido para completar (
INPUT
yPRINT
son tokens de un byte cada uno).fuente
a$
?a$
por entrada de teclado;a$
se sobreescribirá con laINPUT
palabra clave.SmileBASIC, 138 bytes
Crea una función
E
con 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