int colouriseProcs() { struct Filter *filter; struct Process *proc; for (proc = first_process; (proc->next_process); proc = proc->next_process) { if ( !TESTOPT(OPT_KERNEL) && (proc->size == 0)) { continue; } if (first_filter == NULL ) { proc->colour = 1; continue; } for(filter = first_filter; (filter); filter = filter->next_filter) { if ((filter->pid > 0) && filter->pid == proc->pid) { colourise(proc); continue; } else if ((filter->name) && 0 == strcmp(filter->name, (proc->has_commandline? fullArgv(proc):proc->name))) { colourise(proc); continue; } else if ((filter->regular_expression) && 0 == regexec(&filter->preg, (proc->has_commandline? fullArgv(proc):proc->name), 0, 0, 0)) { colourise(proc); } } } return 0; }
int cook_prompt_if_necessary () { char *pre_cooked, *filtered, *uncoloured; filtered = NULL; if (saved_rl_state.cooked_prompt) return FALSE; /* cooked already */ pre_cooked = mysavestring(saved_rl_state.raw_prompt); unbackspace(pre_cooked); if ( (prompt_regexp && ! match_regexp(pre_cooked, prompt_regexp, FALSE)) || /* raw prompt doesn't match '--only-cook' regexp */ (strcmp((filtered = pass_through_filter(TAG_PROMPT, pre_cooked)), "_THIS_CANNOT_BE_A_PROMPT_")== 0)) { /* filter has "refused" the prompt */ saved_rl_state.cooked_prompt = (impatient_prompt ? mysavestring(pre_cooked) : mysavestring("")); /* don't cook, eat raw (and eat nothing if patient) */ free(pre_cooked); free(filtered); /* free(NULL) is not an error */ return FALSE; } free(pre_cooked); if(substitute_prompt) { uncoloured = mysavestring(substitute_prompt); free(filtered); } else { uncoloured = filtered; } if (colour_the_prompt) { saved_rl_state.cooked_prompt = colourise(uncoloured); free(uncoloured); } else { saved_rl_state.cooked_prompt = uncoloured; } return TRUE; }
int cook_prompt_if_necessary () { char *pre_cooked, *rubbish_from_alternate_screen, *filtered, *uncoloured, *cooked, *p, *non_rubbish = NULL; static char **term_ctrl_seqs[] = {&term_rmcup, &term_rmkx, NULL}; /* (NULL-terminated) list of (pointers to) term control sequences that may be used by clients to return from an 'alternate screen'. If we spot one of those, assume that it, and anything before it, is rubbish and better left untouched */ char ***tcptr; filtered = NULL; DPRINTF2(DEBUG_READLINE, "Prompt <%s>: %s", saved_rl_state.raw_prompt, prompt_is_still_uncooked ? "still raw" : "cooked already"); if (saved_rl_state.cooked_prompt) /* if (!prompt_is_still_uncooked) bombs with multi-line paste. Apparently prompt_is_still_uncooked can be FALSE while saved_rl_state.cooked_prompt = NULL. Ouch!@@@! */ return FALSE; /* cooked already */ pre_cooked = mysavestring(saved_rl_state.raw_prompt); for (tcptr = term_ctrl_seqs; *tcptr; tcptr++) { /* find last occurence of one of term_ctrl_seq */ if (**tcptr && (p = mystrstr(pre_cooked, **tcptr))) { p += strlen(**tcptr); /* p now points 1 char past term control sequence */ if (p > non_rubbish) non_rubbish = p; } } /* non_rubbish now points 1 past the last 'alternate screen terminating' control char in prompt */ if (non_rubbish) { rubbish_from_alternate_screen = pre_cooked; pre_cooked = mysavestring(non_rubbish); *non_rubbish = '\0'; /* 0-terminate rubbish_from_alternate_screen */ } else { rubbish_from_alternate_screen = mysavestring(""); } unbackspace(pre_cooked); /* programs that display a running counter would otherwise make rlwrap keep prompts like " 1%\r 2%\r 3%\ ......" */ if ( /* raw prompt doesn't match '--only-cook' regexp */ (prompt_regexp && ! match_regexp(pre_cooked, prompt_regexp, FALSE)) || /* now filter it, but filter may "refuse" the prompt */ (strcmp((filtered = pass_through_filter(TAG_PROMPT, pre_cooked)), "_THIS_CANNOT_BE_A_PROMPT_")== 0)) { /* don't cook, eat raw (and eat nothing if patient) */ saved_rl_state.cooked_prompt = (impatient_prompt ? mysavestring(pre_cooked) : mysavestring("")); /* NB: if impatient, the rubbish_from_alternate_screen has been output already, no need to send it again */ free(pre_cooked); free(filtered); /* free(NULL) is never an error */ return FALSE; } free(pre_cooked); if(substitute_prompt) { uncoloured = mysavestring(substitute_prompt); free(filtered); } else { uncoloured = filtered; } if (colour_the_prompt) { cooked = colourise(uncoloured); free(uncoloured); } else { cooked = uncoloured; } if (! impatient_prompt) /* in this case our rubbish hasn't been output yet. Output it now, but don't store it in the prompt, as this may be re-printed e.g. after resuming a suspended rlwrap */ write_patiently(STDOUT_FILENO,rubbish_from_alternate_screen, strlen(rubbish_from_alternate_screen), "to stdout"); saved_rl_state.cooked_prompt = cooked; return TRUE; }
/* PaletteEntryPanel::handleAction * Handles the action [id]. Returns true if the action was handled, * false otherwise *******************************************************************/ bool PaletteEntryPanel::handleAction(string id) { // Ignore if hidden if (!isActivePanel()) return false; // Only interested in "ppal_" events if (!id.StartsWith("ppal_")) return false; // Add to custom palettes if (id == "ppal_addcustom") { addCustomPalette(); return true; } // Test palette else if (id == "ppal_test") { testPalette(); return true; } // Export As else if (id == "ppal_exportas") { exportAs(); return true; } // Import From else if (id == "ppal_importfrom") { importFrom(); return true; } // Generate Palettes if (id == "ppal_generate") { generatePalettes(); return true; } // Generate Colormaps if (id == "ppal_colormap") { generateColormaps(); return true; } // Colourise else if (id == "ppal_colourise") { colourise(); return true; } // Tint else if (id == "ppal_tint") { tint(); return true; } // Tweak else if (id == "ppal_tweak") { tweak(); return true; } // Invert else if (id == "ppal_invert") { invert(); return true; } // Move Up else if (id == "ppal_moveup") { move(true); return true; } // Move Down else if (id == "ppal_movedown") { move(false); return true; } // Duplicate else if (id == "ppal_duplicate") { duplicate(); return true; } // Remove else if (id == "ppal_remove") { clearOne(); return true; } // Remove Others else if (id == "ppal_removeothers") { clearOthers(); return true; } // Some debug/reverse engineering stuff else if (id == "ppal_report") { analysePalettes(); return true; } return false; }