68 commandLine(
""), cursorPosition(1),
69 commandHistory(maxhist), maxHistory(maxhist),
70 currentHistoryNo(1), relativeHistoryIndex(0)
77 const char* path = getenv(
"HOME");
78 if( path == NULL )
return;
83 std::ifstream histfile;
84 enum { BUFSIZE= 1024 };
char linebuf[BUFSIZE];
87 while (histfile.good()) {
88 if(histfile.eof())
break;
90 histfile.getline(linebuf, BUFSIZE);
103 const char* path = getenv(
"HOME");
104 if( path == NULL )
return;
109 std::ofstream histfile;
110 histfile.open(fname, std::ios::out);
156 std::ostringstream os;
407 if(jhead !=
G4int(G4String::npos)) {
417 if( !input.empty() ) {
420 for(
G4int i=len-1; i>=0; i--) {
421 if(input[(
size_t)i]==
'/') {
428 if(!(indx==0 && len==1)) vcmd= input(indx+1,len-indx-1);
446 if(jhead !=
G4int(G4String::npos)) {
452 size_t thead = input.find_last_of(
'/');
454 if (thead != G4String::npos) strtail = input(thead+1, input.size()-thead-1);
463 for(
G4int i=len-1; i>=0; i--) {
471 if(!(indx==0 && len==1)) vcmd= input(indx+1,len-indx-1);
475 if(atree == NULL)
return;
482 int Ndir= atree-> GetTreeEntry();
483 int Ncmd= atree-> GetCommandEntry();
486 for(
G4int idir=1; idir<=Ndir; idir++) {
487 G4String fpdir= atree-> GetTree(idir)-> GetPathName();
489 if( fpdir.
index(inputpath, 0) == 0) {
501 for(
G4int icmd=1; icmd<=Ncmd; icmd++){
502 G4String fpcmd= atree-> GetPathName() +
503 atree-> GetCommand(icmd) -> GetCommandName();
505 if( fpcmd.
index(inputpath, 0) ==0) {
519 jhead= input.
last(
' ');
520 if(jhead ==
G4int(G4String::npos)) jhead=0;
528 for(i=jt; i<=
G4int(input.length())-1; i++) dspstr+=
G4String(
' ');
531 dspstr+= (vpath + stream);
532 if (nMatch == 0) dspstr+= strtail;
533 G4cout << dspstr << std::flush;
537 input+= (vpath + stream);
538 if (nMatch==0) input+= strtail;
613 if (cc ==
'[' || cc ==
'O') {
642 }
while( cc !=
'\n');
660 while( (newCommand.length() > 0) &&
661 ( newCommand[newCommand.length()-1] ==
'_') ) {
662 newCommand.
remove(newCommand.length()-1);
667 newCommand.
append(newLine);
672 for (
size_t i=0; i<newCommand.length(); i++) {
673 if(newCommand[i] !=
' ') {
678 if( !newCommand.empty() && isMeaningfull)
StoreHistory(newCommand);
692 int nlen1= str1.length();
693 int nlen2= str2.length();
695 int nmin = nlen1<nlen2 ? nlen1 : nlen2;
698 for(
size_t i=0;
G4int(i)<nmin; i++){
699 if(str1[i]==str2[i]) {
700 strMatched+= str1[i];
742 termios tiosbuf=
tios;
744 tiosbuf.c_iflag &= ~(BRKINT | ISTRIP);
745 tiosbuf.c_iflag |= (IGNBRK | IGNPAR);
746 tiosbuf.c_lflag &= ~(ICANON | IEXTEN | ECHO);
747 tiosbuf.c_cc[VMIN] = 1;
748 tiosbuf.c_cc[VTIME] = 0;
750 tcsetattr(0, TCSAFLUSH, &tiosbuf);
758 tcsetattr(0, TCSAFLUSH, &
tios);
G4bool IsCursorLast() const
void StoreHistory(G4String aCommand)
G4String & remove(str_size)
static const char AsciiESC
virtual void MakePrompt(const char *msg=0)
G4UItcsh(const G4String &prompt="%s> ", G4int maxhist=100)
static const char AsciiCtrL
static const char AsciiCtrD
G4int relativeHistoryIndex
static const int AsciiPrintableMin
static const char AsciiCtrC
void InsertCharacter(char cc)
G4String GetCommandPathTail(const G4String &apath) const
static const char AsciiCtrS
str_size index(const char *, G4int pos=0) const
static const char AsciiCtrZ
static const char AsciiCtrQ
void ListMatchedCommand()
static const char AsciiTAB
G4String GetFirstMatchedString(const G4String &str1, const G4String &str2) const
static const char AsciiCtrF
void BackspaceCharacter()
static const char AsciiCtrP
G4String RestoreHistory(G4int index)
static const char AsciiDEL
G4String strip(G4int strip_Type=trailing, char c=' ')
static const char AsciiCtrN
static const char AsciiCtrB
static const char AsciiCtrE
G4UIcommandTree * GetCommandTree(const G4String &dir) const
virtual G4String GetCommandLineString(const char *msg=0)
std::vector< G4String > commandHistory
static const G4String historyFileName
void SetTermToInputMode()
virtual void ResetTerminal()
G4ApplicationState GetCurrentState() const
virtual void ListCommand(const G4String &input, const G4String &candidate="") const
static const char AsciiCtrK
G4GLOB_DLL std::ostream G4cout
G4String currentCommandDir
G4String & append(const G4String &)
void InitializeCommandLine()
static const char AsciiCtrA
static const char AsciiBS
G4String GetAbsCommandDirPath(const G4String &apath) const
static G4StateManager * GetStateManager()