Current section
Files
Jump to
Current section
Files
src/etch@terminal.erl
-module(etch@terminal).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/etch/terminal.gleam").
-export([enter_raw/0, window_size/0, clear/1, set_title/1, disable_line_wrap/0, enable_line_wrap/0, scroll_up/1, scroll_down/1, enter_alternative/0, leave_alternative/0, set_size/2]).
-export_type([clear_type/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" This module provides terminal associated functions like\n"
" entering raw mode, alternative screen, setting title etc.\n"
).
-type clear_type() :: all |
purge |
from_cursor_down |
from_cursor_up |
current_line |
until_new_line.
-file("src/etch/terminal.gleam", 26).
?DOC(
" Enters raw mode.\n"
" It is prefered not to use this directly. See [`EnterRaw`](command.html#EnterRaw).\n"
).
-spec enter_raw() -> nil.
enter_raw() ->
terminal_ffi:enter_raw().
-file("src/etch/terminal.gleam", 30).
?DOC(" Returns current window size.\n").
-spec window_size() -> {integer(), integer()}.
window_size() ->
terminal_ffi:window_size().
-file("src/etch/terminal.gleam", 34).
?DOC(
" Clears the terminal. See [`ClearType`](terminal.html#ClearType).\n"
" It is prefered not to use this directly. See [`Clear`](command.html#Clear).\n"
).
-spec clear(clear_type()) -> binary().
clear(T) ->
case T of
all ->
<<"\x{001b}["/utf8, "2J"/utf8>>;
purge ->
<<"\x{001b}["/utf8, "3J"/utf8>>;
from_cursor_down ->
<<"\x{001b}["/utf8, "J"/utf8>>;
from_cursor_up ->
<<"\x{001b}["/utf8, "1J"/utf8>>;
current_line ->
<<"\x{001b}["/utf8, "2K"/utf8>>;
until_new_line ->
<<"\x{001b}["/utf8, "K"/utf8>>
end.
-file("src/etch/terminal.gleam", 47).
?DOC(
" Sets terminal title.\n"
" It is prefered not to use this directly. See [`SetTitle`](command.html#SetTitle).\n"
).
-spec set_title(binary()) -> binary().
set_title(S) ->
<<<<<<"\x{001b}"/utf8, "]0;"/utf8>>/binary, S/binary>>/binary,
"\x{0007}"/utf8>>.
-file("src/etch/terminal.gleam", 53).
?DOC(
" Disable line wrap.\n"
" It is prefered not to use this directly. See [`DisableLineWrap`](command.html#DisableLineWrap).\n"
).
-spec disable_line_wrap() -> binary().
disable_line_wrap() ->
<<"\x{001b}["/utf8, "?7l"/utf8>>.
-file("src/etch/terminal.gleam", 59).
?DOC(
" Enable line wrap.\n"
" It is prefered not to use this directly. See [`EnableLineWrap`](command.html#EnableLineWrap).\n"
).
-spec enable_line_wrap() -> binary().
enable_line_wrap() ->
<<"\x{001b}["/utf8, "?7h"/utf8>>.
-file("src/etch/terminal.gleam", 65).
?DOC(
" Scroll N rows up.\n"
" It is prefered not to use this directly. See [`ScrollUp`](command.html#ScrollUp).\n"
).
-spec scroll_up(integer()) -> binary().
scroll_up(N) ->
<<<<"\x{001b}["/utf8, (erlang:integer_to_binary(N))/binary>>/binary,
"S"/utf8>>.
-file("src/etch/terminal.gleam", 71).
?DOC(
" Scroll N rows down.\n"
" It is prefered not to use this directly. See [`ScrollDown`](command.html#ScrollDown).\n"
).
-spec scroll_down(integer()) -> binary().
scroll_down(N) ->
<<<<"\x{001b}["/utf8, (erlang:integer_to_binary(N))/binary>>/binary,
"T"/utf8>>.
-file("src/etch/terminal.gleam", 77).
?DOC(
" Enter alternative screen.\n"
" It is prefered not to use this directly. See [`EnterAlternative`](command.html#EnterAlternative).\n"
).
-spec enter_alternative() -> binary().
enter_alternative() ->
<<"\x{001b}["/utf8, "?1049h"/utf8>>.
-file("src/etch/terminal.gleam", 83).
?DOC(
" Leave alternative screen.\n"
" It is prefered not to use this directly. See [`LeaveAlternative`](command.html#LeaveAlternative).\n"
).
-spec leave_alternative() -> binary().
leave_alternative() ->
<<"\x{001b}["/utf8, "?1049l"/utf8>>.
-file("src/etch/terminal.gleam", 90).
?DOC(
" Set window size. It does not work on most modern terminals\n"
" due to security issues.\n"
" It is prefered not to use this directly. See [`SetSize`](command.html#SetSize).\n"
).
-spec set_size(integer(), integer()) -> binary().
set_size(X, Y) ->
<<<<<<<<<<"\x{001b}["/utf8, "8;"/utf8>>/binary,
(erlang:integer_to_binary(X))/binary>>/binary,
";"/utf8>>/binary,
(erlang:integer_to_binary(Y))/binary>>/binary,
"t"/utf8>>.