Fix format string in translate
[pantumic.git] / edit / editmenu.c
blob583d3d6b5acd1645af144a9794843f21d5b16293
1 /* editor menu definitions and initialisation
3 Copyright (C) 1996, 1998, 2001, 2002, 2003, 2005, 2007
4 Free Software Foundation, Inc.
6 Authors: 1996, 1997 Paul Sheer
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.
24 /** \file
25 * \brief Source: editor menu definitions and initialisation
26 * \author Paul Sheer
27 * \date 1996, 1997
30 #include <config.h>
32 #include <stdio.h>
33 #include <stdarg.h>
34 #include <sys/types.h>
35 #include <unistd.h>
36 #include <string.h>
37 #include <ctype.h>
38 #include <errno.h>
39 #include <sys/stat.h>
40 #include <stdlib.h>
42 #include "../src/global.h"
44 #include "edit-impl.h"
45 #include "edit-widget.h"
46 #include "editcmddef.h"
48 #include "../src/tty/tty.h" /* KEY_F */
49 #include "../src/tty/key.h" /* XCTRL */
51 #include "../src/cmd.h" /* save_setup_cmd() */
52 #include "../src/wtools.h" /* query_dialog() */
53 #include "../src/menu.h" /* menu_entry */
54 #include "../src/main.h" /* drop_menus */
55 #include "../src/learn.h" /* learn_keys */
57 #include "edit-widget.h"
58 #include "../src/cmddef.h"
60 static void
61 menu_cmd (int command)
63 edit_execute_key_command (wedit, command, -1);
64 edit_update_screen (wedit);
67 static void menu_key (int i)
69 send_message ((Widget *) wedit, WIDGET_KEY, i);
72 static void
73 edit_about_cmd (void)
75 query_dialog (_(" About "),
76 _("\n Cooledit v3.11.5\n\n"
77 " Copyright (C) 1996 the Free Software Foundation\n\n"
78 " A user friendly text editor written\n"
79 " for the Midnight Commander.\n"), D_NORMAL,
80 1, _("&OK"));
83 static void
84 menu_mail_cmd (void)
86 menu_cmd (CK_Mail);
89 static void
90 menu_load_cmd (void)
92 menu_cmd (CK_Load);
95 static void
96 menu_new_cmd (void)
98 menu_cmd (CK_New);
101 static void
102 menu_save_cmd (void)
104 menu_cmd (CK_Save);
107 static void
108 menu_save_as_cmd (void)
110 menu_cmd (CK_Save_As);
113 static void
114 menu_insert_file_cmd (void)
116 menu_cmd (CK_Insert_File);
119 static void
120 menu_quit_cmd (void)
122 menu_cmd (CK_Exit);
125 static void
126 menu_mark_cmd (void)
128 menu_cmd (CK_Mark);
131 static void
132 menu_markcol_cmd (void)
134 menu_cmd (CK_Column_Mark);
137 static void
138 menu_ins_cmd (void)
140 menu_cmd (CK_Toggle_Insert);
143 static void
144 menu_copy_cmd (void)
146 menu_cmd (CK_Copy);
149 static void
150 menu_move_cmd (void)
152 menu_cmd (CK_Move);
155 static void
156 menu_delete_cmd (void)
158 menu_cmd (CK_Remove);
161 static void
162 menu_xstore_cmd (void)
164 menu_cmd (CK_XStore);
167 static void
168 menu_xcut_cmd (void)
170 menu_cmd (CK_XCut);
173 static void
174 menu_xpaste_cmd (void)
176 menu_cmd (CK_XPaste);
179 static void
180 menu_toggle_bookmark_cmd (void)
182 menu_cmd (CK_Toggle_Bookmark);
185 static void
186 menu_flush_bookmark_cmd (void)
188 menu_cmd (CK_Flush_Bookmarks);
191 static void
192 menu_next_bookmark_cmd (void)
194 menu_cmd (CK_Next_Bookmark);
197 static void
198 menu_prev_bookmark_cmd (void)
200 menu_cmd (CK_Prev_Bookmark);
203 static void
204 menu_cut_cmd (void)
206 menu_cmd (CK_Save_Block);
209 static void
210 menu_search_cmd (void)
212 menu_cmd (CK_Find);
215 static void
216 menu_search_again_cmd (void)
218 menu_cmd (CK_Find_Again);
221 static void
222 menu_replace_cmd (void)
224 menu_cmd (CK_Replace);
227 static void
228 menu_select_codepage_cmd (void)
230 menu_cmd (CK_SelectCodepage);
233 static void
234 menu_begin_record_cmd (void)
236 menu_cmd (CK_Begin_Record_Macro);
239 static void
240 menu_end_record_cmd (void)
242 menu_cmd (CK_End_Record_Macro);
245 static void
246 menu_exec_macro_cmd (void)
248 menu_key (XCTRL ('a'));
251 static void
252 menu_exec_macro_delete_cmd (void)
254 menu_cmd (CK_Delete_Macro);
257 static void
258 menu_c_form_cmd (void)
260 menu_key (KEY_F (19));
263 static void
264 menu_ispell_cmd (void)
266 menu_cmd (CK_Pipe_Block (1));
269 static void
270 menu_sort_cmd (void)
272 menu_cmd (CK_Sort);
275 static void
276 menu_ext_cmd (void)
278 menu_cmd (CK_ExtCmd);
281 static void
282 menu_date_cmd (void)
284 menu_cmd (CK_Date);
287 static void
288 menu_undo_cmd (void)
290 menu_cmd (CK_Undo);
293 static void
294 menu_beginning_cmd (void)
296 menu_cmd (CK_Beginning_Of_Text);
299 static void
300 menu_end_cmd (void)
302 menu_cmd (CK_End_Of_Text);
305 static void
306 menu_refresh_cmd (void)
308 menu_cmd (CK_Refresh);
311 static void
312 menu_goto_line (void)
314 menu_cmd (CK_Goto);
317 static void
318 menu_toggle_line_state (void)
320 menu_cmd (CK_Toggle_Line_State);
323 static void
324 menu_goto_bracket (void)
326 menu_cmd (CK_Match_Bracket);
329 static void
330 menu_lit_cmd (void)
332 menu_key (XCTRL ('q'));
335 static void
336 menu_format_paragraph (void)
338 menu_cmd (CK_Paragraph_Format);
341 static void
342 menu_edit_syntax_file_cmd (void)
344 menu_cmd (CK_Load_Syntax_File);
347 static void
348 menu_edit_menu_file_cmd (void)
350 menu_cmd (CK_Load_Menu_File);
353 static void
354 menu_user_menu_cmd (void)
356 menu_key (KEY_F (11));
359 static void
360 menu_find_declare (void)
362 menu_cmd (CK_Find_Definition);
365 static void
366 menu_declare_back (void)
368 menu_cmd (CK_Load_Prev_File);
371 static void
372 menu_declare_forward (void)
374 menu_cmd (CK_Load_Next_File);
377 static menu_entry FileMenu[] =
379 {' ', N_("&Open file..."), NULL_HOTKEY, menu_load_cmd},
380 {' ', N_("&New C-n"), NULL_HOTKEY, menu_new_cmd},
381 {' ', "", NULL_HOTKEY, 0},
382 {' ', N_("&Save F2"), NULL_HOTKEY, menu_save_cmd},
383 {' ', N_("Save &as... F12"), NULL_HOTKEY, menu_save_as_cmd},
384 {' ', "", NULL_HOTKEY, 0},
385 {' ', N_("&Insert file... F15"), NULL_HOTKEY, menu_insert_file_cmd},
386 {' ', N_("Copy to &file... C-f"), NULL_HOTKEY, menu_cut_cmd},
387 {' ', "", NULL_HOTKEY, 0},
388 {' ', N_("&User menu... F11"), NULL_HOTKEY, menu_user_menu_cmd},
389 {' ', "", NULL_HOTKEY, 0},
390 {' ', N_("A&bout... "), NULL_HOTKEY, edit_about_cmd},
391 {' ', "", NULL_HOTKEY, 0},
392 {' ', N_("&Quit F10"), NULL_HOTKEY, menu_quit_cmd}
395 static menu_entry FileMenuEmacs[] =
397 {' ', N_("&Open file..."), NULL_HOTKEY, menu_load_cmd},
398 {' ', N_("&New C-x k"), NULL_HOTKEY, menu_new_cmd},
399 {' ', "", NULL_HOTKEY, 0},
400 {' ', N_("&Save F2"), NULL_HOTKEY, menu_save_cmd},
401 {' ', N_("Save &as... F12"), NULL_HOTKEY, menu_save_as_cmd},
402 {' ', "", NULL_HOTKEY, 0},
403 {' ', N_("&Insert file... F15"), NULL_HOTKEY, menu_insert_file_cmd},
404 {' ', N_("Copy to &file... "), NULL_HOTKEY, menu_cut_cmd},
405 {' ', "", NULL_HOTKEY, 0},
406 {' ', N_("&User menu... F11"), NULL_HOTKEY, menu_user_menu_cmd},
407 {' ', "", NULL_HOTKEY, 0},
408 {' ', N_("A&bout... "), NULL_HOTKEY, edit_about_cmd},
409 {' ', "", NULL_HOTKEY, 0},
410 {' ', N_("&Quit F10"), NULL_HOTKEY, menu_quit_cmd}
413 static menu_entry EditMenu[] =
415 {' ', N_("&Toggle mark F3"), NULL_HOTKEY, menu_mark_cmd},
416 {' ', N_("Mar&k columns S-F3"), NULL_HOTKEY, menu_markcol_cmd},
417 {' ', "", NULL_HOTKEY, 0},
418 {' ', N_("Toggle &ins/overw Ins"), NULL_HOTKEY, menu_ins_cmd},
419 {' ', "", NULL_HOTKEY, 0},
420 {' ', N_("&Copy F5"), NULL_HOTKEY, menu_copy_cmd},
421 {' ', N_("&Move F6"), NULL_HOTKEY, menu_move_cmd},
422 {' ', N_("&Delete F8"), NULL_HOTKEY, menu_delete_cmd},
423 {' ', "", NULL_HOTKEY, 0},
424 {' ', N_("C&opy to clipfile C-Ins"), NULL_HOTKEY, menu_xstore_cmd},
425 {' ', N_("C&ut to clipfile S-Del"), NULL_HOTKEY, menu_xcut_cmd},
426 {' ', N_("&Paste from clipfile S-Ins"), NULL_HOTKEY, menu_xpaste_cmd},
427 {' ', "", NULL_HOTKEY, 0},
428 {' ', N_("Toggle bookmar&k M-k"), NULL_HOTKEY, menu_toggle_bookmark_cmd},
429 {' ', N_("&Next bookmark M-j"), NULL_HOTKEY, menu_next_bookmark_cmd},
430 {' ', N_("Pre&v bookmark M-i"), NULL_HOTKEY, menu_prev_bookmark_cmd},
431 {' ', N_("&Flush bookmark M-o"), NULL_HOTKEY, menu_flush_bookmark_cmd},
432 {' ', "", NULL_HOTKEY, 0},
433 {' ', N_("&Undo C-u"), NULL_HOTKEY, menu_undo_cmd},
434 {' ', "", NULL_HOTKEY, 0},
435 {' ', N_("&Beginning C-PgUp"), NULL_HOTKEY, menu_beginning_cmd},
436 {' ', N_("&End C-PgDn"), NULL_HOTKEY, menu_end_cmd}
439 static menu_entry EditMenuEmacs[] =
441 {' ', N_("&Toggle mark F3"), NULL_HOTKEY, menu_mark_cmd},
442 {' ', N_("Mar&k columns S-F3"), NULL_HOTKEY, menu_markcol_cmd},
443 {' ', "", NULL_HOTKEY, 0},
444 {' ', N_("Toggle &ins/overw Ins"), NULL_HOTKEY, menu_ins_cmd},
445 {' ', "", NULL_HOTKEY, 0},
446 {' ', N_("&Copy F5"), NULL_HOTKEY, menu_copy_cmd},
447 {' ', N_("&Move F6"), NULL_HOTKEY, menu_move_cmd},
448 {' ', N_("&Delete F8"), NULL_HOTKEY, menu_delete_cmd},
449 {' ', "", NULL_HOTKEY, 0},
450 {' ', N_("C&opy to clipfile M-w"), NULL_HOTKEY, menu_xstore_cmd},
451 {' ', N_("C&ut to clipfile C-w"), NULL_HOTKEY, menu_xcut_cmd},
452 {' ', N_("&Paste from clipfile C-y"), NULL_HOTKEY, menu_xpaste_cmd},
453 {' ', "", NULL_HOTKEY, 0},
454 {' ', N_("Toggle bookmar&k "), NULL_HOTKEY, menu_toggle_bookmark_cmd},
455 {' ', N_("&Next bookmark "), NULL_HOTKEY, menu_next_bookmark_cmd},
456 {' ', N_("Pre&v bookmark "), NULL_HOTKEY, menu_prev_bookmark_cmd},
457 {' ', N_("&Flush bookmark "), NULL_HOTKEY, menu_flush_bookmark_cmd},
458 {' ', "", NULL_HOTKEY, 0},
459 {' ', N_("&Undo C-u"), NULL_HOTKEY, menu_undo_cmd},
460 {' ', "", NULL_HOTKEY, 0},
461 {' ', N_("&Beginning C-PgUp"), NULL_HOTKEY, menu_beginning_cmd},
462 {' ', N_("&End C-PgDn"), NULL_HOTKEY, menu_end_cmd}
465 static menu_entry SearReplMenu[] =
467 {' ', N_("&Search... F7"), NULL_HOTKEY, menu_search_cmd},
468 {' ', N_("Search &again F17"), NULL_HOTKEY, menu_search_again_cmd},
469 {' ', N_("&Replace... F4"), NULL_HOTKEY, menu_replace_cmd}
472 #define SearReplMenuEmacs SearReplMenu
474 static menu_entry CmdMenu[] =
476 {' ', N_("&Go to line... M-l"), NULL_HOTKEY, menu_goto_line},
477 {' ', N_("Toggle li&ne state M-n"), NULL_HOTKEY, menu_toggle_line_state},
478 {' ', N_("Go to matching &bracket M-b"), NULL_HOTKEY, menu_goto_bracket},
479 {' ', "", NULL_HOTKEY, 0},
480 {' ', N_("Find declaration A-Enter"), NULL_HOTKEY, menu_find_declare},
481 {' ', N_("Back from declaration M--"), NULL_HOTKEY, menu_declare_back},
482 {' ', N_("Forward to declaration M-+"), NULL_HOTKEY, menu_declare_forward},
483 #ifdef HAVE_CHARSET
484 {' ', "", NULL_HOTKEY, 0},
485 {' ', N_("Encod&ing... C-t"), NULL_HOTKEY, menu_select_codepage_cmd},
486 #endif
487 {' ', "", NULL_HOTKEY, 0},
488 {' ', N_("Insert &literal... C-q"), NULL_HOTKEY, menu_lit_cmd},
489 {' ', "", NULL_HOTKEY, 0},
490 {' ', N_("&Refresh screen C-l"), NULL_HOTKEY, menu_refresh_cmd},
491 {' ', "", NULL_HOTKEY, 0},
492 {' ', N_("&Start record macro C-r"), NULL_HOTKEY, menu_begin_record_cmd},
493 {' ', N_("&Finish record macro... C-r"), NULL_HOTKEY, menu_end_record_cmd},
494 {' ', N_("&Execute macro... C-a, KEY"), NULL_HOTKEY, menu_exec_macro_cmd},
495 {' ', N_("Delete macr&o... "), NULL_HOTKEY, menu_exec_macro_delete_cmd},
496 {' ', "", NULL_HOTKEY, 0},
497 {' ', N_("Insert &date/time "), NULL_HOTKEY, menu_date_cmd},
498 {' ', "", NULL_HOTKEY, 0},
499 {' ', N_("Format p&aragraph M-p"), NULL_HOTKEY, menu_format_paragraph},
500 {' ', N_("'ispell' s&pell check C-p"), NULL_HOTKEY, menu_ispell_cmd},
501 {' ', N_("Sor&t... M-t"), NULL_HOTKEY, menu_sort_cmd},
502 {' ', N_("Paste o&utput of... M-u"), NULL_HOTKEY, menu_ext_cmd},
503 {' ', N_("E&xternal Formatter F19"), NULL_HOTKEY, menu_c_form_cmd},
504 {' ', N_("&Mail... "), NULL_HOTKEY, menu_mail_cmd}
507 static menu_entry CmdMenuEmacs[] =
509 {' ', N_("&Go to line... M-l"), NULL_HOTKEY, menu_goto_line},
510 {' ', N_("Toggle li&ne state M-n"), NULL_HOTKEY, menu_toggle_line_state},
511 {' ', N_("Go to matching &bracket M-b"), NULL_HOTKEY, menu_goto_bracket},
512 {' ', "", NULL_HOTKEY, 0},
513 {' ', N_("Insert &literal... C-q"), NULL_HOTKEY, menu_lit_cmd},
514 {' ', "", NULL_HOTKEY, 0},
515 {' ', N_("&Refresh screen C-l"), NULL_HOTKEY, menu_refresh_cmd},
516 {' ', "", NULL_HOTKEY, 0},
517 {' ', N_("&Start record macro C-r"), NULL_HOTKEY, menu_begin_record_cmd},
518 {' ', N_("&Finish record macro... C-r"), NULL_HOTKEY, menu_end_record_cmd},
519 {' ', N_("&Execute macro... C-x e, KEY"), NULL_HOTKEY, menu_exec_macro_cmd},
520 {' ', N_("Delete macr&o... "), NULL_HOTKEY, menu_exec_macro_delete_cmd},
521 {' ', "", NULL_HOTKEY, 0},
522 {' ', N_("Insert &date/time "), NULL_HOTKEY, menu_date_cmd},
523 {' ', "", NULL_HOTKEY, 0},
524 {' ', N_("Format p&aragraph M-p"), NULL_HOTKEY, menu_format_paragraph},
525 {' ', N_("'ispell' s&pell check M-$"), NULL_HOTKEY, menu_ispell_cmd},
526 {' ', N_("Sor&t... M-t"), NULL_HOTKEY, menu_sort_cmd},
527 {' ', N_("Paste o&utput of... M-u"), NULL_HOTKEY, menu_ext_cmd},
528 {' ', N_("E&xternal Formatter F19"), NULL_HOTKEY, menu_c_form_cmd},
529 {' ', N_("&Mail... "), NULL_HOTKEY, menu_mail_cmd}
532 static menu_entry OptMenu[] =
534 {' ', N_("&General... "), NULL_HOTKEY, edit_options_dialog},
535 {' ', N_("&Save mode..."), NULL_HOTKEY, menu_save_mode_cmd},
536 {' ', N_("Learn &Keys..."), NULL_HOTKEY, learn_keys},
537 {' ', N_("Syntax &Highlighting..."), NULL_HOTKEY, edit_syntax_dialog},
538 {' ', "", NULL_HOTKEY, 0},
539 {' ', N_("S&yntax file"), NULL_HOTKEY, menu_edit_syntax_file_cmd},
540 {' ', N_("&Menu file"), NULL_HOTKEY, menu_edit_menu_file_cmd},
541 {' ', "", NULL_HOTKEY, 0},
542 {' ', N_("Save setu&p"), NULL_HOTKEY, save_setup_cmd}
545 #define OptMenuEmacs OptMenu
547 #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
549 #define N_menus 5
551 static Menu *EditMenuBar [N_menus];
553 static void
554 edit_init_menu_normal (void)
556 EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu),
557 "[Internal File Editor]");
558 EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu),
559 "[Internal File Editor]");
560 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu),
561 "[Internal File Editor]");
562 EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu),
563 "[Internal File Editor]");
564 EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu),
565 "[Internal File Editor]");
568 static void
569 edit_init_menu_emacs (void)
571 EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs),
572 "[Internal File Editor]");
573 EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs),
574 "[Internal File Editor]");
575 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs),
576 "[Internal File Editor]");
577 EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs),
578 "[Internal File Editor]");
579 EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs),
580 "[Internal File Editor]");
583 static void
584 edit_init_menu (void)
586 switch (edit_key_emulation) {
587 default:
588 case EDIT_KEY_EMULATION_NORMAL:
589 edit_init_menu_normal ();
590 break;
591 case EDIT_KEY_EMULATION_EMACS:
592 edit_init_menu_emacs ();
593 break;
597 struct WMenu *
598 edit_create_menu (void)
600 edit_init_menu ();
601 return menubar_new (0, 0, COLS, EditMenuBar, N_menus);
604 void
605 edit_done_menu (struct WMenu *wmenu)
607 int i;
608 for (i = 0; i < N_menus; i++)
609 destroy_menu (wmenu->menu[i]);
613 void
614 edit_reload_menu (void)
616 edit_done_menu (edit_menubar);
617 edit_init_menu ();
618 menubar_arrange (edit_menubar);
622 static void
623 edit_drop_menu_cmd (WEdit *e, int which)
625 if (edit_menubar->active)
626 return;
627 edit_menubar->active = 1;
628 edit_menubar->dropped = drop_menus;
629 if (which >= 0) {
630 edit_menubar->selected = which;
633 edit_menubar->previous_widget = e->widget.parent->current->dlg_id;
634 dlg_select_widget (edit_menubar);
638 void edit_menu_cmd (WEdit * e)
640 edit_drop_menu_cmd (e, -1);
644 int edit_drop_hotkey_menu (WEdit * e, int key)
646 int m = 0;
647 switch (key) {
648 case ALT ('f'):
649 if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
650 return 0;
651 m = 0;
652 break;
653 case ALT ('e'):
654 m = 1;
655 break;
656 case ALT ('s'):
657 m = 2;
658 break;
659 case ALT ('c'):
660 m = 3;
661 break;
662 case ALT ('o'):
663 m = 4;
664 break;
665 default:
666 return 0;
669 edit_drop_menu_cmd (e, m);
670 return 1;