[haiku-commits] haiku: hrev50662 - src/apps/terminal

  • From: jerome.duval@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 3 Nov 2016 16:53:24 +0100 (CET)

hrev50662 adds 1 changeset to branch 'master'
old head: fe8f306c499859d45006d3684b19ac133ece069f
new head: ecfaa77a23c1f7861f28ba1de7625226d7a7217c
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=ecfaa77a23c1+%5Efe8f306c4998

----------------------------------------------------------------------------

ecfaa77a23c1: Terminal: Implement a few cursor CSI commands.
  
  * Cursor back tab, cursor forward tab.
  * Cursor next line, cursor previous line.
  * also add size 13 to the list of font sizes.

                                   [ Jérôme Duval <jerome.duval@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev50662
Commit:      ecfaa77a23c1f7861f28ba1de7625226d7a7217c
URL:         http://cgit.haiku-os.org/haiku/commit/?id=ecfaa77a23c1
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Thu Nov  3 15:44:19 2016 UTC

----------------------------------------------------------------------------

6 files changed, 61 insertions(+), 5 deletions(-)
src/apps/terminal/AppearPrefView.cpp      |  2 +-
src/apps/terminal/BasicTerminalBuffer.cpp | 21 +++++++++++++++++++
src/apps/terminal/BasicTerminalBuffer.h   |  1 +
src/apps/terminal/TermParse.cpp           | 30 +++++++++++++++++++++++++++
src/apps/terminal/VTPrsTbl.c              |  8 +++----
src/apps/terminal/VTparse.h               |  4 ++++

----------------------------------------------------------------------------

diff --git a/src/apps/terminal/AppearPrefView.cpp 
b/src/apps/terminal/AppearPrefView.cpp
index ca74a5e..cb4d926 100644
--- a/src/apps/terminal/AppearPrefView.cpp
+++ b/src/apps/terminal/AppearPrefView.cpp
@@ -522,7 +522,7 @@ AppearancePrefView::_MakeFontSizeMenu(const char* label, 
uint32 command,
        menu->SetLabelFromMarked(false);
 
        int32 sizes[] = {
-               8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 0
+               8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 28, 32, 36, 0
        };
 
        bool found = false;
diff --git a/src/apps/terminal/BasicTerminalBuffer.cpp 
b/src/apps/terminal/BasicTerminalBuffer.cpp
index e5f6c9b..7d4dd2a 100644
--- a/src/apps/terminal/BasicTerminalBuffer.cpp
+++ b/src/apps/terminal/BasicTerminalBuffer.cpp
@@ -759,6 +759,27 @@ BasicTerminalBuffer::InsertTab()
 
 
 void
+BasicTerminalBuffer::InsertCursorBackTab(int32 numTabs)
+{
+       int32 x = fCursor.x - 1;
+
+       fSoftWrappedCursor = false;
+
+       // Find the next tab stop
+       while (numTabs-- > 0)
+               for (; x >=0 && !fTabStops[x]; x--)
+                       ;
+       // Ensure x stays within the line bounds
+       x = restrict_value(x, 0, fWidth - 1);
+
+       if (x != fCursor.x) {
+               fCursor.x = x;
+               _CursorChanged();
+       }
+}
+
+
+void
 BasicTerminalBuffer::InsertLines(int32 numLines)
 {
        if (fCursor.y >= fScrollTop && fCursor.y < fScrollBottom) {
diff --git a/src/apps/terminal/BasicTerminalBuffer.h 
b/src/apps/terminal/BasicTerminalBuffer.h
index 757984f..eccdef9 100644
--- a/src/apps/terminal/BasicTerminalBuffer.h
+++ b/src/apps/terminal/BasicTerminalBuffer.h
@@ -137,6 +137,7 @@ public:
                        void                            InsertLF();
                        void                            InsertRI();
                        void                            InsertTab();
+                       void                            
InsertCursorBackTab(int32 numTabs);
                        void                            SetInsertMode(int flag);
                        void                            InsertSpace(int32 num);
                        void                            InsertLines(int32 
numLines);
diff --git a/src/apps/terminal/TermParse.cpp b/src/apps/terminal/TermParse.cpp
index 25d0a43..5b4188c 100644
--- a/src/apps/terminal/TermParse.cpp
+++ b/src/apps/terminal/TermParse.cpp
@@ -1172,6 +1172,36 @@ TermParse::EscParse()
                                        parsestate = groundtable;
                                        break;
 
+                               case CASE_CBT:  // cursor back tab
+                                       if ((column = param[0]) < 1)
+                                               column = 1;
+                                       fBuffer->InsertCursorBackTab(column);
+                                       parsestate = groundtable;
+                                       break;
+
+                               case CASE_CFT:  // cursor forward tab
+                                       if ((column= param[0]) < 1)
+                                               column = 1;
+                                       for (int32 i = 0; i < column; ++i)
+                                               fBuffer->InsertTab();
+                                       parsestate = groundtable;
+                                       break;
+
+                               case CASE_CNL:  // cursor next line
+                                       if ((row= param[0]) < 1)
+                                               row = 1;
+                                       fBuffer->SetCursorX(0);
+                                       fBuffer->MoveCursorDown(row);
+                                       parsestate = groundtable;
+                                       break;
+
+                               case CASE_CPL:  // cursor previous line
+                                       if ((row= param[0]) < 1)
+                                               row = 1;
+                                       fBuffer->SetCursorX(0);
+                                       fBuffer->MoveCursorUp(row);
+                                       parsestate = groundtable;
+                                       break;
                                default:
                                        break;
                        }
diff --git a/src/apps/terminal/VTPrsTbl.c b/src/apps/terminal/VTPrsTbl.c
index db8d479..0b6260a 100644
--- a/src/apps/terminal/VTPrsTbl.c
+++ b/src/apps/terminal/VTPrsTbl.c
@@ -1083,12 +1083,12 @@ CASE_CUD,
 CASE_CUF,
 /*     D               E               F               G       */
 CASE_CUB,
-CASE_GROUND_STATE,
-CASE_GROUND_STATE,
+CASE_CNL,
+CASE_CPL,
 CASE_HPA,
 /*     H               I               J               K       */
 CASE_CUP,
-CASE_GROUND_STATE,
+CASE_CFT,
 CASE_ED,
 CASE_EL,
 /*     L               M               N               O       */
@@ -1109,7 +1109,7 @@ CASE_GROUND_STATE,
 /*     X               Y               Z               [       */
 CASE_ECH,
 CASE_GROUND_STATE,
-CASE_GROUND_STATE,
+CASE_CBT,
 CASE_GROUND_STATE,
 /*     \               ]               ^               _       */
 CASE_GROUND_STATE,
diff --git a/src/apps/terminal/VTparse.h b/src/apps/terminal/VTparse.h
index 58d9e8f..b336d31 100644
--- a/src/apps/terminal/VTparse.h
+++ b/src/apps/terminal/VTparse.h
@@ -95,3 +95,7 @@
 
 #define CASE_DECSCUSR_ETC 93
 #define CASE_CSI_SP 94
+#define CASE_CBT 95
+#define CASE_CNL 96
+#define CASE_CPL 97
+#define CASE_CFT 98


Other related posts:

  • » [haiku-commits] haiku: hrev50662 - src/apps/terminal - jerome . duval