In: uma string sem quebras de linha *
Permite ao usuário editar e enviar a linha
Out: a string modificada (opcionalmente com uma quebra de linha à direita)
O editor de linha deve, no mínimo, permitir ao usuário:
mover um cursor visível para a esquerda e direita
insira e / ou substitua caracteres na posição do cursor
remover caracteres na posição do cursor
envie a nova string, ou seja, interrompa a edição para que a string modificada seja retornada / impressa / exibida / salva ... (sem nenhum outro texto)
Apreciado, mas não obrigatório:
explicação do seu código.
link para um site de testes on-line que pode demonstrar seu programa / função
uma imagem animada demonstrando uso (o TIO, por exemplo, não permite interatividade)
Nota:
ligações de teclas são apenas sugestões
GUI ou estilo visual não é necessário
Exemplos
A seguir, o cursor é ilustrado com _
.
In: Just some text
permite que o usuário edite: O
Just some text_
usuário pressiona ←(tecla de seta esquerda) nove vezes O
Just ̲some text
usuário pressiona Delquatro vezes O
Just ̲ text
usuário pressiona O usuário pressiona Out:any
Just any_text
Enter
Just any text
In: Remove me
permite que o usuário edite: O
Remove me_
usuário pressiona Backspacenove vezes O
_
usuário pressiona Out: (string vazia)Enter
* Para evitar soluções triviais de editor, isso deve ser fornecido por um método de entrada diferente dos comandos de edição ou deve ser separado deles por uma nova linha ou similar.
fonte
Respostas:
APL (Dyalog) , 5 bytes
Este é um tradfn, então, para usá-lo, faça
E, em seguida, chame-o usando
a
, após o qual você fornecerá a sequência inicial e poderá editar a sequência.fonte
JavaScript (ES6),
1514 bytesNão entendo por que isso está recebendo tantos votos positivos!
Salvei um byte graças à sugestão de Adám de exibir a entrada original no
prompt
.Tente
fonte
""
por0
ou mesmos
(para que o usuário ainda possa ver o texto original durante a edição - um recurso interessante).Bash 4.x, 25 caracteres
Exemplo de execução:
(A linha 2 acima foi a edição interativa, a linha 3 a saída do texto resultante.)
fonte
-bash: read: -i: invalid option
?man
diz apenas queers
são permitidos sinalizadores.-ei
-i
foi introduzido no Bash 4.0 (lançado em fevereiro de 2009) - “-i texto Use TEXT como o texto inicial do Readline”.cat
aguarda apenas o fluxo de entrada, para o qual o shell não fornecerá funcionalidade de edição. Pelo menos não por padrão.Bash + Vi / Vim, 14 bytes
vi
é aliasvim
no macOS, não conheço outros sistemas operacionais.fonte
:wq!
ou:x
, então acho que sim. OP é um pouco claro sobre o que se qualifica como isso.HTML + JavaScript (ES6),
77 6664 bytesHTML
Javascript
Economizou 10 bytes graças a Jörg Hülsermann e 2 bytes graças a Luke.
fonte
oninput
.oninput
é acionado quandoEnter
é pressionadoe.which==13?alert(t.value):0
->e.which-13||alert(t.value)
salva dois bytes.Python 2 ,
275200 bytesNão é um vencedor, mas aqui está:
Explicação:
Ele funciona revertendo a entrada (com
[::-1]
) e excluindo e inserindo caracteres nessa entrada revertida para que o cursor não precise se mover. Reverte novamente ao imprimir.Uso:
Tecla [Tab] para mover para a direita
[Ctrl + C] para mover para a esquerda
[Backspace] para apagar
[Return] para concluir a edição.
Qualquer outra tecla será inserida no texto
Exemplo:
Usando o exemplo do OP
In: O
Just some text
Just some text>
Just some> text
usuário pressiona Ctrl+Ccinco vezes OJust > text
usuário pressiona Backspacequatro vezes OJust any> text
usuário pressiona O usuário pressiona Out:anyJust any> text
EnterJust any text
Versão do editor embutido:
Se você deseja que o texto seja editado em linha, acrescente
,'\r',
no final daprint
declaração:fonte
-
e+
a fazê-lo, mas o editor não seria capaz de aceitar esses personagens, em seguida\t
e\v
?C + NCURSES, 573 bytes
Teste
Just some text
.a
entãon
entãoy
.Enter
para finalizar.Detalhado
fonte
KEY_*
pelos respectivos números inteiros para salvar alguns bytes?VBScript,
2340 bytesfonte
C #, 53 bytes
Onde
s
está uma string para modificar e a saída é o novo valor.SendKeys.SendWait : envia as chaves fornecidas para o aplicativo ativo e aguarda o processamento das mensagens.
ou 74 bytes se não estivermos em um contexto do Windows Forms:
fonte
Ruby,
9192284 bytesIsso cria um gancho de pré-entrada Readline que insere o texto e, em seguida, é exibido novamente. Depois disso, o irb fica bagunçado, portanto, execute-o em um arquivo. Executar como um lambda, pega a sequência de entrada como argumento e retorna a sequência de saída.
Isso usa a biblioteca Readline para executar a edição de linha. Minha resposta anterior permitia apenas backspaces.
Isso é realmente, realmente auto-explicativo.
Edit: me pediram uma explicação. Isso é equivalente aputs(gets)
.gets
insere uma string com um editor de linha.puts
gera isso.fonte
r.insert_text(s).redisplay
e remova o seguinte;
. BTW, como eu entendo nossa política, você deve mencionar que seu código é executadoirb
, porque, caso contrário, você precisaria fazêReadline
-lo.PHP + HTML, 26 bytes
O navegador adiciona automaticamente a tag de fechamento
$ _GET Usando um URL como
http://example.com?0=input
Entrada Cria em um HTML<input value=input
E esta é a saída para a entrada de string
fonte
autofocus
para ter o cursor no início. Outros elementos HTML você também pode editar se você definir o atributocontenteditable
test></input><script>alert("Hi");//some malicious code\n</script>
Tcl, 17
Intérpretes on-line são péssimos para demonstrá-lo, então mostro algumas imagens de um shell de comando do Windows:
Caso de teste 1
Caso de teste 2
fonte
AHK , 32 bytes
InputBox
armazena o que for digitado como a variávels
e fornece um prompt inicial da variável,1
que é o primeiro parâmetro passado.Send
envia pressionamentos de tecla para a janela atual. Nesse caso, será o conteúdo des
.MsgBox
era uma opção, mas, para o golfe,Send
é 2 bytes mais curto.fonte
Comando da janela imediata do VBA do Excel - 22 bytes
fonte
inputbox(0,,"Hi")
salva um byte[a1]=inputbox(0,,[a1])
ou algo assim, para ondea
vai? Armazenar em uma variável não é um método de saída válido .ZX Spectrum BASIC, 7 bytes
Trivial, incluído para ser completo (
INPUT
ePRINT
possui tokens de um byte cada).fonte
a$
?a$
pela entrada do teclado;a$
será sobrescrito com aINPUT
palavra - chave.SmileBASIC, 138 bytes
Cria uma função
E
com 1 argumento e 0 saídas. (A saída é exibida no console)Os caracteres de escape devem ser os símbolos reais, mas não apareceriam aqui.
Controles:
A inserção / exclusão de caracteres é invertida, portanto, é muito chato de usar (mas ainda deve atender aos requisitos).
fonte
Intérprete de comando do Windows, 16 bytes
Isso é muito trivial; o intérprete de comando é trivialmente um "editor de linha".
fonte
Commodore BASIC (C64Mini, C64 / 128, VIC-20 etc ...) 179 bytes BASIC tokenizados
Isso deve ser digitado no modo comercial (caracteres maiúsculos / minúsculos)
Permite edição básica de texto + excluir + nova linha. O tamanho máximo de
a$
todas as seqüências de caracteres no Commodore BASIC é de 255 caracteres; portanto, mais do que isso, travará o programa. Vou encontrar uma maneira de fazer> 255 caracteres, se necessário.fonte