STATIC void cmdlist(union node *np, int sep) { for (; np; np = np->narg.next) { if (!sep) cmdputs(" "); cmdtxt(np); if (sep && np->narg.next) cmdputs(" "); } }
void commandtext(struct procstat *ps, union node *n) { int len; cmdnextc = ps->cmd; if (iflag || mflag || sizeof ps->cmd < 100) len = sizeof(ps->cmd); else len = sizeof(ps->cmd) / 10; cmdnleft = len; cmdtxt(n); if (cmdnleft <= 0) { char *p = ps->cmd + len - 4; p[0] = '.'; p[1] = '.'; p[2] = '.'; p[3] = 0; } else *cmdnextc = '\0'; TRACE(("commandtext: ps->cmd %x, end %x, left %d\n\t\"%s\"\n", ps->cmd, cmdnextc, cmdnleft, ps->cmd)); }
STATIC void cmdtxt(union node *n) { union node *np; struct nodelist *lp; const char *p; int i; char s[2]; if (n == NULL || cmdnleft <= 0) return; switch (n->type) { case NSEMI: cmdtxt(n->nbinary.ch1); cmdputs("; "); cmdtxt(n->nbinary.ch2); break; case NAND: cmdtxt(n->nbinary.ch1); cmdputs(" && "); cmdtxt(n->nbinary.ch2); break; case NOR: cmdtxt(n->nbinary.ch1); cmdputs(" || "); cmdtxt(n->nbinary.ch2); break; case NPIPE: for (lp = n->npipe.cmdlist ; lp ; lp = lp->next) { cmdtxt(lp->n); if (lp->next) cmdputs(" | "); } break; case NSUBSHELL: cmdputs("("); cmdtxt(n->nredir.n); cmdputs(")"); break; case NREDIR: case NBACKGND: cmdtxt(n->nredir.n); break; case NIF: cmdputs("if "); cmdtxt(n->nif.test); cmdputs("; then "); cmdtxt(n->nif.ifpart); if (n->nif.elsepart) { cmdputs("; else "); cmdtxt(n->nif.elsepart); } cmdputs("; fi"); break; case NWHILE: cmdputs("while "); goto until; case NUNTIL: cmdputs("until "); until: cmdtxt(n->nbinary.ch1); cmdputs("; do "); cmdtxt(n->nbinary.ch2); cmdputs("; done"); break; case NFOR: cmdputs("for "); cmdputs(n->nfor.var); cmdputs(" in "); cmdlist(n->nfor.args, 1); cmdputs("; do "); cmdtxt(n->nfor.body); cmdputs("; done"); break; case NCASE: cmdputs("case "); cmdputs(n->ncase.expr->narg.text); cmdputs(" in "); for (np = n->ncase.cases; np; np = np->nclist.next) { cmdtxt(np->nclist.pattern); cmdputs(") "); cmdtxt(np->nclist.body); cmdputs(";; "); } cmdputs("esac"); break; case NDEFUN: cmdputs(n->narg.text); cmdputs("() { ... }"); break; case NCMD: cmdlist(n->ncmd.args, 1); cmdlist(n->ncmd.redirect, 0); break; case NARG: cmdputs(n->narg.text); break; case NTO: p = ">"; i = 1; goto redir; case NCLOBBER: p = ">|"; i = 1; goto redir; case NAPPEND: p = ">>"; i = 1; goto redir; case NTOFD: p = ">&"; i = 1; goto redir; case NFROM: p = "<"; i = 0; goto redir; case NFROMFD: p = "<&"; i = 0; goto redir; case NFROMTO: p = "<>"; i = 0; goto redir; redir: if (n->nfile.fd != i) { s[0] = n->nfile.fd + '0'; s[1] = '\0'; cmdputs(s); } cmdputs(p); if (n->type == NTOFD || n->type == NFROMFD) { s[0] = n->ndup.dupfd + '0'; s[1] = '\0'; cmdputs(s); } else { cmdtxt(n->nfile.fname); } break; case NHERE: case NXHERE: cmdputs("<<..."); break; default: cmdputs("???"); break; } }
void CmdPromptInput::processInput(const QChar& rapidChar) { qDebug("CmdPromptInput::processInput"); updateCurrentText(curText); QString cmdtxt(curText); cmdtxt.replace(0, prefix.length(), ""); if(!rapidFireEnabled) cmdtxt = cmdtxt.toLower(); if(cmdActive) { if(rapidFireEnabled) { if(rapidChar == Qt::Key_Enter || rapidChar == Qt::Key_Return) { emit appendHistory(curText); emit runCommand(curCmd, "RAPID_ENTER"); curText.clear(); clear(); return; } else if(rapidChar == Qt::Key_Space) { updateCurrentText(curText + " "); emit runCommand(curCmd, cmdtxt + " "); return; } else { emit runCommand(curCmd, cmdtxt); return; } } else { emit appendHistory(curText); emit runCommand(curCmd, cmdtxt); } } else { if(aliasHash->contains(cmdtxt)) { cmdActive = true; lastCmd = curCmd; curCmd = aliasHash->value(cmdtxt); emit appendHistory(curText); emit startCommand(curCmd); } else if(cmdtxt.isEmpty()) { cmdActive = true; emit appendHistory(curText); //Rerun the last successful command emit startCommand(lastCmd); } else { emit appendHistory(curText + " Unknown command \"" + cmdtxt + "\". Press F1 for help."); } } if(!rapidFireEnabled) clear(); }