[MORE] Implement 'Q' key for 'Quit' (#3210)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sat, 19 Sep 2020 22:16:21 +0000 (07:16 +0900)
committerGitHub <noreply@github.com>
Sat, 19 Sep 2020 22:16:21 +0000 (07:16 +0900)
Implement 'Quit' action for keyboard key 'Q'. CORE-4019

base/applications/cmdutils/more/more.c

index 161818a..14dd0d5 100644 (file)
@@ -8,6 +8,7 @@
  * PROGRAMMERS:     Paolo Pantaleo
  *                  Timothy Schepens
  *                  Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ *                  Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
  */
 /*
  * MORE.C - external command.
@@ -133,6 +134,7 @@ PagePrompt(PCON_PAGER Pager, DWORD Done, DWORD Total)
      */
     ConClearLine(Pager->Screen->Stream);
 
+    /* Ctrl+C or Ctrl+Esc: Control Break */
     if ((KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
         ((KeyEvent.wVirtualKeyCode == L'C') &&
          (KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
@@ -143,6 +145,17 @@ PagePrompt(PCON_PAGER Pager, DWORD Done, DWORD Total)
         return FALSE;
     }
 
+    /* 'Q': Quit */
+    // FIXME: Available only when command extensions are enabled.
+    if ((KeyEvent.wVirtualKeyCode == L'Q') &&
+        !(KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)))
+    {
+        /* We break, output a newline */
+        WCHAR ch = L'\n';
+        ConStreamWrite(Pager->Screen->Stream, &ch, 1);
+        return FALSE;
+    }
+
     return TRUE;
 }