Elixir запускает команду очистки с помощью System на macOS - PullRequest
0 голосов
/ 29 октября 2018

У меня есть реализация игры с эликсиром жизни, которая печатает «доску» в STDOUT, и я хочу очистить экран перед печатью следующей версии платы. Я проверил документацию по эликсиру и подумал, что это будет так же просто, как позвонить System.cmd("clear", []), но, похоже, это не сработает:

iex(1)> System.cmd("clear", [])
{"\e[H\e[2J", 0}

Похоже, возвращаются некоторые экранированные символы, но я не уверен, что это значит. Мой вопрос: почему не работает System.cmd("clear", [])? Или я ожидаю, что он должен очистить экран неправильно (и почему)?

Очевидно, iex имеет удобную функцию clear для очистки экрана, который работает в iex. Я обнаружил, что этот вспомогательный метод происходит из модуля IEx.Helpers, и теперь я могу запустить IEx.Helpers.clear, и он очищает экран перед печатью другой доски.

1 Ответ

0 голосов
/ 29 октября 2018

Как вы упомянули, лучший способ очистить экран - вызвать clear helper :

IEx.Helpers.clear

Чтобы ответить на ваш другой вопрос, это потому, что команда System.cmd на самом деле ничего не выводит на консоль, она возвращает ее (поэтому приложение Elixir может что-то с этим сделать). Возвращаемая строка (\e[H\e[2J) состоит из двух управляющих кодов ANSI, которые соответствуют "go home" (\e[H) и "clear" (\e[2J).

Вы можете проверить это сами. Вызов этого приведет к очистке экрана (и возврат :ok):

IO.puts("\e[H\e[2J")

Интересный Sidenote: Причина, по которой помощник очистки IEx не возвращает :ok, заключается в специальной функции , которую он вызывает в конце.

...