Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // 28 29 #ifndef G4UItcsh_h 30 #define G4UItcsh_h 1 31 32 #if ! (defined(WIN32) || defined(__MINGW32__)) 33 34 # include "G4UIcommand.hh" 35 # include "G4UIcommandTree.hh" 36 # include "G4VUIshell.hh" 37 38 # include <termios.h> 39 40 # include <vector> 41 42 // ==================================================================== 43 // Description: 44 // This class gives tcsh-like shell. 45 // 46 // If your terminal supports color code, colored strings are available 47 // in ListCommand(). For activating color support, 48 // e.g. 49 // tcsh-> SetLsColor(GREEN, CYAN); // (dir, command) color 50 // 51 // [key binding] 52 // ^A ... move cursor to the top 53 // ^B ... backward cursor ([LEFT]) 54 // ^D ... delete/exit/show matched list 55 // ^E ... move cursor to the end 56 // ^F ... forward cursor ([RIGHT]) 57 // ^K ... clear after the cursor 58 // ^L ... clear screen (not implemented) 59 // ^N ... next command ([DOWN]) 60 // ^P ... previous command ([UP]) 61 // TAB... command completion 62 // DEL... backspace 63 // BS ... backspace 64 // 65 // [prompt string substitution] 66 // %s ... current application status 67 // %/ ... current working directory 68 // %h ... history# (different from G4 history#) 69 // 70 // ==================================================================== 71 72 class G4UItcsh : public G4VUIshell 73 { 74 public: 75 G4UItcsh(const G4String& prompt = "%s> ", G4int maxhist = 100); 76 ~G4UItcsh() override; 77 78 void SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor) override; 79 G4String GetCommandLineString(const char* msg = nullptr) override; 80 81 void ResetTerminal() override; 82 83 protected: 84 void MakePrompt(const char* msg = nullptr) override; 85 86 // Is cursor position at the last of command line ? 87 G4bool IsCursorLast() const; 88 89 void InitializeCommandLine(); 90 G4String ReadLine(); 91 92 // insert character 93 void InsertCharacter(char cc); 94 95 // backspace character 96 void BackspaceCharacter(); 97 98 // delete character 99 void DeleteCharacter(); 100 101 // clear command line 102 void ClearLine(); 103 104 // clear after the cursor 105 void ClearAfterCursor(); 106 107 // clear screen 108 void ClearScreen(); 109 110 // move cursor forward 111 void ForwardCursor(); 112 113 // move cursor backward 114 void BackwardCursor(); 115 116 // move cursor to the top 117 void MoveCursorTop(); 118 119 // move cursor to the end 120 void MoveCursorEnd(); 121 122 // next command 123 void NextCommand(); 124 125 // previous command 126 void PreviousCommand(); 127 128 // list matched commands 129 void ListMatchedCommand(); 130 131 // complete command 132 void CompleteCommand(); 133 134 // utilities... 135 G4String GetFirstMatchedString(const G4String& str1, const G4String& str2) const; 136 137 void StoreHistory(G4String aCommand); 138 139 // index is global history# 140 G4String RestoreHistory(G4int index); 141 142 void SetTermToInputMode(); 143 void RestoreTerm(); 144 145 G4String commandLine; // command line string; 146 G4int cursorPosition; // cursor position 147 G4String commandLineBuf; // temp. command line; 148 // history functionality (history# is managed in itself) 149 std::vector<G4String> commandHistory; 150 G4int maxHistory; // max# of histories stored 151 G4int currentHistoryNo; // global 152 G4int relativeHistoryIndex; // local index relative to current history# 153 // (re)set termios 154 termios tios; // terminal mode (prestatus) 155 G4String clearString; // "clear code (^L)" 156 }; 157 158 // ==================================================================== 159 // inline functions 160 // ==================================================================== 161 inline G4bool G4UItcsh::IsCursorLast() const 162 { 163 return cursorPosition == G4int(commandLine.length() + 1); 164 } 165 166 inline void G4UItcsh::SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor) 167 { 168 lsColorFlag = true; 169 directoryColor = dirColor; 170 commandColor = cmdColor; 171 } 172 173 #endif 174 #endif 175