diff --git a/repos/gems/run/cpu_sampler_noux.run b/repos/gems/run/cpu_sampler_noux.run
index 6b6f4f96e..63566ed70 100644
--- a/repos/gems/run/cpu_sampler_noux.run
+++ b/repos/gems/run/cpu_sampler_noux.run
@@ -196,7 +196,7 @@ append config {
-
+
diff --git a/repos/gems/run/sculpt/block_runtime.config b/repos/gems/run/sculpt/block_runtime.config
index 81c5d282c..286465ba9 100644
--- a/repos/gems/run/sculpt/block_runtime.config
+++ b/repos/gems/run/sculpt/block_runtime.config
@@ -58,7 +58,7 @@
-
+
diff --git a/repos/gems/run/sculpt/default_noux_subinit.config b/repos/gems/run/sculpt/default_noux_subinit.config
index 9e3ef65e3..f0124b5d6 100644
--- a/repos/gems/run/sculpt/default_noux_subinit.config
+++ b/repos/gems/run/sculpt/default_noux_subinit.config
@@ -43,7 +43,7 @@
-
+
diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config
index 4f193d125..23ef2eb9c 100644
--- a/repos/gems/run/sculpt/leitzentrale.config
+++ b/repos/gems/run/sculpt/leitzentrale.config
@@ -102,7 +102,7 @@
-
+
@@ -156,7 +156,7 @@
-
+
diff --git a/repos/gems/run/sculpt/load_runtime.config b/repos/gems/run/sculpt/load_runtime.config
index 48d171d06..707d6f7f1 100644
--- a/repos/gems/run/sculpt/load_runtime.config
+++ b/repos/gems/run/sculpt/load_runtime.config
@@ -63,7 +63,7 @@
-
+
diff --git a/repos/gems/run/terminal_decoder.run b/repos/gems/run/terminal_decoder.run
deleted file mode 100644
index 2e416cd07..000000000
--- a/repos/gems/run/terminal_decoder.run
+++ /dev/null
@@ -1,25 +0,0 @@
-build "core init test/terminal_decoder"
-
-create_boot_directory
-
-install_config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
-
-build_boot_image "core ld.lib.so init test-terminal_decoder"
-
-run_genode_until "--- finished test ---" 10
-
-puts "Test succeeded"
diff --git a/repos/gems/run/terminal_mux.run b/repos/gems/run/terminal_mux.run
index 5d07794c4..78e3199f3 100644
--- a/repos/gems/run/terminal_mux.run
+++ b/repos/gems/run/terminal_mux.run
@@ -80,7 +80,7 @@ append config {
-
+
diff --git a/repos/gems/src/test/terminal_decoder/main.cc b/repos/gems/src/test/terminal_decoder/main.cc
deleted file mode 100644
index 864b9b798..000000000
--- a/repos/gems/src/test/terminal_decoder/main.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * \brief Test for decoding terminal input
- * \author Norman Feske
- * \date 2011-07-05
- */
-
-/*
- * Copyright (C) 2011-2017 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-
-/* Terminal includes */
-#include
-
-
-class Static_character_screen : public Terminal::Character_screen
-{
- private:
-
- Terminal::Character_array &_char_array;
- Terminal::Boundary _boundary;
- Terminal::Position _cursor_pos;
-
- public:
-
- Static_character_screen(Terminal::Character_array &char_array)
- : _char_array(char_array), _boundary(_char_array.boundary()) { }
-
- void dump() const;
-
-
- /********************************
- ** Character_screen interface **
- ********************************/
-
- void output(Terminal::Character c)
- {
- if (c.ascii() > 0x10)
- _char_array.set(_cursor_pos, c);
- _cursor_pos.x++;
- if (_cursor_pos.x >= _boundary.width) {
- _cursor_pos.x = 0;
- _cursor_pos.y++;
- }
- if (_cursor_pos.y >= _boundary.height) {
- _cursor_pos.y = _boundary.height - 1;
- }
- }
-
- void civis()
- {
- }
-
- void cnorm()
- {
- }
-
- void cvvis()
- {
- }
-
- void cpr()
- {
- }
-
- void csr(int, int)
- {
- }
-
- void cub(int)
- {
- }
-
- void cuf(int)
- {
- if (_cursor_pos.x >= _boundary.width)
- _cursor_pos.x++;
-//
-// _cursor_pos = _cursor_pos + Terminal::Offset(1, 0);
- }
-
- void cup(int y, int x)
- {
- using namespace Genode;
- x = max(0, min(x, _boundary.width - 1));
- y = max(0, min(y, _boundary.height - 1));
- _cursor_pos = Terminal::Position(x, y);
- }
-
- void cuu1()
- {
-// if (_cursor_pos.y > 0)
-// _cursor_pos.y--;
- }
-
- void dch(int)
- {
- }
-
- void dl(int)
- {
- }
-
- void ech(int)
- {
- }
-
- void ed()
- {
- }
-
- void el()
- {
- }
-
- void el1()
- {
- }
-
- void home()
- {
- _cursor_pos = Terminal::Position(0, 0);
- }
-
- void hpa(int x)
- {
- }
-
- void hts()
- {
- }
-
- void ich(int)
- {
- }
-
- void il(int)
- {
- }
-
- void oc()
- {
- }
-
- void op()
- {
- }
-
- void rc()
- {
- }
-
- void ri()
- {
- }
-
- void ris()
- {
- }
-
- void rmam()
- {
- }
-
- void rmir()
- {
- }
-
- void setab(int)
- {
- }
-
- void setaf(int)
- {
- }
-
- void sgr(int)
- {
- }
-
- virtual void sgr0()
- {
- }
-
- void sc()
- {
- }
-
- void smam()
- {
- }
-
- void smir()
- {
- }
-
- void tbc()
- {
- }
-
- void u6(int, int)
- {
- }
-
- void u7()
- {
- }
-
- void u8()
- {
- }
-
- void u9()
- {
- }
-
- void vpa(int y)
- {
- }
-};
-
-
-void Static_character_screen::dump() const
-{
- using namespace Terminal;
-
- Genode::log("--- screen dump follows ---");
-
- Boundary const boundary = _char_array.boundary();
- for (int y = 0; y < boundary.height; y++) {
-
- char line[boundary.width + 1];
-
- for (int x = 0; x < boundary.width; x++) {
-
- Character c = _char_array.get(Position(x, y));
- if (c.valid())
- line[x] = c.ascii();
- else
- line[x] = ' ';
- }
-
- line[boundary.width] = 0;
- Genode::log(Genode::Cstring(line));
- }
-
- Genode::log("--- end of screen dump ---");
-}
-
-
-extern "C" char _binary_vim_vt_start;
-extern "C" char _binary_vim_vt_end;
-
-
-int main(int argc, char **argv)
-{
- using namespace Terminal;
-
- Static_character_array<81, 26> char_array;
-
- Static_character_screen screen(char_array);
-
- Decoder decoder(screen);
- for (char *c = &_binary_vim_vt_start; c < &_binary_vim_vt_end; c++) {
- decoder.insert(*c);
- }
-
- screen.dump();
-
- return 0;
-}
diff --git a/repos/gems/src/test/terminal_decoder/target.mk b/repos/gems/src/test/terminal_decoder/target.mk
deleted file mode 100644
index 8ea7f5318..000000000
--- a/repos/gems/src/test/terminal_decoder/target.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-TARGET = test-terminal_decoder
-SRC_CC = main.cc
-SRC_BIN = vim.vt
-LIBS = base
-
-CC_CXX_WARN_STRICT =
diff --git a/repos/gems/src/test/terminal_decoder/vim.vt b/repos/gems/src/test/terminal_decoder/vim.vt
deleted file mode 100644
index 3bbc6a66d..000000000
--- a/repos/gems/src/test/terminal_decoder/vim.vt
+++ /dev/null
@@ -1 +0,0 @@
-[1;25r[?25h[?8c[?25h[?0c[27m[24m[0m[H[J[?25l[?1c[2;1H[1m[34m~ [3;1H~ [4;1H~ [5;1H~ [6;1H~ [7;1H~ [8;1H~ [9;1H~ [10;1H~ [11;1H~ [12;1H~ [13;1H~ [14;1H~ [15;1H~ [16;1H~ [17;1H~ [18;1H~ [19;1H~ [20;1H~ [21;1H~ [22;1H~ [23;1H~ [0m[24;1H[1m[7m[No Name] 0,0-1 All[0m[7;32HVIM - Vi IMproved[9;33Hversion 7.2.330[10;29Hby Bram Moolenaar et al.[11;19HVim is open source and freely distributable[13;26HHelp poor children in Uganda![14;18Htype :help iccf[1m[34m[0m for information [16;18Htype :q[1m[34m[0m to exit [17;18Htype :help[1m[34m[0m or [1m[34m[0m for on-line help[18;18Htype :help version7[1m[34m[0m for version info[1;1H[?25h[?0c[?25l[?1c[25;70H:[1;1H[25;70H[K[25;1H:[?25h[?0cq[?25l[?1c[?25h[?0c
[?25l[?1c[?25h[?0c[25;1H[K[25;1H
\ No newline at end of file
diff --git a/repos/libports/ports/ncurses.hash b/repos/libports/ports/ncurses.hash
index 204ce3b18..640aa449b 100644
--- a/repos/libports/ports/ncurses.hash
+++ b/repos/libports/ports/ncurses.hash
@@ -1 +1 @@
-e08f39cf745a5b9c8ac0cb8f4ffe7f7c74df5a46
+4f26912a3db5f084a3b6a2890b654e9fa1671c48
diff --git a/repos/libports/ports/ncurses.port b/repos/libports/ports/ncurses.port
index 71b39f702..ff6083dc3 100644
--- a/repos/libports/ports/ncurses.port
+++ b/repos/libports/ports/ncurses.port
@@ -146,7 +146,7 @@ src/lib/ncurses/codes.c:
src/lib/ncurses/fallback.c: $(ncurses_src_dir)/tinfo/MKfallback.sh
@$(MSG_GENERATE)$@
- $(VERBOSE)sh -e $< x src/lib/ncurses/misc/terminfo.src tic linux vt102 > $@ 2> /dev/null
+ $(VERBOSE)sh -e $< x src/lib/ncurses/misc/terminfo.src tic screen vt102 > $@ 2> /dev/null
$(VERBOSE)#sh -e $< /usr/share/terminfo $(ncurses_src_dir)/misc/terminfo.src /usr/bin/tic > $@
src/lib/ncurses/unctrl.c:
diff --git a/repos/os/include/terminal/char_cell_array_character_screen.h b/repos/os/include/terminal/char_cell_array_character_screen.h
index 55e84d393..1fc06bc16 100644
--- a/repos/os/include/terminal/char_cell_array_character_screen.h
+++ b/repos/os/include/terminal/char_cell_array_character_screen.h
@@ -114,21 +114,10 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
}
};
- public:
-
- Char_cell_array_character_screen(Cell_array &char_cell_array)
- :
- _char_cell_array(char_cell_array),
- _boundary(_char_cell_array.num_cols(), _char_cell_array.num_lines()),
- _color_index(DEFAULT_COLOR_INDEX),
- _inverse(false),
- _highlight(false),
- _cursor_visibility(CURSOR_VISIBLE),
- _region_start(0),
- _region_end(_boundary.height - 1),
- _tab_size(DEFAULT_TAB_SIZE)
- { }
-
+ static void _missing(char const *method_name)
+ {
+ Genode::warning(method_name, " not implemented");
+ }
void _line_feed()
{
@@ -149,6 +138,21 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_cursor_pos.x = 0;
}
+ public:
+
+ Char_cell_array_character_screen(Cell_array &char_cell_array)
+ :
+ _char_cell_array(char_cell_array),
+ _boundary(_char_cell_array.num_cols(), _char_cell_array.num_lines()),
+ _color_index(DEFAULT_COLOR_INDEX),
+ _inverse(false),
+ _highlight(false),
+ _cursor_visibility(CURSOR_VISIBLE),
+ _region_start(0),
+ _region_end(_boundary.height - 1),
+ _tab_size(DEFAULT_TAB_SIZE)
+ { }
+
/********************************
** Character_screen interface **
@@ -204,24 +208,24 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
}
}
- void civis()
+ void cbt() override { _missing(__func__); }
+
+ void civis() override
{
_cursor_visibility = CURSOR_INVISIBLE;
}
- void cnorm()
+ void cnorm() override
{
_cursor_visibility = CURSOR_VISIBLE;
}
- void cvvis()
+ void cvvis() override
{
_cursor_visibility = CURSOR_VERY_VISIBLE;
}
- void cpr() { Genode::warning(__func__, " not implemented"); }
-
- void csr(int start, int end)
+ void csr(int start, int end) override
{
/* the arguments are specified use coordinate origin (1, 1) */
start--;
@@ -234,7 +238,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_region_end = Genode::max(_region_end, _region_start);
}
- void cub(int dx)
+ void cub(int dx) override
{
Cursor_guard guard(*this);
@@ -242,7 +246,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_cursor_pos.x = Genode::max(0, _cursor_pos.x);
}
- void cuf(int dx)
+ void cuf(int dx) override
{
Cursor_guard guard(*this);
@@ -250,7 +254,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_cursor_pos.x = Genode::min(_boundary.width - 1, _cursor_pos.x);
}
- void cup(int y, int x)
+ void cup(int y, int x) override
{
Cursor_guard guard(*this);
@@ -265,83 +269,47 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_cursor_pos = Terminal::Position(x, y);
}
- void cuu1() { Genode::warning(__func__, " not implemented"); }
- void dch(int) { Genode::warning(__func__, " not implemented"); }
+ void cud(int) override { _missing(__func__); }
+ void cuu1() override { _missing(__func__); }
+ void cuu(int) override { _missing(__func__); }
+ void dch(int) override { _missing(__func__); }
- void dl(int num_lines)
+ void dl(int num_lines) override
{
/* delete number of lines */
for (int i = 0; i < num_lines; i++)
_char_cell_array.scroll_up(_cursor_pos.y, _region_end);
}
- void ech(int v)
- {
- /* clear number of characters */
-
- int x = _cursor_pos.x;
- int y = _cursor_pos.y;
-
- while (v-- > 0) {
-
- _char_cell_array.set_cell(x, y,
- Char_cell(' ', Font_face::REGULAR,
- _color_index, _inverse, _highlight));
-
- if (x == (_boundary.width - 1)) {
- /* end of line reached */
- if (y < (_boundary.height - 1)) {
- /* continue at beginning of next line */
- x = 0;
- y++;
- } else {
- /* end of screen reached */
- return;
- }
- } else {
- x++;
- }
- }
- }
-
- void ed()
+ void ed() override
{
/* clear to end of screen */
el();
_char_cell_array.clear(_cursor_pos.y + 1, _boundary.height - 1);
}
- void el()
+ void el() override
{
/* clear to end of line */
for (int x = _cursor_pos.x; x < _boundary.width; x++)
_char_cell_array.set_cell(x, _cursor_pos.y, Char_cell());
}
- void el1() { Genode::warning(__func__, " not implemented"); }
+ void el1() override { _missing(__func__); }
+ void enacs() override { _missing(__func__); }
+ void flash() override { _missing(__func__); }
- void home()
+ void home() override
{
Cursor_guard guard(*this);
_cursor_pos = Terminal::Position(0, 0);
}
- void hpa(int x)
- {
- Cursor_guard guard(*this);
+ void hts() override { _missing(__func__); }
+ void ich(int) override { _missing(__func__); }
- /* top-left cursor position is reported as (1, 1) */
- x--;
-
- using namespace Genode;
- _cursor_pos.x = max(0, min(x, _boundary.width - 1));
- }
-
- void hts() { Genode::warning(__func__, " not implemented"); }
- void ich(int) { Genode::warning(__func__, " not implemented"); }
-
- void il(int value)
+ void il(int value) override
{
Cursor_guard guard(*this);
@@ -356,32 +324,33 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
_char_cell_array.cursor(_cursor_pos, true);
}
- void oc() { Genode::warning(__func__, " not implemented"); }
+ void is2() override { _missing(__func__); }
+ void nel() override { _missing(__func__); }
- void op()
+ void op() override
{
_color_index = DEFAULT_COLOR_INDEX | (DEFAULT_COLOR_INDEX_BG << 3);
}
- void rc() { Genode::warning(__func__, " not implemented"); }
- void ri() { Genode::warning(__func__, " not implemented"); }
- void ris() { Genode::warning(__func__, " not implemented"); }
- void rmam() { Genode::warning(__func__, " not implemented"); }
- void rmir() { Genode::warning(__func__, " not implemented"); }
+ void rc() override { _missing(__func__); }
+ void rs2() override { _missing(__func__); }
+ void rmir() override { _missing(__func__); }
+ void rmcup() override { }
+ void rmkx() override { }
- void setab(int value)
+ void setab(int value) override
{
_color_index &= ~0x38; /* clear 111000 */
_color_index |= (((value == 9) ? DEFAULT_COLOR_INDEX_BG : value) << 3);
}
- void setaf(int value)
+ void setaf(int value) override
{
_color_index &= ~0x7; /* clear 000111 */
_color_index |= (value == 9) ? DEFAULT_COLOR_INDEX : value;
}
- void sgr(int value)
+ void sgr(int value) override
{
switch (value) {
case 0:
@@ -401,30 +370,13 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
}
}
- void sgr0()
- {
- sgr(0);
- }
+ void sgr0() override { sgr(0); }
- void sc() { Genode::warning(__func__, " not implemented"); }
- void smam() { Genode::warning(__func__, " not implemented"); }
- void smir() { Genode::warning(__func__, " not implemented"); }
- void tbc() { Genode::warning(__func__, " not implemented"); }
- void u6(int, int) { Genode::warning(__func__, " not implemented"); }
- void u7() { Genode::warning(__func__, " not implemented"); }
- void u8() { Genode::warning(__func__, " not implemented"); }
- void u9() { Genode::warning(__func__, " not implemented"); }
-
- void vpa(int y)
- {
- Cursor_guard guard(*this);
-
- /* top-left cursor position is reported as (1, 1) */
- y--;
-
- using namespace Genode;
- _cursor_pos.y = max(0, min(y, _boundary.height - 1));
- }
+ void sc() override { _missing(__func__); }
+ void smcup() override { }
+ void smir() override { _missing(__func__); }
+ void smkx() override { }
+ void tbc() override { _missing(__func__); }
};
#endif /* _TERMINAL__CHAR_CELL_ARRAY_CHARACTER_SCREEN_H_ */
diff --git a/repos/os/include/terminal/character_screen.h b/repos/os/include/terminal/character_screen.h
index 3596399f3..c0a1c5f22 100644
--- a/repos/os/include/terminal/character_screen.h
+++ b/repos/os/include/terminal/character_screen.h
@@ -37,6 +37,11 @@ struct Terminal::Character_screen : Genode::Interface
* thorough description of these commands.
*/
+ /**
+ * Back tab
+ */
+ virtual void cbt() = 0;
+
/**
* Make cursor invisible
*/
@@ -52,11 +57,6 @@ struct Terminal::Character_screen : Genode::Interface
*/
virtual void cvvis() = 0;
- /**
- * Reset string
- */
- virtual void cpr() = 0;
-
/**
* Change region to line #1 ... line #2
*/
@@ -77,11 +77,21 @@ struct Terminal::Character_screen : Genode::Interface
*/
virtual void cup(int, int) = 0;
+ /**
+ * Down #1 lines
+ */
+ virtual void cud(int) = 0;
+
/**
* Move cursor up one line
*/
virtual void cuu1() = 0;
+ /**
+ * Up #1 lines
+ */
+ virtual void cuu(int) = 0;
+
/**
* Delete #1 characters
*/
@@ -92,11 +102,6 @@ struct Terminal::Character_screen : Genode::Interface
*/
virtual void dl(int) = 0;
- /**
- * Erase #1 characters
- */
- virtual void ech(int) = 0;
-
/**
* Clear to end of screen
*/
@@ -112,16 +117,21 @@ struct Terminal::Character_screen : Genode::Interface
*/
virtual void el1() = 0;
+ /**
+ * Enable alternative character set
+ */
+ virtual void enacs() = 0;
+
+ /**
+ * Visible bell
+ */
+ virtual void flash() = 0;
+
/**
* Home cursor
*/
virtual void home() = 0;
- /**
- * Horizontal position #1 absolute
- */
- virtual void hpa(int) = 0;
-
/**
* Set a tab in every row, current column
*/
@@ -138,9 +148,14 @@ struct Terminal::Character_screen : Genode::Interface
virtual void il(int) = 0;
/**
- * Set all color pairs to the original ones
+ * Initialization string
*/
- virtual void oc() = 0;
+ virtual void is2() = 0;
+
+ /**
+ * Newline
+ */
+ virtual void nel() = 0;
/**
* Set default pair to its original value
@@ -152,26 +167,26 @@ struct Terminal::Character_screen : Genode::Interface
*/
virtual void rc() = 0;
- /**
- * Scroll text down
- */
- virtual void ri() = 0;
-
/**
* Reset string
*/
- virtual void ris() = 0;
+ virtual void rs2() = 0;
/**
- * Turn off automatic margins
+ * Leave cup mode
*/
- virtual void rmam() = 0;
+ virtual void rmcup() = 0;
/**
* Exit insert mode
*/
virtual void rmir() = 0;
+ /**
+ * Exit keyboard transmission mode
+ */
+ virtual void rmkx() = 0;
+
/**
* Set background color to #1, using ANSI escape
*/
@@ -198,32 +213,24 @@ struct Terminal::Character_screen : Genode::Interface
virtual void sc() = 0;
/**
- * Turn on automatic margins
+ * Enter cup mode
*/
- virtual void smam() = 0;
+ virtual void smcup() = 0;
/**
* Enter insert mode
*/
virtual void smir() = 0;
+ /**
+ * Enter keyboard transmission mode
+ */
+ virtual void smkx() = 0;
+
/**
* Clear all tab stops
*/
virtual void tbc() = 0;
-
- /**
- * User strings
- */
- virtual void u6(int, int) = 0;
- virtual void u7() = 0;
- virtual void u8() = 0;
- virtual void u9() = 0;
-
- /**
- * Vertical position #1 absolute)
- */
- virtual void vpa(int) = 0;
};
#endif /* _TERMINAL__CHARACTER_SCREEN_H_ */
diff --git a/repos/os/include/terminal/decoder.h b/repos/os/include/terminal/decoder.h
index 6163be351..351e0834b 100644
--- a/repos/os/include/terminal/decoder.h
+++ b/repos/os/include/terminal/decoder.h
@@ -200,9 +200,13 @@ class Terminal::Decoder
{
switch (_escape_stack[0].value) {
case '7': return (_screen.sc(), true);
- case 'c': return (_screen.ris(), true);
+ case '8': return (_screen.rc(), true);
+ case 'E': return (_screen.nel(), true);
case 'H': return (_screen.hts(), true);
- case 'M': return (_screen.ri(), true);
+ case 'M': return (_screen.cuu1(), true);
+ case '=': return true; /* follows 'smkx' */
+ case '>': return true; /* follows 'rmkx' */
+ case 'c': return true; /* prefixes 'rs2' */
default: return false;
}
}
@@ -214,32 +218,21 @@ class Terminal::Decoder
case '[':
switch (_escape_stack[1].value) {
- case 'A': return (_screen.cuu1(), true);
case 'C': return (_screen.cuf(1), true);
- case 'c': return (_screen.u9(), true);
case 'H': return (_screen.home(), true);
case 'J': return (_screen.ed(), true);
case 'K': return (_screen.el(), true);
case 'L': return (_screen.il(1), true);
case 'M': return (_screen.dl(1), true);
case 'P': return (_screen.dch(1), true);
- case '@': return (_screen.ich(1), true);
- case 'R': return (_screen.cpr(), true);
+ case 'Z': return (_screen.cbt(), true);
case 'm': return (_screen.sgr0(), true);
default: return false;
}
break;
- case ']':
-
- switch (_escape_stack[1].value) {
- case 'R': return (_screen.oc(), true);
- default : return false;
- }
-
- case 8:
-
- return (_escape_stack[1].value == 'A') && (_screen.rc(), true);
+ case ')':
+ return (_escape_stack[1].value == 0) && (_screen.is2(), true);
default: return false;
}
@@ -262,19 +255,19 @@ class Terminal::Decoder
switch (command) {
case 'm': return _sgr(p1);
case 'D': return (_screen.cub(p1), true);
- case 'd': return (_screen.vpa(p1), true);
+ case 'A': return (_screen.cuu(p1), true);
+ case 'B': return (_screen.cud(p1), true);
case 'g': return (p1 == 3) && (_screen.tbc(), true);
- case 'G': return (_screen.hpa(p1), true);
- case 'h': return (p1 == 4) && (_screen.smir(), true);
- case 'K': return ((p1 == 0) && (_screen.el(), true))
- || ((p1 == 1) && (_screen.el1(), true));
- case 'l': return (p1 == 4) && (_screen.rmir(), true);
+ case 'h': return ((p1 == 4) && (_screen.smir(), true))
+ || ((p1 == 34) && (_screen.cnorm(), true));
+ case 'K': return ((p1 == 0) && (_screen.el(), true))
+ || ((p1 == 1) && (_screen.el1(), true));
+ case 'l': return ((p1 == 4) && (_screen.rmir(), true))
+ || ((p1 == 34) && (_screen.cvvis(), true));
case 'L': return (_screen.il(p1), true);
case 'M': return (_screen.dl(p1), true);
- case 'n': return (p1 == 6) && (_screen.u7(), true);
case 'P': return (_screen.dch(p1), true);
case '@': return (_screen.ich(p1), true);
- case 'X': return (_screen.ech(p1), true);
case 'C': return (_screen.cuf(p1), true);
default: return false;
@@ -297,8 +290,10 @@ class Terminal::Decoder
switch (command) {
case 'l':
- if (p1 == 7) return (_screen.rmam(), true);
+ if (p1 == 1) return (_screen.rmkx(), true);
if (p1 == 25) return (_screen.civis(), true);
+ if (p1 == 1000) return (_screen.rs2(), true);
+ if (p1 == 1049) return (_screen.rmcup(), true);
if (p1 == 2004) {
/* disable bracketed paste */
Genode::warning("Sequence '[?2004l' is not implemented");
@@ -306,20 +301,15 @@ class Terminal::Decoder
}
return false;
case 'h':
- if (p1 == 7) return (_screen.smam(), true);
+ if (p1 == 1) return (_screen.smkx(), true);
if (p1 == 25) return (_screen.cnorm(), true);
+ if (p1 == 1049) return (_screen.smcup(), true);
if (p1 == 2004) {
/* enable bracketed paste */
Genode::warning("Sequence '[?2004h' is not implemented");
return true;
}
return false;
- case 'c':
- if (p1 == 0) return true; /* appended to cnorm */
- if (p1 == 1) return true; /* appended to civis */
- if (p1 == 6) return (_screen.u8(), true);
- if (p1 == 8) return (_screen.cvvis(), true);
- return false;
default: return false;
}
}
@@ -345,6 +335,9 @@ class Terminal::Decoder
case 'H': return (_screen.cup(p[0], p[1]), true);
case 'm':
+ if (p[0] == 39 && p[1] == 49)
+ return (_screen.op(), true);
+
for (int i = 0; i < 2; i++)
if (!_sgr(p[i]))
Genode::warning("Number ", p[i],
@@ -354,7 +347,6 @@ class Terminal::Decoder
return true;
- case 'R': return (_screen.u6(p[0], p[1]), true);
default: return false;
}
}
diff --git a/repos/os/include/terminal/scancode_tracker.h b/repos/os/include/terminal/scancode_tracker.h
index 833fc0404..998c39c3a 100644
--- a/repos/os/include/terminal/scancode_tracker.h
+++ b/repos/os/include/terminal/scancode_tracker.h
@@ -154,21 +154,21 @@ class Terminal::Scancode_tracker
/* handle special key to be represented by an escape sequence */
if (!_last_character) {
switch (keycode) {
- case Input::KEY_DOWN: _last_sequence = "\E[B"; break;
- case Input::KEY_UP: _last_sequence = "\E[A"; break;
- case Input::KEY_RIGHT: _last_sequence = "\E[C"; break;
- case Input::KEY_LEFT: _last_sequence = "\E[D"; break;
+ case Input::KEY_DOWN: _last_sequence = "\EOB"; break;
+ case Input::KEY_UP: _last_sequence = "\EOA"; break;
+ case Input::KEY_RIGHT: _last_sequence = "\EOC"; break;
+ case Input::KEY_LEFT: _last_sequence = "\EOD"; break;
case Input::KEY_HOME: _last_sequence = "\E[1~"; break;
case Input::KEY_INSERT: _last_sequence = "\E[2~"; break;
case Input::KEY_DELETE: _last_sequence = "\E[3~"; break;
case Input::KEY_END: _last_sequence = "\E[4~"; break;
case Input::KEY_PAGEUP: _last_sequence = "\E[5~"; break;
case Input::KEY_PAGEDOWN: _last_sequence = "\E[6~"; break;
- case Input::KEY_F1: _last_sequence = "\E[[A"; break;
- case Input::KEY_F2: _last_sequence = "\E[[B"; break;
- case Input::KEY_F3: _last_sequence = "\E[[C"; break;
- case Input::KEY_F4: _last_sequence = "\E[[D"; break;
- case Input::KEY_F5: _last_sequence = "\E[[E"; break;
+ case Input::KEY_F1: _last_sequence = "\EOP"; break;
+ case Input::KEY_F2: _last_sequence = "\EOQ"; break;
+ case Input::KEY_F3: _last_sequence = "\EOR"; break;
+ case Input::KEY_F4: _last_sequence = "\EOS"; break;
+ case Input::KEY_F5: _last_sequence = "\E[15~"; break;
case Input::KEY_F6: _last_sequence = "\E[17~"; break;
case Input::KEY_F7: _last_sequence = "\E[18~"; break;
case Input::KEY_F8: _last_sequence = "\E[19~"; break;
diff --git a/repos/ports/recipes/raw/noux-system/init.config b/repos/ports/recipes/raw/noux-system/init.config
index da1f160e4..91b3b4b0f 100644
--- a/repos/ports/recipes/raw/noux-system/init.config
+++ b/repos/ports/recipes/raw/noux-system/init.config
@@ -42,7 +42,7 @@
-
+
diff --git a/repos/ports/run/noux_bash.run b/repos/ports/run/noux_bash.run
index e9be3d02d..4f8e96f36 100644
--- a/repos/ports/run/noux_bash.run
+++ b/repos/ports/run/noux_bash.run
@@ -125,7 +125,7 @@ Hello world !!
-
+
diff --git a/repos/ports/run/noux_fs.run b/repos/ports/run/noux_fs.run
index f75842511..eaad3d8cd 100644
--- a/repos/ports/run/noux_fs.run
+++ b/repos/ports/run/noux_fs.run
@@ -98,7 +98,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_shell_script.run b/repos/ports/run/noux_shell_script.run
index 6434cbb8b..cea8e6136 100644
--- a/repos/ports/run/noux_shell_script.run
+++ b/repos/ports/run/noux_shell_script.run
@@ -128,7 +128,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_terminal_fs.run b/repos/ports/run/noux_terminal_fs.run
index ed7e593d0..fd191cf8e 100644
--- a/repos/ports/run/noux_terminal_fs.run
+++ b/repos/ports/run/noux_terminal_fs.run
@@ -171,7 +171,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_tool_chain_auto.run b/repos/ports/run/noux_tool_chain_auto.run
index ca80fdaf4..0bc9de425 100644
--- a/repos/ports/run/noux_tool_chain_auto.run
+++ b/repos/ports/run/noux_tool_chain_auto.run
@@ -261,7 +261,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_trace_fs.run b/repos/ports/run/noux_trace_fs.run
index daf558a71..53138d3bb 100644
--- a/repos/ports/run/noux_trace_fs.run
+++ b/repos/ports/run/noux_trace_fs.run
@@ -175,7 +175,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_two_terminal_fs.run b/repos/ports/run/noux_two_terminal_fs.run
index 019bb5cfd..222b773ec 100644
--- a/repos/ports/run/noux_two_terminal_fs.run
+++ b/repos/ports/run/noux_two_terminal_fs.run
@@ -183,7 +183,7 @@ append config {
-
+
@@ -205,7 +205,7 @@ append config {
-
+
diff --git a/repos/ports/run/noux_vim.run b/repos/ports/run/noux_vim.run
index d86788fa5..8d83a06a9 100644
--- a/repos/ports/run/noux_vim.run
+++ b/repos/ports/run/noux_vim.run
@@ -58,7 +58,7 @@ install_config {
-
+
diff --git a/repos/ports/run/vbox_share.inc b/repos/ports/run/vbox_share.inc
index c64209c2a..467a6f91a 100644
--- a/repos/ports/run/vbox_share.inc
+++ b/repos/ports/run/vbox_share.inc
@@ -152,7 +152,7 @@ set config_of_app {
-
+