Ver código fonte

Terminal: Use TERM=xterm by default, and implement some more escapes.

Andreas Kling 6 anos atrás
pai
commit
ee0f00c644

+ 37 - 0
Applications/Terminal/Terminal.cpp

@@ -269,6 +269,40 @@ void Terminal::escape$D(const Vector<unsigned>& params)
     set_cursor(m_cursor_row, new_column);
 }
 
+void Terminal::escape$G(const Vector<unsigned>& params)
+{
+    int new_column = 1;
+    if (params.size() >= 1)
+        new_column = params[0] - 1;
+    if (new_column < 0)
+        new_column = 0;
+    set_cursor(m_cursor_row, new_column);
+}
+
+void Terminal::escape$d(const Vector<unsigned>& params)
+{
+    int new_row = 1;
+    if (params.size() >= 1)
+        new_row = params[0] - 1;
+    if (new_row < 0)
+        new_row = 0;
+    set_cursor(new_row, m_cursor_column);
+}
+
+void Terminal::escape$X(const Vector<unsigned>& params)
+{
+    // Erase characters (without moving cursor)
+    int num = 1;
+    if (params.size() >= 1)
+        num = params[0];
+    if (num == 0)
+        num = 1;
+    // Clear from cursor to end of line.
+    for (int i = m_cursor_column; i < num; ++i) {
+        put_character_at(m_cursor_row, i, ' ');
+    }
+}
+
 void Terminal::escape$K(const Vector<unsigned>& params)
 {
     int mode = 0;
@@ -393,6 +427,9 @@ void Terminal::execute_escape_sequence(byte final)
     case 'J': escape$J(params); break;
     case 'K': escape$K(params); break;
     case 'M': escape$M(params); break;
+    case 'G': escape$G(params); break;
+    case 'X': escape$X(params); break;
+    case 'd': escape$d(params); break;
     case 'm': escape$m(params); break;
     case 's': escape$s(params); break;
     case 'u': escape$u(params); break;

+ 3 - 0
Applications/Terminal/Terminal.h

@@ -49,6 +49,9 @@ private:
     void escape$J(const Vector<unsigned>&);
     void escape$K(const Vector<unsigned>&);
     void escape$M(const Vector<unsigned>&);
+    void escape$G(const Vector<unsigned>&);
+    void escape$X(const Vector<unsigned>&);
+    void escape$d(const Vector<unsigned>&);
     void escape$m(const Vector<unsigned>&);
     void escape$s(const Vector<unsigned>&);
     void escape$u(const Vector<unsigned>&);

+ 1 - 1
Applications/Terminal/main.cpp

@@ -65,7 +65,7 @@ static void make_shell(int ptm_fd)
             exit(1);
         }
         char* args[] = { "/bin/sh", nullptr };
-        char* envs[] = { "TERM=vt100", nullptr };
+        char* envs[] = { "TERM=xterm", nullptr };
         rc = execve("/bin/sh", args, envs);
         if (rc < 0) {
             perror("execve");