1 /* editor menu definitions and initialisation
3 Copyright (C) 1996 the Free Software Foundation
5 Authors: 1996, 1997 Paul Sheer
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
25 #include "editcmddef.h"
29 #include "../src/mad.h"
31 extern int edit_key_emulation
;
33 extern WButtonBar
*edit_bar
;
34 extern Dlg_head
*edit_dlg
;
35 extern WMenu
*edit_menubar
;
37 #undef edit_message_dialog
38 #define edit_message_dialog(w,x,y,h,s) query_dialog (h, s, 0, 1, "&Ok")
41 static void menu_cmd (int i
)
43 send_message (wedit
->widget
.parent
, (Widget
*) wedit
, WIDGET_COMMAND
, i
);
46 static void menu_key (int i
)
48 send_message (wedit
->widget
.parent
, (Widget
*) wedit
, WIDGET_KEY
, i
);
55 sprintf (s
, "%d", option_word_wrap_line_length
);
56 f
= input_dialog (_(" Word wrap "),
57 /* Not essential to translate */
58 _(" Enter line length, 0 for off: "), s
);
61 option_word_wrap_line_length
= atoi (f
);
67 void edit_about_cmd ()
69 edit_message_dialog (wedit
->mainid
, 20, 20, " About ",
73 " Copyright (C) 1996 the Free Software Foundation\n"
75 " A user friendly text editor written\n"
76 " for the Midnight Commander.\n"
80 void menu_mail_cmd (void) { menu_cmd (CK_Mail
); }
81 void menu_load_cmd (void) { menu_cmd (CK_Load
); }
82 void menu_new_cmd (void) { menu_cmd (CK_New
); }
83 void menu_save_cmd (void) { menu_cmd (CK_Save
); }
84 void menu_save_as_cmd (void) { menu_cmd (CK_Save_As
); }
85 void menu_insert_file_cmd (void) { menu_cmd (CK_Insert_File
); }
86 void menu_quit_cmd (void) { menu_cmd (CK_Exit
); }
87 void menu_mark_cmd (void) { menu_cmd (CK_Mark
); }
88 void menu_ins_cmd (void) { menu_cmd (CK_Toggle_Insert
); }
89 void menu_copy_cmd (void) { menu_cmd (CK_Copy
); }
90 void menu_move_cmd (void) { menu_cmd (CK_Move
); }
91 void menu_delete_cmd (void) { menu_cmd (CK_Remove
); }
92 void menu_cut_cmd (void) { menu_cmd (CK_Save_Block
); }
93 void menu_search_cmd (void) { menu_cmd (CK_Find
); }
94 void menu_search_again_cmd (void) { menu_cmd (CK_Find_Again
); }
95 void menu_replace_cmd (void) { menu_cmd (CK_Replace
); }
96 void menu_begin_record_cmd (void) { menu_cmd (CK_Begin_Record_Macro
); }
97 void menu_end_record_cmd (void) { menu_cmd (CK_End_Record_Macro
); }
98 void menu_wrap_cmd (void) { edit_wrap_cmd (); }
99 void menu_exec_macro_cmd (void) { menu_key (XCTRL ('a')); }
100 void menu_exec_macro_delete_cmd (void) { menu_cmd (CK_Delete_Macro
); }
101 void menu_c_form_cmd (void) { menu_key (KEY_F (19)); }
102 void menu_ispell_cmd (void) { menu_cmd (CK_Pipe_Block (1)); }
103 void menu_sort_cmd (void) { menu_cmd (CK_Sort
); }
104 void menu_date_cmd (void) { menu_cmd (CK_Date
); }
105 void menu_undo_cmd (void) { menu_cmd (CK_Undo
); }
106 void menu_beginning_cmd (void) { menu_cmd (CK_Beginning_Of_Text
); }
107 void menu_end_cmd (void) { menu_cmd (CK_End_Of_Text
); }
108 void menu_refresh_cmd (void) { menu_cmd (CK_Refresh
); }
109 void menu_goto_line (void) { menu_cmd (CK_Goto
); }
110 void menu_lit_cmd (void) { menu_key (XCTRL ('q')); }
111 void menu_format_paragraph (void) { menu_cmd (CK_Paragraph_Format
); }
112 void edit_options_dialog (void);
113 void menu_options (void) { edit_options_dialog (); }
115 static menu_entry FileMenu
[] =
117 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd
},
118 {' ', N_("&New C-n"), 'N', menu_new_cmd
},
120 {' ', N_("&Save F2"), 'S', menu_save_cmd
},
121 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd
},
123 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd
},
124 {' ', N_("copy to &File... C-f"), 'F', menu_cut_cmd
},
126 {' ', N_("a&Bout... "), 'B', edit_about_cmd
},
128 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd
}
131 static menu_entry FileMenuEmacs
[] =
133 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd
},
134 {' ', N_("&New C-x k"), 'N', menu_new_cmd
},
136 {' ', N_("&Save F2"), 'S', menu_save_cmd
},
137 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd
},
139 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd
},
140 {' ', N_("copy to &File... "), 'F', menu_cut_cmd
},
142 {' ', N_("a&Bout... "), 'B', edit_about_cmd
},
144 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd
}
147 static menu_entry EditMenu
[] =
149 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd
},
151 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd
},
153 {' ', N_("&Copy F5"), 'C', menu_copy_cmd
},
154 {' ', N_("&Move F6"), 'M', menu_move_cmd
},
155 {' ', N_("&Delete F8"), 'D', menu_delete_cmd
},
157 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd
},
159 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd
},
160 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd
}
163 static menu_entry EditMenuEmacs
[] =
165 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd
},
167 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd
},
169 {' ', N_("&Copy F5"), 'C', menu_copy_cmd
},
170 {' ', N_("&Move F6"), 'M', menu_move_cmd
},
171 {' ', N_("&Delete F8"), 'D', menu_delete_cmd
},
173 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd
},
175 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd
},
176 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd
}
179 static menu_entry SearReplMenu
[] =
181 {' ', N_("&Search... F7"), 'S', menu_search_cmd
},
182 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd
},
183 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd
}
186 static menu_entry SearReplMenuEmacs
[] =
188 {' ', N_("&Search... F7"), 'S', menu_search_cmd
},
189 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd
},
190 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd
}
193 static menu_entry CmdMenu
[] =
195 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line
},
197 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd
},
199 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd
},
201 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd
},
202 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd
},
203 {' ', N_("&Execute macro... C-a, KEY"), 'E', menu_exec_macro_cmd
},
204 {' ', N_("delete macr&O... "), 'O', menu_exec_macro_delete_cmd
},
206 {' ', N_("insert &Date/time "), 'D', menu_date_cmd
},
208 {' ', N_("format p&Aragraph M-p"), 'A', menu_format_paragraph
},
209 {' ', N_("'ispell' s&Pell check C-p"), 'P', menu_ispell_cmd
},
210 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd
},
211 {' ', N_("'indent' &C Formatter F19"), 'C', menu_c_form_cmd
},
212 {' ', N_("&Mail... "), 'M', menu_mail_cmd
}
215 static menu_entry CmdMenuEmacs
[] =
217 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line
},
219 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd
},
221 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd
},
223 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd
},
224 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd
},
225 {' ', N_("&Execute macro... C-x e, KEY"), 'E', menu_exec_macro_cmd
},
226 {' ', N_("delete macr&O... "), 'o', menu_exec_macro_delete_cmd
},
228 {' ', N_("insert &Date/time "), 'D', menu_date_cmd
},
230 {' ', N_("format p&Aragraph M-p"), 'a', menu_format_paragraph
},
231 {' ', N_("'ispell' s&Pell check M-$"), 'P', menu_ispell_cmd
},
232 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd
},
233 {' ', N_("'indent' &C Formatter F19"), 'C', menu_c_form_cmd
}
236 extern void menu_save_mode_cmd (void);
238 static menu_entry OptMenu
[] =
240 {' ', N_("&General... "), 'G', menu_options
},
241 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd
}
243 {' ', N_("&Layout..."), 'L', menu_layout_cmd
}
247 static menu_entry OptMenuEmacs
[] =
249 {' ', N_("&General... "), 'G', menu_options
},
250 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd
}
252 {' ', N_("&Layout..."), 'L', menu_layout_cmd
}
256 #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
258 Menu EditMenuBar
[N_menus
];
260 void edit_init_menu_normal (void)
262 EditMenuBar
[0] = create_menu (_(" File "), FileMenu
, menu_entries (FileMenu
));
263 EditMenuBar
[1] = create_menu (_(" Edit "), EditMenu
, menu_entries (EditMenu
));
264 EditMenuBar
[2] = create_menu (_(" Sear/Repl "), SearReplMenu
, menu_entries (SearReplMenu
));
265 EditMenuBar
[3] = create_menu (_(" Command "), CmdMenu
, menu_entries (CmdMenu
));
266 EditMenuBar
[4] = create_menu (_(" Options "), OptMenu
, menu_entries (OptMenu
));
269 void edit_init_menu_emacs (void)
271 EditMenuBar
[0] = create_menu (_(" File "), FileMenuEmacs
, menu_entries (FileMenuEmacs
));
272 EditMenuBar
[1] = create_menu (_(" Edit "), EditMenuEmacs
, menu_entries (EditMenuEmacs
));
273 EditMenuBar
[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs
, menu_entries (SearReplMenuEmacs
));
274 EditMenuBar
[3] = create_menu (_(" Command "), CmdMenuEmacs
, menu_entries (CmdMenuEmacs
));
275 EditMenuBar
[4] = create_menu (_(" Options "), OptMenuEmacs
, menu_entries (OptMenuEmacs
));
278 void edit_done_menu (void)
281 for (i
= 0; i
< N_menus
; i
++)
282 destroy_menu (EditMenuBar
[i
]);
286 void edit_drop_menu_cmd (WEdit
* e
, int which
)
288 if (edit_menubar
->active
)
290 edit_menubar
->active
= 1;
291 edit_menubar
->dropped
= drop_menus
;
292 edit_menubar
->previous_selection
= which
>= 0 ? which
: dlg_item_number (edit_dlg
);
294 edit_menubar
->selected
= which
;
295 dlg_select_widget (edit_dlg
, edit_menubar
);
299 void edit_menu_cmd (WEdit
* e
)
301 edit_drop_menu_cmd (e
, -1);
305 int edit_drop_hotkey_menu (WEdit
* e
, int key
)
310 if (edit_key_emulation
== EDIT_KEY_EMULATION_EMACS
)
330 edit_drop_menu_cmd (e
, m
);
335 #else /* !MIDNIGHT */
338 extern CWidget
*wedit
;
340 void CSetEditMenu (const char *ident
)
342 wedit
= CIdent (ident
);
345 CWidget
*CGetEditMenu (void)
350 static void menu_cmd (unsigned long i
)
354 memset (&e
, 0, sizeof (XEvent
));
355 e
.type
= EditorCommand
;
357 e
.xkey
.window
= wedit
->winid
;
363 void CEditMenuCommand (int i
)
365 menu_cmd ((unsigned long) i
);
368 static void menu_key (KeySym i
, int state
)
371 if (edit_translate_key (0, i
, state
, &cmd
, &ch
)) {
377 static void menu_ctrl_key (unsigned long i
)
379 menu_key ((KeySym
) i
, ControlMask
);
382 void CDrawEditMenuButtons (const char *ident
, Window parent
, Window focus_return
, int x
, int y
)
386 CDrawMenuButton (catstrs (ident
, ".filemenu", 0), parent
, focus_return
, x
, y
, AUTO_WIDTH
, AUTO_HEIGHT
, 8,
387 /* The following are menu options. Do not change the key bindings (eg. C-o) and preserve '\t' */
389 _("Open...\tC-o"), '~', menu_cmd
, CK_Load
,
390 _("New\tC-n"), '~', menu_cmd
, CK_New
,
392 _("Save\tF2"), '~', menu_cmd
, CK_Save
,
393 _("Save as...\tF12"), '~', menu_cmd
, CK_Save_As
,
395 _("Insert file...\tF15"), '~', menu_cmd
, CK_Insert_File
,
396 _("Copy to file...\tC-f"), '~', menu_cmd
, CK_Save_Block
399 CSetToolHint (catstrs (ident
, ".filemenu", 0), _("Disk operations"));
401 CGetHintPos (&x
, &d
);
403 CDrawMenuButton (catstrs (ident
, ".editmenu", 0), parent
, focus_return
, x
, y
, AUTO_WIDTH
, AUTO_HEIGHT
, 14,
405 _("Toggle mark\tF3"), '~', menu_cmd
, CK_Mark
,
407 _("Toggle insert/overwrite\tIns"), '~', menu_cmd
, CK_Toggle_Insert
,
409 _("Copy block to cursor\tF5"), '~', menu_cmd
, CK_Copy
,
410 _("Move block to cursor\tF6"), '~', menu_cmd
, CK_Move
,
411 _("Delete block\tF8/C-Del"), '~', menu_cmd
, CK_Remove
,
413 _("Copy block to clipbrd\tC-Ins"), '~', menu_cmd
, CK_XStore
,
414 _("Cut block to clipbrd\tS-Del"), '~', menu_cmd
, CK_XCut
,
415 _("Paste block from clipbrd\tS-Ins"), '~', menu_cmd
, CK_XPaste
,
416 _("Selection history\tM-Ins"), '~', menu_cmd
, CK_Selection_History
,
418 _("Undo\tC-BackSpace"), '~', menu_cmd
, CK_Undo
421 CSetToolHint (catstrs (ident
, ".editmenu", 0), _("Manipulating blocks of text"));
423 CGetHintPos (&x
, &d
);
425 CDrawMenuButton (catstrs (ident
, ".searchmenu", 0), parent
, focus_return
, x
, y
, AUTO_WIDTH
, AUTO_HEIGHT
, 4,
427 _("Search...\tF7"), '~', menu_cmd
, CK_Find
,
428 _("Search again\tF17"), '~', menu_cmd
, CK_Find_Again
,
429 _("Replace...\tF4"), '~', menu_cmd
, CK_Replace
,
430 _("Replace again\tF14"), '~', menu_cmd
, CK_Replace_Again
433 CSetToolHint (catstrs (ident
, ".searchmenu", 0), _("Search for and replace text"));
435 CGetHintPos (&x
, &d
);
437 CDrawMenuButton (catstrs (ident
, ".commandmenu", 0), parent
, focus_return
, x
, y
, AUTO_WIDTH
, AUTO_HEIGHT
, 9,
439 _("Goto line...\tM-l"), '~', menu_cmd
, CK_Goto
,
441 _("Start record macro\tC-r"), '~', menu_cmd
, CK_Begin_Record_Macro
,
442 _("Finish record macro...\tC-r"), '~', menu_cmd
, CK_End_Record_Macro
,
443 _("Execute macro...\tC-a, KEY"), '~', menu_ctrl_key
, XK_a
,
444 _("Delete macro...\t"), '~', menu_cmd
, CK_Delete_Macro
,
446 _("Insert date/time\tC-d"), '~', menu_cmd
, CK_Date
,
447 _("Format paragraph\tM-p"), '~', menu_cmd
, CK_Paragraph_Format
450 CSetToolHint (catstrs (ident
, ".commandmenu", 0), _("Macros and internal commands"));
454 #endif /* !MIDNIGHT */