]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/MainTextEditor.c
ShellPkg: Added the Ctrl based hot key and changed text editor's UI.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / Edit / MainTextEditor.c
index 1a8f39a229fc60f5e8dc0283208fe601ccaf9ba8..460433e373c50869c35439d30111be190640c995 100644 (file)
 #include "TextEditor.h"\r
 #include "EditStatusBar.h"\r
 #include "EditInputBar.h"\r
+#include "EditMenuBar.h"\r
+\r
+//\r
+// the first time editor launch\r
+//\r
+BOOLEAN                       EditorFirst;\r
+\r
+//\r
+// it's time editor should exit\r
+//\r
+BOOLEAN                       EditorExit;\r
+\r
+BOOLEAN                       EditorMouseAction;\r
+\r
+extern EFI_EDITOR_FILE_BUFFER FileBuffer;\r
+\r
+extern BOOLEAN                FileBufferNeedRefresh;\r
+\r
+extern BOOLEAN                FileBufferOnlyLineNeedRefresh;\r
+\r
+extern BOOLEAN                FileBufferMouseNeedRefresh;\r
+\r
+extern EFI_EDITOR_FILE_BUFFER FileBufferBackupVar;\r
+\r
+EFI_EDITOR_GLOBAL_EDITOR      MainEditor;\r
+\r
 \r
 /**\r
   Load a file from disk to editor\r
@@ -61,6 +87,16 @@ MainCommandSaveFile (
   VOID\r
   );\r
 \r
+/**\r
+  show help menu.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+**/\r
+EFI_STATUS\r
+MainCommandDisplayHelp (\r
+  VOID\r
+  );\r
+\r
 /**\r
   exit editor\r
 \r
@@ -121,6 +157,66 @@ MainCommandPasteLine (
   VOID\r
   );\r
 \r
+/**\r
+  Help info that will be displayed.\r
+**/\r
+EFI_STRING_ID  MainMenuHelpInfo[] = {\r
+  STRING_TOKEN(STR_EDIT_HELP_TITLE),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_LIST_TITLE),\r
+  STRING_TOKEN(STR_EDIT_HELP_DIV),\r
+  STRING_TOKEN(STR_EDIT_HELP_GO_TO_LINE),\r
+  STRING_TOKEN(STR_EDIT_HELP_SAVE_FILE),\r
+  STRING_TOKEN(STR_EDIT_HELP_EXIT),\r
+  STRING_TOKEN(STR_EDIT_HELP_SEARCH),\r
+  STRING_TOKEN(STR_EDIT_HELP_SEARCH_REPLACE),\r
+  STRING_TOKEN(STR_EDIT_HELP_CUT_LINE),\r
+  STRING_TOKEN(STR_EDIT_HELP_PASTE_LINE),\r
+  STRING_TOKEN(STR_EDIT_HELP_OPEN_FILE),\r
+  STRING_TOKEN(STR_EDIT_HELP_FILE_TYPE),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_EXIT_HELP),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_EDIT_HELP_DIV),\r
+0\r
+};\r
+\r
+MENU_ITEM_FUNCTION MainControlBasedMenuFunctions[] = {\r
+  NULL,\r
+  NULL,                      /* Ctrl - A */\r
+  NULL,                      /* Ctrl - B */\r
+  NULL,                      /* Ctrl - C */\r
+  NULL,                      /* Ctrl - D */\r
+  MainCommandDisplayHelp,    /* Ctrl - E */\r
+  MainCommandSearch,         /* Ctrl - F */\r
+  MainCommandGotoLine,       /* Ctrl - G */\r
+  NULL,                      /* Ctrl - H */\r
+  NULL,                      /* Ctrl - I */\r
+  NULL,                      /* Ctrl - J */\r
+  MainCommandCutLine,        /* Ctrl - K */\r
+  NULL,                      /* Ctrl - L */\r
+  NULL,                      /* Ctrl - M */\r
+  NULL,                      /* Ctrl - N */\r
+  MainCommandOpenFile,       /* Ctrl - O */\r
+  NULL,                      /* Ctrl - P */\r
+  MainCommandExit,           /* Ctrl - Q */\r
+  MainCommandSearchReplace,  /* Ctrl - R */\r
+  MainCommandSaveFile,       /* Ctrl - S */\r
+  MainCommandSwitchFileType, /* Ctrl - T */\r
+  MainCommandPasteLine,      /* Ctrl - U */\r
+  NULL,                      /* Ctrl - V */\r
+  NULL,                      /* Ctrl - W */\r
+  NULL,                      /* Ctrl - X */\r
+  NULL,                      /* Ctrl - Y */\r
+  NULL,                      /* Ctrl - Z */\r
+};\r
+\r
 EDITOR_MENU_ITEM  MainMenuItems[] = {\r
   {\r
     STRING_TOKEN(STR_EDIT_LIBMENUBAR_GO_TO_LINE),\r
@@ -169,6 +265,11 @@ EDITOR_MENU_ITEM  MainMenuItems[] = {
     STRING_TOKEN(STR_EDIT_LIBMENUBAR_F9),\r
     MainCommandSwitchFileType\r
   },\r
+  {\r
+    STRING_TOKEN(STR_EDIT_LIBMENUBAR_FILE_TYPE),\r
+    STRING_TOKEN(STR_EDIT_LIBMENUBAR_F11),\r
+    MainCommandSwitchFileType\r
+  },\r
 \r
   {\r
     0,\r
@@ -1248,28 +1349,43 @@ MainCommandSaveFile (
   return Status;\r
 }\r
 \r
-EFI_EDITOR_COLOR_ATTRIBUTES   OriginalColors;\r
-INTN                          OriginalMode;\r
-\r
-//\r
-// the first time editor launch\r
-//\r
-BOOLEAN                       EditorFirst;\r
-\r
-//\r
-// it's time editor should exit\r
-//\r
-BOOLEAN                       EditorExit;\r
+/**\r
+  show help menu.\r
 \r
-BOOLEAN                       EditorMouseAction;\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+**/\r
+EFI_STATUS\r
+MainCommandDisplayHelp (\r
+  VOID\r
+  )\r
+{\r
+  INTN     CurrentLine=0;\r
+  CHAR16 * InfoString;\r
+  EFI_INPUT_KEY  Key;\r
+  \r
+  // print helpInfo      \r
+  for (CurrentLine = 0; 0 != MainMenuHelpInfo[CurrentLine]; CurrentLine++) {\r
+    InfoString = HiiGetString(gShellDebug1HiiHandle, MainMenuHelpInfo[CurrentLine], NULL);\r
+    ShellPrintEx (0,CurrentLine+1,L"%E%s%N",InfoString);        \r
+  }\r
+  \r
+  // scan for ctrl+w\r
+  do {\r
+    gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+  } while(SCAN_CONTROL_W != Key.UnicodeChar); \r
 \r
-extern EFI_EDITOR_FILE_BUFFER FileBuffer;\r
+  // update screen with file buffer's info\r
+  FileBufferRestorePosition ();\r
+  FileBufferNeedRefresh = TRUE;\r
+  FileBufferOnlyLineNeedRefresh = FALSE;\r
+  FileBufferRefresh ();  \r
 \r
-extern BOOLEAN                FileBufferMouseNeedRefresh;\r
+  return EFI_SUCCESS;\r
+}\r
 \r
-extern EFI_EDITOR_FILE_BUFFER FileBufferBackupVar;\r
+EFI_EDITOR_COLOR_ATTRIBUTES   OriginalColors;\r
+INTN                          OriginalMode;\r
 \r
-EFI_EDITOR_GLOBAL_EDITOR      MainEditor;\r
 \r
 //\r
 // basic initialization for MainEditor\r
@@ -1387,6 +1503,7 @@ MainEditorInit (
     return EFI_LOAD_ERROR;\r
   }\r
 \r
+  Status = ControlHotKeyInit (MainControlBasedMenuFunctions);\r
   Status = MenuBarInit (MainMenuItems);\r
   if (EFI_ERROR (Status)) {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_LIBEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
@@ -1508,7 +1625,6 @@ MainEditorRefresh (
   }\r
 \r
   if (EditorFirst) {\r
-    MenuBarRefresh (MainEditor.ScreenSize.Row, MainEditor.ScreenSize.Column);\r
     FileBufferRestorePosition ();\r
   }\r
 \r
@@ -1730,15 +1846,17 @@ MainEditorKeyInput (
       //\r
       // dispatch to different components' key handling function\r
       //\r
-      if ((Key.ScanCode == SCAN_NULL) || ((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
+      if (EFI_NOT_FOUND != MenuBarDispatchControlHotKey(&Key)) {\r
+        Status = EFI_SUCCESS;\r
+      } else if ((Key.ScanCode == SCAN_NULL) || ((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
         Status = FileBufferHandleInput (&Key);\r
       } else if ((Key.ScanCode >= SCAN_F1) && (Key.ScanCode <= SCAN_F12)) {\r
         Status = MenuBarDispatchFunctionKey (&Key);\r
       } else {\r
         StatusBarSetStatusString (L"Unknown Command");\r
-        FileBufferMouseNeedRefresh = FALSE;\r
+        FileBufferMouseNeedRefresh = FALSE;  \r
       }\r
-\r
+      \r
       if (Status != EFI_SUCCESS && Status != EFI_OUT_OF_RESOURCES) {\r
         //\r
         // not already has some error status\r