diff --git a/native/src/main.cpp b/native/src/main.cpp index 8cc0d50..3662b8f 100644 --- a/native/src/main.cpp +++ b/native/src/main.cpp @@ -41,6 +41,7 @@ void do_new(Fl_Widget *w, void *data) { file_name = ""; buffer.remove(0, buffer.length()); top.status1->value(empty_status); + top.status2->value(""); top.status3->value(""); modified = false; } @@ -49,11 +50,11 @@ void load_file(const char *name, bool change=true) { fl_message_title(window_title); switch (buffer.loadfile(name)) { case 0: + top.status1->value("Opened"); if (change) { file_name = name; top.status2->value(fl_filename_name(name)); } - top.status1->value("Opened"); top.status3->value(""); modified = false; break; @@ -90,11 +91,11 @@ void save_file(const char *name, bool change=true) { fl_message_title(window_title); switch (buffer.savefile(name)) { case 0: + top.status1->value("Saved"); if (change) { file_name = name; top.status2->value(fl_filename_name(name)); } - top.status1->value("Saved"); top.status3->value(""); modified = false; break; @@ -318,6 +319,27 @@ void do_prefix_lines(Fl_Widget *w, void *data) { } } +void do_number_lines(Fl_Widget *w, void *data) { + if (buffer.selected()) { + char *t = buffer.selection_text(); + std::stringstream sel(t); + free(t); + std::string line; + std::string result; + int n = 0; + while (std::getline(sel, line)) { + n++; + result += std::to_string(n); + result += ". "; + result += line; + result += "\n"; + } + buffer.replace_selection(result.c_str()); + } else { + top.status1->value("Nothing selected"); + } +} + void toggle_word_wrap(Fl_Widget *w, void *data) { if (word_wrap) { top.editor->wrap_mode(Fl_Text_Editor::WRAP_NONE, 80); @@ -386,6 +408,7 @@ const Fl_Menu_Item menu_items[] = { { " &Upper case", FL_ALT + 'u', do_upper_case, 0, FL_MENU_DIVIDER }, { " &Prefix lines... ", FL_ALT + 'p', do_prefix_lines }, + { " &Number lines ", FL_ALT + 'n', do_number_lines }, { 0 }, { "&View", 0, 0, 0, FL_SUBMENU }, { " &Word wrap", 0, toggle_word_wrap, 0,