In: строка без разрывов строки *
Разрешить пользователю редактировать и отправлять строку
Out: измененную строку (опционально с завершающим переводом строки)
Редактор строк должен как минимум позволить пользователю:
переместить видимый курсор влево и вправо
вставлять и / или перезаписывать символы в позиции курсора
удалить символы в позиции курсора
отправить новую строку, т.е. прекратить редактирование, заставить измененную строку вернуть / распечатать / отобразить / сохранить… (без другого текста)
Ценится, но не обязательно:
объяснение вашего кода.
ссылка на сайт онлайн-тестирования, который может продемонстрировать вашу программу / функцию
анимированное изображение, демонстрирующее использование (например, TIO не допускает интерактивность)
Замечания:
привязки клавиш только предложения
GUI или визуальный стиль не требуется
Примеры
Далее курсор обозначен с помощью _
.
In: Just some text
разрешить пользователю редактировать:
Just some text_
пользователь нажимает ←(левая клавиша со стрелкой) девять раз
Just ̲some text
пользователь нажимает Delчетыре раза
Just ̲ text
пользователь нажимает пользователь нажимает Out:any
Just any_text
Enter
Just any text
In: Remove me
разрешить пользователю редактирование:
Remove me_
пользователь нажимает Backspaceдевять раз.
_
Пользователь нажимает Out: (пустая строка)Enter
* Чтобы избежать тривиальных решений редактора, это должно быть либо предоставлено с помощью другого метода ввода, чем команды редактирования, или должно быть отделено от них новой строкой или аналогичным.
Ответы:
APL (Dyalog) , 5 байтов
Это tradfn, поэтому, чтобы использовать его, сделайте
И затем вызвать его с помощью
a
, после чего вы вводите начальную строку, а затем вы можете редактировать строку.источник
JavaScript (ES6),
1514 байтЯ не понимаю, почему так много голосов!
Сохраненный байт благодаря предложению Адама , чтобы я отобразил исходный ввод в
prompt
.Попытайся
источник
""
с0
или дажеs
(так что пользователь все еще может увидеть оригинальный текст , а редактирование - аккуратный функция).Bash 4.x, 25 символов
Образец прогона:
(Строка 2 выше - интерактивное редактирование, строка 3 - вывод полученного текста.)
источник
-bash: read: -i: invalid option
?man
говорит толькоers
разрешенные флаги.-ei
-i
был представлен в Bash 4.0 (выпущен в феврале 2009 г.) - «-i text Использовать TEXT в качестве исходного текста для Readline».cat
просто ожидает входящий поток, для которого оболочка не будет предоставлять никаких функций редактирования. По крайней мере, не по умолчанию.Bash + Vi / Vim, 14 байтов
vi
vim
на MacOS есть псевдоним , я не знаю о других ОС.источник
:wq!
или:x
, так что я так думаю. ОП немного неясно, что можно отнести к этому.HTML + JavaScript (ES6),
77 6664 байтаHTML
JavaScript
Сэкономили 10 байт благодаря Йоргу Хюльсерманну и 2 байта благодаря Люку.
источник
oninput
вместо этого.oninput
срабатывает приEnter
нажатииe.which==13?alert(t.value):0
->e.which-13||alert(t.value)
сохраняет два байта.Python 2 ,
275200 байтНе победитель, но вот он:
Объяснение:
Он работает путем реверсирования ввода (с помощью
[::-1]
), исключения и вставки символов в этот инвертированный ввод, чтобы курсор не перемещался. Снова переворачивает при печати.Использование:
Клавиша [Tab] для перемещения вправо
[Ctrl + C] для перемещения влево
[Backspace] для стирания
[Return] для завершения редактирования
Любая другая клавиша, будет вставлена в текст
Пример:
Используя пример OP
In:
Just some text
Just some text>
Just some> text
пользователь нажимает Ctrl+Cпять разJust > text
пользователь нажимает Backspaceчетыре разаJust any> text
пользователь нажимает пользователь нажимает Out:anyJust any> text
EnterJust any text
Версия встроенного редактора:
Если вы хотите, чтобы текст редактировался внутри строки, добавьте
,'\r',
в концеprint
оператора:источник
-
и+
для этого, но редактор не смог бы принять эти символы тогда\t
а\v
?C + NCURSES, 573 байта
Тестовое задание
Just some text
.a
затем,n
затемy
.Enter
чтобы прекратить.Детальнее
источник
KEY_*
на соответствующие целые числа, чтобы сохранить несколько байтов?VBScript,
2340 байтисточник
C #, 53 байта
Где
s
строка, которую нужно изменить, и вывод нового значения.SendKeys.SendWait : отправляет данные ключи активному приложению, а затем ожидает обработки сообщений.
или 74 байта, если мы не в контексте Windows Forms:
источник
Рубин,
9192284 байтаЭто создает хук предварительного ввода Readline, который вставляет текст s, а затем снова отображается. После этого irb испортится, поэтому обязательно запустите его из файла. Запускается как лямбда, он принимает входную строку в качестве аргумента и возвращает выходную строку.
Это использует библиотеку Readline для выполнения редактирования строки. Мой предыдущий ответ позволял только пробелы.
Это действительно очень понятно.
Изменить: меня попросили объяснить. Это эквивалентноputs(gets)
.gets
вводит строку с помощью редактора строк.puts
выводит это.источник
r.insert_text(s).redisplay
и удалите следующее;
. Кстати, как я понимаю нашу политику, вы должны упомянуть, что ваш код работаетirb
, потому что в противном случае вам потребуется его использованиеReadline
.PHP + HTML, 26 байт
Браузер автоматически добавляет закрывающий тег
$ _GET Использование URL-адреса, подобного тому,
http://example.com?0=input
как Input создает в HTML<input value=input
И это выход для ввода строки
источник
autofocus
чтобы курсор находился в начале. Другие элементы HTML, которые вы также можете редактировать, если установите атрибутcontenteditable
test></input><script>alert("Hi");//some malicious code\n</script>
Tcl, 17
Онлайн-переводчики просто отстой, чтобы продемонстрировать это, а затем я демонстрирую некоторые изображения из командной оболочки Windows:
Тестовый пример 1
Контрольный пример 2
источник
AHK , 32 байта
InputBox
сохраняет все, что введено в качестве переменной,s
и выдает начальную подсказку для переменной,1
которая является первым переданным параметром.Send
отправляет нажатия клавиш в текущее окно. В этом случае это будет содержимоеs
.MsgBox
был вариант, но для игры в гольф наSend
2 байта короче.источник
Команда непосредственного окна Excel VBA - 22 байта
источник
inputbox(0,,"Hi")
сохраняет байт[a1]=inputbox(0,,[a1])
или что-то, в противном случае, кудаa
идти? Хранение в переменной не является допустимым методом вывода .ZX Spectrum BASIC, 7 байтов
Тривиально, включено для полноты (
INPUT
иPRINT
каждый токен по одному байту).источник
a$
?a$
с клавиатуры;a$
будетINPUT
перезаписано ключевым словом.SmileBASIC, 138 байт
Создает функцию
E
с 1 аргументом и 0 выходами. (Вывод отображается в консоли)Экранированные символы должны быть реальными символами, но они не будут отображаться здесь.
Управление:
Вставка / удаление символов - это задом наперед, поэтому это очень раздражает в использовании (но все равно должно соответствовать требованиям).
источник
Интерпретатор команд Windows, 16 байт
Это очень тривиально; интерпретатор команд - это тривиальный редактор строк.
источник
Commodore BASIC (C64Mini, C64 / 128, VIC-20 и т. Д.) 179 токенов BASIC
Это должно быть набрано в бизнес-режиме (прописные / строчные буквы)
Позволяет базовое редактирование текста + удаление + новая строка. Максимальный размер
a$
как и всех строк в Commodore BASIC составляет 255 символов, так что больше, чем это может привести к сбою программы. Я найду способ сделать> 255 символов, если это необходимо.источник