2020-02-03 07:00:36 +03:00
|
|
|
// Copyright (c) 2019-2020 Alexander Medvednikov. All rights reserved.
|
2019-07-01 18:09:22 +03:00
|
|
|
// Use of this source code is governed by an MIT license
|
|
|
|
// that can be found in the LICENSE file.
|
|
|
|
module term
|
|
|
|
// Sources for ANSI Control Sequences
|
|
|
|
// https://github.com/RajeshPatkarInstitute/Panim
|
|
|
|
// https://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html
|
|
|
|
// https://en.wikipedia.org/wiki/ANSI_escape_code
|
|
|
|
// Support for Windows
|
|
|
|
// https://en.wikipedia.org/wiki/ANSI.SYS
|
|
|
|
// #include <windows.h>
|
|
|
|
// C.SetConsoleMode(ENABLE_VIRTUAL_TERMINAL_INPUT)
|
|
|
|
// Setting cursor to the given position
|
|
|
|
// x is the x coordinate
|
|
|
|
// y is the y coordinate
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn set_cursor_position(x int, y int) {
|
|
|
|
print('\x1b[$y;$x' + 'H')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// n is number of cells
|
|
|
|
// direction: A is up / North
|
|
|
|
// direction: B is down / South
|
|
|
|
// direction: C is forward / East
|
|
|
|
// direction: D is backward / West
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn move(n int, direction string) {
|
|
|
|
print('\x1b[$n$direction')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn cursor_up(n int) {
|
2019-12-20 00:29:37 +03:00
|
|
|
move(n, 'A')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn cursor_down(n int) {
|
2019-12-20 00:29:37 +03:00
|
|
|
move(n, 'B')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn cursor_forward(n int) {
|
2019-12-20 00:29:37 +03:00
|
|
|
move(n, 'C')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn cursor_back(n int) {
|
2019-12-20 00:29:37 +03:00
|
|
|
move(n, 'D')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-09-14 23:54:14 +03:00
|
|
|
// type: 0 -> current cursor position to end of the screen
|
|
|
|
// type: 1 -> current cursor position to beginning of the screen
|
2019-07-01 18:09:22 +03:00
|
|
|
// type: 2 -> clears entire screen
|
|
|
|
// type: 3 -> clears entire screen and also delete scrollback buffer
|
|
|
|
pub fn erase_display(t string) {
|
2019-12-20 00:29:37 +03:00
|
|
|
print('\x1b[' + t + 'J')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_toend() {
|
|
|
|
erase_display('0')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_tobeg() {
|
|
|
|
erase_display('1')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_clear() {
|
|
|
|
erase_display('2')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_del_clear() {
|
|
|
|
erase_display('3')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-09-14 23:54:14 +03:00
|
|
|
// type: 0 -> current cursor position to end of the line
|
|
|
|
// type: 1 -> current cursor position to beginning of the line
|
2019-07-01 18:09:22 +03:00
|
|
|
// type: 2 -> clears entire line
|
|
|
|
// Note: Cursor position does not change
|
|
|
|
pub fn erase_line(t string) {
|
2019-12-20 00:29:37 +03:00
|
|
|
print('\x1b[' + t + 'K')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_line_toend() {
|
|
|
|
erase_line('0')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_line_tobeg() {
|
|
|
|
erase_line('1')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn erase_line_clear() {
|
|
|
|
erase_line('2')
|
2019-07-01 18:09:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Will make cursor appear if not visible
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn show_cursor() {
|
2019-07-01 18:09:22 +03:00
|
|
|
print('\x1b[?25h')
|
|
|
|
}
|
|
|
|
|
|
|
|
// Will make cursor invisible
|
2019-12-20 00:29:37 +03:00
|
|
|
pub fn hide_cursor() {
|
2019-07-01 18:09:22 +03:00
|
|
|
print('\x1b[?25l')
|
2019-07-16 18:59:07 +03:00
|
|
|
}
|