*Bug #10777 fixed - Home and End keys trapped 26/14426/4
Anais AUBERT [Thu, 17 Apr 2014 09:05:34 +0000 (11:05 +0200)]
Change-Id: If62aa4ea389cacf54e321575cee973630e8f2f90

scilab/CHANGES_5.5.X
scilab/modules/console/src/c/cmdLine/getKey.c
scilab/modules/console/tests/nonreg_tests/bug_10777.tst [new file with mode: 0644]

index be122e0..2c6e5e3 100644 (file)
@@ -21,6 +21,8 @@ Scilab Bug Fixes
 
 * Bug #10555 fixed - Scilab failed to build with some configure options.
 
+* Bug #10777 fixed - Home and End keys were not trapped in CLI mode.
+
 * Bug #12700 fixed - edit_curv (used by CURV_f) was broken.
 
 * Bug #13180 fixed - surf did not handle degenerate cases.
index ea1ae2a..671a4b3 100644 (file)
@@ -86,10 +86,11 @@ static void caseHomeOrEndKey(wchar_t * commandLine, unsigned int *cursorLocation
 
 /*
  * If second key was L'['
- * It means this could be an arrow key or delete key.
+ * It means this could be an arrow key, a delete key or home/end key.
  */
 static void caseDelOrArrowKey(wchar_t ** commandLine, unsigned int *cursorLocation)
 {
+    int * cmd = *commandLine;
     switch (getwchar())
     {
         case L'A':
@@ -114,6 +115,13 @@ static void caseDelOrArrowKey(wchar_t ** commandLine, unsigned int *cursorLocati
                 updateTokenInScilabHistory(commandLine);
                 break;
             }
+        //home or end key in some consoles
+        case L'H':
+            begLine(cmd, cursorLocation);
+            break;
+        case L'F':
+            endLine(cmd, cursorLocation);
+            break;
     }
 }
 
@@ -138,6 +146,7 @@ static void caseMetaKey(wchar_t ** commandLine, unsigned int *cursorLocation)
         case L'O':
             caseHomeOrEndKey(*commandLine, cursorLocation);
             break;
+
     }
 }
 
@@ -209,7 +218,7 @@ static void getKey(wchar_t ** commandLine, unsigned int *cursorLocation)
 
     key = getwchar();
 
-    // Need to clear the stdin
+       // Need to clear the stdin
     if (key == WEOF && feof(stdin))
     {
         clearerr(stdin);
@@ -231,6 +240,7 @@ static void getKey(wchar_t ** commandLine, unsigned int *cursorLocation)
         case CTRL_D:
             rmChar(*commandLine, SCI_DELETE, cursorLocation);
             updateTokenInScilabHistory(commandLine);
+            exit(0);
             break;
         case CTRL_E:
             endLine(*commandLine, cursorLocation);
diff --git a/scilab/modules/console/tests/nonreg_tests/bug_10777.tst b/scilab/modules/console/tests/nonreg_tests/bug_10777.tst
new file mode 100644 (file)
index 0000000..e2f39e0
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 -Scilab Enterprises - Anais AUBERT
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- INTERACTIVE TEST -->
+// <-- TEST WITH CONSOLE -->
+//
+// <-- Non-regression test for bug 10777 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=10777
+//
+// <-- Short Description -->
+// In some consoles, home and end keys are not trapped
+
+// i) Have a console opened .
+// ii) Write anything
+// iii) Hit home key, cursor should move to the beginning of the line
+
+