-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>>.