FLUID: option to show terminal, clear terminal, and clear history

This commit is contained in:
Matthias Melcher 2023-12-14 19:40:29 +01:00
parent 673fa2e09c
commit 33d0718756
6 changed files with 206 additions and 19 deletions

View File

@ -965,6 +965,10 @@ Fl_Menu_Item menu_w_settings_shell_menu[] = {
{0,0,0,0,0,0,0,0,0}
};
static void cb_T(Fl_Button*, void* v) {
if (v!=LOAD) show_terminal_window();
}
Fl_Button *w_settings_shell_play=(Fl_Button *)0;
static void cb_w_settings_shell_play(Fl_Button* o, void* v) {
@ -1266,6 +1270,72 @@ static void cb_save2(Fl_Check_Button* o, void* v) {
}
}
static void cb_show(Fl_Check_Button* o, void* v) {
int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL));
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (!v) {
cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL;
} else {
cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}
}
static void cb_clear(Fl_Check_Button* o, void* v) {
int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL);
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (v) {
cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL;
} else {
cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}
}
static void cb_clear1(Fl_Check_Button* o, void* v) {
int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY);
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (v) {
cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY;
} else {
cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}
}
Fl_Box *w_settings_shell_fd_project=(Fl_Box *)0;
static const unsigned char idata_fd_project[] =
@ -2741,6 +2811,12 @@ itional data in code and project files.");
o->hide();
Fl_Group::current()->resizable(o);
} // Fl_Box* o
{ Fl_Button* o = new Fl_Button(246, 200, 24, 22, "T");
o->tooltip("show terminal window");
o->labelfont(5);
o->labelsize(11);
o->callback((Fl_Callback*)cb_T);
} // Fl_Button* o
{ w_settings_shell_play = new Fl_Button(270, 200, 50, 22, "Run");
w_settings_shell_play->tooltip("run the selected shell command");
w_settings_shell_play->labelsize(11);
@ -2852,24 +2928,42 @@ le");
o->end();
Fl_Group::current()->resizable(o);
} // Fl_Group* o
{ Fl_Check_Button* o = new Fl_Check_Button(100, 458, 220, 20, "save .fl project file");
{ Fl_Check_Button* o = new Fl_Check_Button(100, 458, 110, 20, "save .fl project file");
o->tooltip("save the project to the .fl file before running the command");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_save);
} // Fl_Check_Button* o
{ Fl_Check_Button* o = new Fl_Check_Button(100, 478, 220, 19, "save source code");
{ Fl_Check_Button* o = new Fl_Check_Button(100, 478, 110, 19, "save source code");
o->tooltip("generate the source code and header file before running the command");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_save1);
} // Fl_Check_Button* o
{ Fl_Check_Button* o = new Fl_Check_Button(100, 497, 220, 20, "save i18n strings");
{ Fl_Check_Button* o = new Fl_Check_Button(100, 498, 110, 20, "save i18n strings");
o->tooltip("save the internationalisation strings before running the command");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_save2);
} // Fl_Check_Button* o
{ Fl_Check_Button* o = new Fl_Check_Button(214, 458, 106, 20, "show terminal");
o->tooltip("show the terminal window when launching this script");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_show);
} // Fl_Check_Button* o
{ Fl_Check_Button* o = new Fl_Check_Button(214, 478, 106, 19, "clear terminal");
o->tooltip("clear the teminal window before running this script");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_clear);
} // Fl_Check_Button* o
{ Fl_Check_Button* o = new Fl_Check_Button(214, 498, 106, 19, "clear term history");
o->tooltip("clear the teminal history in the terminal window");
o->down_box(FL_DOWN_BOX);
o->labelsize(11);
o->callback((Fl_Callback*)cb_clear1);
} // Fl_Check_Button* o
w_settings_shell_cmd->end();
Fl_Group::current()->resizable(w_settings_shell_cmd);
} // Fl_Group* w_settings_shell_cmd

View File

@ -1014,6 +1014,11 @@ if (v==LOAD) {
Fl_Box {} {
xywh {253 200 13 22} hide resizable
}
Fl_Button {} {
label T
callback {if (v!=LOAD) show_terminal_window();}
tooltip {show terminal window} xywh {246 200 24 22} labelfont 5 labelsize 11
}
Fl_Button w_settings_shell_play {
label Run
callback {int selected = w_settings_shell_list_selected;
@ -1348,7 +1353,7 @@ if (v == LOAD) {
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {save the project to the .fl file before running the command} xywh {100 458 220 20} down_box DOWN_BOX labelsize 11
tooltip {save the project to the .fl file before running the command} xywh {100 458 110 20} down_box DOWN_BOX labelsize 11
}
Fl_Check_Button {} {
label {save source code}
@ -1371,7 +1376,7 @@ if (v == LOAD) {
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {generate the source code and header file before running the command} xywh {100 478 220 19} down_box DOWN_BOX labelsize 11
tooltip {generate the source code and header file before running the command} xywh {100 478 110 19} down_box DOWN_BOX labelsize 11
}
Fl_Check_Button {} {
label {save i18n strings}
@ -1394,7 +1399,76 @@ if (v == LOAD) {
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {save the internationalisation strings before running the command} xywh {100 497 220 20} down_box DOWN_BOX labelsize 11
tooltip {save the internationalisation strings before running the command} xywh {100 498 110 20} down_box DOWN_BOX labelsize 11
}
Fl_Check_Button {} {
label {show terminal}
callback {int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(!(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::DONT_SHOW_TERMINAL));
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (!v) {
cmd->flags |= Fd_Shell_Command::DONT_SHOW_TERMINAL;
} else {
cmd->flags &= ~Fd_Shell_Command::DONT_SHOW_TERMINAL;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {show the terminal window when launching this script} xywh {214 458 106 20} down_box DOWN_BOX labelsize 11
}
Fl_Check_Button {} {
label {clear terminal}
callback {int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_TERMINAL);
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (v) {
cmd->flags |= Fd_Shell_Command::CLEAR_TERMINAL;
} else {
cmd->flags &= ~Fd_Shell_Command::CLEAR_TERMINAL;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {clear the teminal window before running this script} xywh {214 478 106 19} down_box DOWN_BOX labelsize 11
}
Fl_Check_Button {} {
label {clear term history}
callback {int selected = w_settings_shell_list_selected;
if (v == LOAD) {
if (selected) {
o->value(g_shell_config->list[selected-1]->flags & Fd_Shell_Command::CLEAR_HISTORY);
} else {
o->value(0);
}
} else {
if (selected) {
Fd_Shell_Command *cmd = g_shell_config->list[selected-1];
int v = o->value();
if (v) {
cmd->flags |= Fd_Shell_Command::CLEAR_HISTORY;
} else {
cmd->flags &= ~Fd_Shell_Command::CLEAR_HISTORY;
}
if (cmd->storage == FD_STORE_PROJECT) set_modflag(1);
}
}}
tooltip {clear the teminal history in the terminal window} xywh {214 498 106 19} down_box DOWN_BOX labelsize 11
}
}
Fl_Box w_settings_shell_fd_project {
@ -1607,3 +1681,6 @@ shell_run_window->hide();}
decl {Fl_Menu_Item *w_layout_menu_storage[4];} {private global
}
Function {make_window()} {open
} {}

View File

@ -134,4 +134,5 @@ extern Fl_Double_Window *shell_run_window;
extern Fl_Terminal *shell_run_terminal;
extern Fl_Return_Button *shell_run_button;
Fl_Double_Window* make_shell_window();
void make_window();
#endif

View File

@ -383,6 +383,22 @@ static void expand_macros(Fl_String &cmd) {
expand_macro(cmd, "@TMPDIR@", get_tmpdir());
}
/**
Show the terminal window where it was last positioned.
*/
void show_terminal_window() {
Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos");
int x, y, w, h;
pos.get("x", x, -1);
pos.get("y", y, 0);
pos.get("w", w, 640);
pos.get("h", h, 480);
if (x!=-1) {
shell_run_window->resize(x, y, w, h);
}
shell_run_window->show();
}
/**
Prepare for and run a shell command.
@ -400,20 +416,17 @@ void run_shell_command(const Fl_String &cmd, int flags) {
Fl_String expanded_cmd = cmd;
expand_macros(expanded_cmd);
if (!shell_run_window->visible()) {
Fl_Preferences pos(fluid_prefs, "shell_run_Window_pos");
int x, y, w, h;
pos.get("x", x, -1);
pos.get("y", y, 0);
pos.get("w", w, 640);
pos.get("h", h, 480);
if (x!=-1) {
shell_run_window->resize(x, y, w, h);
}
shell_run_window->show();
if ( ((flags & Fd_Shell_Command::DONT_SHOW_TERMINAL) == 0)
&& (!shell_run_window->visible()))
{
show_terminal_window();
}
// Show the output window and clear things...
if (flags & Fd_Shell_Command::CLEAR_TERMINAL)
shell_run_terminal->printf("\033[2J\033[H");
if (flags & Fd_Shell_Command::CLEAR_HISTORY)
shell_run_terminal->printf("\033[3J");
shell_run_terminal->printf("\033[0;32m%s\033[0m\n", expanded_cmd.c_str());
shell_run_window->label(expanded_cmd.c_str());

View File

@ -42,6 +42,7 @@ class Fl_Preferences;
char preferences_get(Fl_Preferences &prefs, const char *key, Fl_String &value, const Fl_String &defaultValue);
char preferences_set(Fl_Preferences &prefs, const char *key, const Fl_String &value);
void show_terminal_window();
void run_shell_command(const Fl_String &cmd, int flags);
bool shell_command_running(void);
@ -79,7 +80,8 @@ protected:
class Fd_Shell_Command {
public:
enum { ALWAYS, NEVER, MAC_ONLY, UX_ONLY, WIN_ONLY, MAC_AND_UX_ONLY, USER_ONLY, HOST_ONLY, ENV_ONLY }; // conditions
enum { SAVE_PROJECT = 1, SAVE_SOURCECODE = 2, SAVE_STRINGS = 4, SAVE_ALL = 7 }; // flags
enum { SAVE_PROJECT = 1, SAVE_SOURCECODE = 2, SAVE_STRINGS = 4, SAVE_ALL = 7,
DONT_SHOW_TERMINAL = 8, CLEAR_TERMINAL = 16, CLEAR_HISTORY = 32 }; // flags
Fd_Shell_Command();
Fd_Shell_Command(const Fd_Shell_Command *rhs);
Fd_Shell_Command(const Fl_String &in_name);

View File

@ -26,6 +26,6 @@ int main(int argc, char **argv) {
box->labelsize(36);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show(argc, argv);
window->show();//argc, argv);
return Fl::run();
}