-<WANT_STRING>[^\n]+ { BEGIN(INITIAL); cmdyylval.string = sstrdup(yytext); return STR; }
-<WANT_WS_STRING>[ \t]* { BEGIN(WANT_STRING); return WHITESPACE; }
+ /* the next/prev/back_and_forth tokens are here to recognize them *before*
+ * handling strings ('workspace' command) */
+next { BEGIN(INITIAL); return TOK_NEXT; }
+prev { BEGIN(INITIAL); return TOK_PREV; }
+next_on_output { BEGIN(INITIAL); return TOK_NEXT_ON_OUTPUT; }
+prev_on_output { BEGIN(INITIAL); return TOK_PREV_ON_OUTPUT; }
+back_and_forth { BEGIN(INITIAL); return TOK_BACK_AND_FORTH; }
+
+<WANT_STRING>\"[^\"]+\" {
+ BEGIN(INITIAL);
+ /* strip quotes */
+ char *copy = sstrdup(yytext+1);
+ copy[strlen(copy)-1] = '\0';
+ cmdyylval.string = copy;
+ return STR;
+ }