editmenu.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. /* editor menu definitions and initialisation
  2. Copyright (C) 1996 the Free Software Foundation
  3. Authors: 1996, 1997 Paul Sheer
  4. $Id$
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  16. 02111-1307, USA.
  17. */
  18. #include <config.h>
  19. #include "edit.h"
  20. #include "src/user.h"
  21. #include "editcmddef.h"
  22. #undef edit_message_dialog
  23. #define edit_message_dialog(w,x,y,h,s) query_dialog (h, s, 0, 1, _("&Ok"))
  24. #define CFocus(x)
  25. static void menu_cmd (int i)
  26. {
  27. send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_COMMAND, i);
  28. }
  29. static void menu_key (int i)
  30. {
  31. send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_KEY, i);
  32. }
  33. void edit_wrap_cmd (void)
  34. {
  35. char *f;
  36. char s[12];
  37. sprintf (s, "%d", option_word_wrap_line_length);
  38. f = input_dialog (_(" Word wrap "),
  39. _(" Enter line length, 0 for off: "), s);
  40. if (f) {
  41. if (*f) {
  42. option_word_wrap_line_length = atoi (f);
  43. }
  44. g_free (f);
  45. }
  46. }
  47. void edit_about_cmd (void)
  48. {
  49. edit_message_dialog (wedit->mainid, 20, 20, _(" About "),
  50. _("\n"
  51. " Cooledit v3.11.5\n"
  52. "\n"
  53. " Copyright (C) 1996 the Free Software Foundation\n"
  54. "\n"
  55. " A user friendly text editor written\n"
  56. " for the Midnight Commander.\n")
  57. );
  58. }
  59. void menu_mail_cmd (void) { menu_cmd (CK_Mail); }
  60. void menu_load_cmd (void) { menu_cmd (CK_Load); }
  61. void menu_new_cmd (void) { menu_cmd (CK_New); }
  62. void menu_save_cmd (void) { menu_cmd (CK_Save); }
  63. void menu_save_as_cmd (void) { menu_cmd (CK_Save_As); }
  64. void menu_insert_file_cmd (void) { menu_cmd (CK_Insert_File); }
  65. void menu_quit_cmd (void) { menu_cmd (CK_Exit); }
  66. void menu_mark_cmd (void) { menu_cmd (CK_Mark); }
  67. void menu_markcol_cmd (void) { menu_cmd (CK_Column_Mark); }
  68. void menu_ins_cmd (void) { menu_cmd (CK_Toggle_Insert); }
  69. void menu_copy_cmd (void) { menu_cmd (CK_Copy); }
  70. void menu_move_cmd (void) { menu_cmd (CK_Move); }
  71. void menu_delete_cmd (void) { menu_cmd (CK_Remove); }
  72. void menu_cut_cmd (void) { menu_cmd (CK_Save_Block); }
  73. void menu_search_cmd (void) { menu_cmd (CK_Find); }
  74. void menu_search_again_cmd (void) { menu_cmd (CK_Find_Again); }
  75. void menu_replace_cmd (void) { menu_cmd (CK_Replace); }
  76. void menu_begin_record_cmd (void) { menu_cmd (CK_Begin_Record_Macro); }
  77. void menu_end_record_cmd (void) { menu_cmd (CK_End_Record_Macro); }
  78. void menu_wrap_cmd (void) { edit_wrap_cmd (); }
  79. void menu_exec_macro_cmd (void) { menu_key (XCTRL ('a')); }
  80. void menu_exec_macro_delete_cmd (void) { menu_cmd (CK_Delete_Macro); }
  81. void menu_c_form_cmd (void) { menu_key (KEY_F (19)); }
  82. void menu_ispell_cmd (void) { menu_cmd (CK_Pipe_Block (1)); }
  83. void menu_sort_cmd (void) { menu_cmd (CK_Sort); }
  84. void menu_date_cmd (void) { menu_cmd (CK_Date); }
  85. void menu_undo_cmd (void) { menu_cmd (CK_Undo); }
  86. void menu_beginning_cmd (void) { menu_cmd (CK_Beginning_Of_Text); }
  87. void menu_end_cmd (void) { menu_cmd (CK_End_Of_Text); }
  88. void menu_refresh_cmd (void) { menu_cmd (CK_Refresh); }
  89. void menu_goto_line (void) { menu_cmd (CK_Goto); }
  90. void menu_goto_bracket (void) { menu_cmd (CK_Match_Bracket); }
  91. void menu_lit_cmd (void) { menu_key (XCTRL ('q')); }
  92. void menu_format_paragraph (void) { menu_cmd (CK_Paragraph_Format); }
  93. void edit_options_dialog (void);
  94. void menu_options (void) { edit_options_dialog (); }
  95. void menu_user_menu_cmd (void) { menu_key (KEY_F (11)); }
  96. void edit_user_menu_cmd (void) { menu_edit_cmd (1); }
  97. static menu_entry FileMenu[] =
  98. {
  99. {' ', N_("&Open file..."), 'O', menu_load_cmd},
  100. {' ', N_("&New C-n"), 'N', menu_new_cmd},
  101. {' ', "", ' ', 0},
  102. {' ', N_("&Save F2"), 'S', menu_save_cmd},
  103. {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
  104. {' ', "", ' ', 0},
  105. {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
  106. {' ', N_("copy to &File... C-f"), 'F', menu_cut_cmd},
  107. {' ', "", ' ', 0},
  108. {' ', N_("&User menu... F11"), 'U', menu_user_menu_cmd},
  109. /* {' ', N_("Menu edi&Tor edit "), 'T', edit_user_menu_cmd}, */
  110. {' ', "", ' ', 0},
  111. {' ', N_("a&Bout... "), 'B', edit_about_cmd},
  112. {' ', "", ' ', 0},
  113. {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
  114. };
  115. static menu_entry FileMenuEmacs[] =
  116. {
  117. {' ', N_("&Open file..."), 'O', menu_load_cmd},
  118. {' ', N_("&New C-x k"), 'N', menu_new_cmd},
  119. {' ', "", ' ', 0},
  120. {' ', N_("&Save F2"), 'S', menu_save_cmd},
  121. {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
  122. {' ', "", ' ', 0},
  123. {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
  124. {' ', N_("copy to &File... "), 'F', menu_cut_cmd},
  125. {' ', "", ' ', 0},
  126. {' ', N_("&User menu... F11"), 'U', menu_user_menu_cmd},
  127. /* {' ', N_("Menu edi&Tor edit "), 'T', edit_user_menu_cmd}, */
  128. {' ', "", ' ', 0},
  129. {' ', N_("a&Bout... "), 'B', edit_about_cmd},
  130. {' ', "", ' ', 0},
  131. {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
  132. };
  133. static menu_entry EditMenu[] =
  134. {
  135. {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
  136. {' ', N_("&Mark Columns S-F3"), 'T', menu_markcol_cmd},
  137. {' ', "", ' ', 0},
  138. {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
  139. {' ', "", ' ', 0},
  140. {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
  141. {' ', N_("&Move F6"), 'M', menu_move_cmd},
  142. {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
  143. {' ', "", ' ', 0},
  144. {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
  145. {' ', "", ' ', 0},
  146. {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
  147. {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
  148. };
  149. static menu_entry EditMenuEmacs[] =
  150. {
  151. {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
  152. {' ', N_("&Mark Columns S-F3"), 'T', menu_markcol_cmd},
  153. {' ', "", ' ', 0},
  154. {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
  155. {' ', "", ' ', 0},
  156. {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
  157. {' ', N_("&Move F6"), 'M', menu_move_cmd},
  158. {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
  159. {' ', "", ' ', 0},
  160. {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
  161. {' ', "", ' ', 0},
  162. {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
  163. {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
  164. };
  165. static menu_entry SearReplMenu[] =
  166. {
  167. {' ', N_("&Search... F7"), 'S', menu_search_cmd},
  168. {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
  169. {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
  170. };
  171. static menu_entry SearReplMenuEmacs[] =
  172. {
  173. {' ', N_("&Search... F7"), 'S', menu_search_cmd},
  174. {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
  175. {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
  176. };
  177. static menu_entry CmdMenu[] =
  178. {
  179. {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
  180. {' ', N_("goto matching &Bracket M-b"), 'B', menu_goto_bracket},
  181. {' ', "", ' ', 0},
  182. {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
  183. {' ', "", ' ', 0},
  184. {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
  185. {' ', "", ' ', 0},
  186. {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
  187. {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
  188. {' ', N_("&Execute macro... C-a, KEY"), 'E', menu_exec_macro_cmd},
  189. {' ', N_("delete macr&O... "), 'O', menu_exec_macro_delete_cmd},
  190. {' ', "", ' ', 0},
  191. {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
  192. {' ', "", ' ', 0},
  193. {' ', N_("format p&Aragraph M-p"), 'A', menu_format_paragraph},
  194. {' ', N_("'ispell' s&Pell check C-p"), 'P', menu_ispell_cmd},
  195. {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
  196. {' ', N_("E&xternal Formatter F19"), 'C', menu_c_form_cmd},
  197. {' ', N_("&Mail... "), 'M', menu_mail_cmd}
  198. };
  199. static menu_entry CmdMenuEmacs[] =
  200. {
  201. {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
  202. {' ', N_("goto matching &Bracket M-b"), 'B', menu_goto_bracket},
  203. {' ', "", ' ', 0},
  204. {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
  205. {' ', "", ' ', 0},
  206. {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
  207. {' ', "", ' ', 0},
  208. {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
  209. {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
  210. {' ', N_("&Execute macro... C-x e, KEY"), 'E', menu_exec_macro_cmd},
  211. {' ', N_("delete macr&O... "), 'o', menu_exec_macro_delete_cmd},
  212. {' ', "", ' ', 0},
  213. {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
  214. {' ', "", ' ', 0},
  215. {' ', N_("format p&Aragraph M-p"), 'a', menu_format_paragraph},
  216. {' ', N_("'ispell' s&Pell check M-$"), 'P', menu_ispell_cmd},
  217. {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
  218. {' ', N_("E&xternal Formatter F19"), 'C', menu_c_form_cmd},
  219. {' ', N_("&Mail... "), 'M', menu_mail_cmd}
  220. };
  221. static menu_entry OptMenu[] =
  222. {
  223. {' ', N_("&General... "), 'G', menu_options},
  224. {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
  225. #if 0
  226. {' ', N_("&Layout..."), 'L', menu_layout_cmd}
  227. #endif
  228. };
  229. static menu_entry OptMenuEmacs[] =
  230. {
  231. {' ', N_("&General... "), 'G', menu_options},
  232. {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
  233. #if 0
  234. {' ', N_("&Layout..."), 'L', menu_layout_cmd}
  235. #endif
  236. };
  237. #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
  238. Menu EditMenuBar[N_menus];
  239. void edit_init_menu_normal (void)
  240. {
  241. EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu),
  242. "[Internal File Editor]");
  243. EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu),
  244. "[Internal File Editor]");
  245. EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu),
  246. "[Internal File Editor]");
  247. EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu),
  248. "[Internal File Editor]");
  249. EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu),
  250. "[Internal File Editor]");
  251. }
  252. void edit_init_menu_emacs (void)
  253. {
  254. EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs),
  255. "[Internal File Editor]");
  256. EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs),
  257. "[Internal File Editor]");
  258. EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs),
  259. "[Internal File Editor]");
  260. EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs),
  261. "[Internal File Editor]");
  262. EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs),
  263. "[Internal File Editor]");
  264. }
  265. void edit_done_menu (void)
  266. {
  267. int i;
  268. for (i = 0; i < N_menus; i++)
  269. destroy_menu (EditMenuBar[i]);
  270. }
  271. void edit_drop_menu_cmd (WEdit * e, int which)
  272. {
  273. if (edit_menubar->active)
  274. return;
  275. edit_menubar->active = 1;
  276. edit_menubar->dropped = drop_menus;
  277. edit_menubar->previous_selection = which >= 0 ? which : dlg_item_number (edit_dlg);
  278. if (which >= 0)
  279. edit_menubar->selected = which;
  280. dlg_select_widget (edit_dlg, edit_menubar);
  281. }
  282. void edit_menu_cmd (WEdit * e)
  283. {
  284. edit_drop_menu_cmd (e, -1);
  285. }
  286. int edit_drop_hotkey_menu (WEdit * e, int key)
  287. {
  288. int m = 0;
  289. switch (key) {
  290. case ALT ('f'):
  291. if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
  292. return 0;
  293. m = 0;
  294. break;
  295. case ALT ('e'):
  296. m = 1;
  297. break;
  298. case ALT ('s'):
  299. m = 2;
  300. break;
  301. case ALT ('c'):
  302. m = 3;
  303. break;
  304. case ALT ('o'):
  305. m = 4;
  306. break;
  307. default:
  308. return 0;
  309. }
  310. edit_drop_menu_cmd (e, m);
  311. return 1;
  312. }