Codepage messages related translated & other stuff...
[midnight-commander.git] / gtkedit / editmenu.c
blob5038fd9ddac695869d0b12c5711d2ac8de929d94
1 /* editor menu definitions and initialisation
3 Copyright (C) 1996 the Free Software Foundation
5 Authors: 1996, 1997 Paul Sheer
7 $Id$
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22 02111-1307, USA.
25 #include <config.h>
26 #include "edit.h"
27 #include "../src/user.h"
29 #include "editcmddef.h"
31 #if defined (HAVE_MAD) && ! defined (MIDNIGHT) && ! defined (GTK)
32 #include "mad.h"
33 #endif
35 #ifdef MIDNIGHT
37 #include "../src/mad.h"
39 extern int edit_key_emulation;
40 extern WEdit *wedit;
41 extern WButtonBar *edit_bar;
42 extern Dlg_head *edit_dlg;
43 extern WMenu *edit_menubar;
45 #undef edit_message_dialog
46 #define edit_message_dialog(w,x,y,h,s) query_dialog (h, s, 0, 1, _("&Ok"))
47 #define CFocus(x)
49 static void menu_cmd (int i)
51 send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_COMMAND, i);
54 static void menu_key (int i)
56 send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_KEY, i);
59 void edit_wrap_cmd ()
61 char *f;
62 char s[12];
63 sprintf (s, "%d", option_word_wrap_line_length);
64 f = input_dialog (_(" Word wrap "),
65 _(" Enter line length, 0 for off: "), s);
66 if (f) {
67 if (*f) {
68 option_word_wrap_line_length = atoi (f);
70 free (f);
74 void edit_about_cmd ()
76 edit_message_dialog (wedit->mainid, 20, 20, _(" About "),
77 _("\n"
78 " Cooledit v3.11.5\n"
79 "\n"
80 " Copyright (C) 1996 the Free Software Foundation\n"
81 "\n"
82 " A user friendly text editor written\n"
83 " for the Midnight Commander.\n")
87 void menu_mail_cmd (void) { menu_cmd (CK_Mail); }
88 void menu_load_cmd (void) { menu_cmd (CK_Load); }
89 void menu_new_cmd (void) { menu_cmd (CK_New); }
90 void menu_save_cmd (void) { menu_cmd (CK_Save); }
91 void menu_save_as_cmd (void) { menu_cmd (CK_Save_As); }
92 void menu_insert_file_cmd (void) { menu_cmd (CK_Insert_File); }
93 void menu_quit_cmd (void) { menu_cmd (CK_Exit); }
94 void menu_mark_cmd (void) { menu_cmd (CK_Mark); }
95 void menu_markcol_cmd (void) { menu_cmd (CK_Column_Mark); }
96 void menu_ins_cmd (void) { menu_cmd (CK_Toggle_Insert); }
97 void menu_copy_cmd (void) { menu_cmd (CK_Copy); }
98 void menu_move_cmd (void) { menu_cmd (CK_Move); }
99 void menu_delete_cmd (void) { menu_cmd (CK_Remove); }
100 void menu_cut_cmd (void) { menu_cmd (CK_Save_Block); }
101 void menu_search_cmd (void) { menu_cmd (CK_Find); }
102 void menu_search_again_cmd (void) { menu_cmd (CK_Find_Again); }
103 void menu_replace_cmd (void) { menu_cmd (CK_Replace); }
104 void menu_begin_record_cmd (void) { menu_cmd (CK_Begin_Record_Macro); }
105 void menu_end_record_cmd (void) { menu_cmd (CK_End_Record_Macro); }
106 void menu_wrap_cmd (void) { edit_wrap_cmd (); }
107 void menu_exec_macro_cmd (void) { menu_key (XCTRL ('a')); }
108 void menu_exec_macro_delete_cmd (void) { menu_cmd (CK_Delete_Macro); }
109 void menu_c_form_cmd (void) { menu_key (KEY_F (19)); }
110 void menu_ispell_cmd (void) { menu_cmd (CK_Pipe_Block (1)); }
111 void menu_sort_cmd (void) { menu_cmd (CK_Sort); }
112 void menu_date_cmd (void) { menu_cmd (CK_Date); }
113 void menu_undo_cmd (void) { menu_cmd (CK_Undo); }
114 void menu_beginning_cmd (void) { menu_cmd (CK_Beginning_Of_Text); }
115 void menu_end_cmd (void) { menu_cmd (CK_End_Of_Text); }
116 void menu_refresh_cmd (void) { menu_cmd (CK_Refresh); }
117 void menu_goto_line (void) { menu_cmd (CK_Goto); }
118 void menu_goto_bracket (void) { menu_cmd (CK_Match_Bracket); }
119 void menu_lit_cmd (void) { menu_key (XCTRL ('q')); }
120 void menu_format_paragraph (void) { menu_cmd (CK_Paragraph_Format); }
121 void edit_options_dialog (void);
122 void menu_options (void) { edit_options_dialog (); }
123 void menu_user_menu_cmd (void) { menu_key (KEY_F (11)); }
125 void edit_user_menu_cmd (void) { menu_edit_cmd (1); }
127 static menu_entry FileMenu[] =
129 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd},
130 {' ', N_("&New C-n"), 'N', menu_new_cmd},
131 {' ', "", ' ', 0},
132 {' ', N_("&Save F2"), 'S', menu_save_cmd},
133 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
134 {' ', "", ' ', 0},
135 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
136 {' ', N_("copy to &File... C-f"), 'F', menu_cut_cmd},
137 {' ', "", ' ', 0},
138 {' ', N_("&User menu... F11"), 'U', menu_user_menu_cmd},
139 /* {' ', N_("Menu edi&Tor edit "), 'T', edit_user_menu_cmd}, */
140 {' ', "", ' ', 0},
141 {' ', N_("a&Bout... "), 'B', edit_about_cmd},
142 {' ', "", ' ', 0},
143 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
146 static menu_entry FileMenuEmacs[] =
148 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd},
149 {' ', N_("&New C-x k"), 'N', menu_new_cmd},
150 {' ', "", ' ', 0},
151 {' ', N_("&Save F2"), 'S', menu_save_cmd},
152 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
153 {' ', "", ' ', 0},
154 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
155 {' ', N_("copy to &File... "), 'F', menu_cut_cmd},
156 {' ', "", ' ', 0},
157 {' ', N_("&User menu... F11"), 'U', menu_user_menu_cmd},
158 /* {' ', N_("Menu edi&Tor edit "), 'T', edit_user_menu_cmd}, */
159 {' ', "", ' ', 0},
160 {' ', N_("a&Bout... "), 'B', edit_about_cmd},
161 {' ', "", ' ', 0},
162 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
165 static menu_entry EditMenu[] =
167 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
168 {' ', N_("&Mark Columns S-F3"), 'T', menu_markcol_cmd},
169 {' ', "", ' ', 0},
170 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
171 {' ', "", ' ', 0},
172 {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
173 {' ', N_("&Move F6"), 'M', menu_move_cmd},
174 {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
175 {' ', "", ' ', 0},
176 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
177 {' ', "", ' ', 0},
178 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
179 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
182 static menu_entry EditMenuEmacs[] =
184 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
185 {' ', N_("&Mark Columns S-F3"), 'T', menu_markcol_cmd},
186 {' ', "", ' ', 0},
187 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
188 {' ', "", ' ', 0},
189 {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
190 {' ', N_("&Move F6"), 'M', menu_move_cmd},
191 {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
192 {' ', "", ' ', 0},
193 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
194 {' ', "", ' ', 0},
195 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
196 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
199 static menu_entry SearReplMenu[] =
201 {' ', N_("&Search... F7"), 'S', menu_search_cmd},
202 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
203 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
206 static menu_entry SearReplMenuEmacs[] =
208 {' ', N_("&Search... F7"), 'S', menu_search_cmd},
209 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
210 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
213 static menu_entry CmdMenu[] =
215 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
216 {' ', N_("goto matching &Bracket M-b"), 'B', menu_goto_bracket},
217 {' ', "", ' ', 0},
218 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
219 {' ', "", ' ', 0},
220 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
221 {' ', "", ' ', 0},
222 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
223 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
224 {' ', N_("&Execute macro... C-a, KEY"), 'E', menu_exec_macro_cmd},
225 {' ', N_("delete macr&O... "), 'O', menu_exec_macro_delete_cmd},
226 {' ', "", ' ', 0},
227 {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
228 {' ', "", ' ', 0},
229 {' ', N_("format p&Aragraph M-p"), 'A', menu_format_paragraph},
230 {' ', N_("'ispell' s&Pell check C-p"), 'P', menu_ispell_cmd},
231 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
232 {' ', N_("E&xternal Formatter F19"), 'C', menu_c_form_cmd},
233 {' ', N_("&Mail... "), 'M', menu_mail_cmd}
236 static menu_entry CmdMenuEmacs[] =
238 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
239 {' ', N_("goto matching &Bracket M-b"), 'B', menu_goto_bracket},
240 {' ', "", ' ', 0},
241 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
242 {' ', "", ' ', 0},
243 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
244 {' ', "", ' ', 0},
245 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
246 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
247 {' ', N_("&Execute macro... C-x e, KEY"), 'E', menu_exec_macro_cmd},
248 {' ', N_("delete macr&O... "), 'o', menu_exec_macro_delete_cmd},
249 {' ', "", ' ', 0},
250 {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
251 {' ', "", ' ', 0},
252 {' ', N_("format p&Aragraph M-p"), 'a', menu_format_paragraph},
253 {' ', N_("'ispell' s&Pell check M-$"), 'P', menu_ispell_cmd},
254 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
255 {' ', N_("E&xternal Formatter F19"), 'C', menu_c_form_cmd}
258 extern void menu_save_mode_cmd (void);
260 static menu_entry OptMenu[] =
262 {' ', N_("&General... "), 'G', menu_options},
263 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
264 #if 0
265 {' ', N_("&Layout..."), 'L', menu_layout_cmd}
266 #endif
269 static menu_entry OptMenuEmacs[] =
271 {' ', N_("&General... "), 'G', menu_options},
272 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
273 #if 0
274 {' ', N_("&Layout..."), 'L', menu_layout_cmd}
275 #endif
278 #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
280 Menu EditMenuBar[N_menus];
282 void edit_init_menu_normal (void)
284 EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu));
285 EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu));
286 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu));
287 EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu));
288 EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu));
291 void edit_init_menu_emacs (void)
293 EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs));
294 EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs));
295 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs));
296 EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs));
297 EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs));
300 void edit_done_menu (void)
302 int i;
303 for (i = 0; i < N_menus; i++)
304 destroy_menu (EditMenuBar[i]);
308 void edit_drop_menu_cmd (WEdit * e, int which)
310 if (edit_menubar->active)
311 return;
312 edit_menubar->active = 1;
313 edit_menubar->dropped = drop_menus;
314 edit_menubar->previous_selection = which >= 0 ? which : dlg_item_number (edit_dlg);
315 if (which >= 0)
316 edit_menubar->selected = which;
317 dlg_select_widget (edit_dlg, edit_menubar);
321 void edit_menu_cmd (WEdit * e)
323 edit_drop_menu_cmd (e, -1);
327 int edit_drop_hotkey_menu (WEdit * e, int key)
329 int m = 0;
330 switch (key) {
331 case ALT ('f'):
332 if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
333 return 0;
334 m = 0;
335 break;
336 case ALT ('e'):
337 m = 1;
338 break;
339 case ALT ('s'):
340 m = 2;
341 break;
342 case ALT ('c'):
343 m = 3;
344 break;
345 case ALT ('o'):
346 m = 4;
347 break;
348 default:
349 return 0;
352 edit_drop_menu_cmd (e, m);
353 return 1;
357 #else /* !MIDNIGHT */
360 extern CWidget *wedit;
362 void CSetEditMenu (const char *ident)
364 wedit = CIdent (ident);
367 CWidget *CGetEditMenu (void)
369 return wedit;
372 static void menu_cmd (unsigned long i)
374 XEvent e;
375 if (wedit) {
376 memset (&e, 0, sizeof (XEvent));
377 e.type = EditorCommand;
378 e.xkey.keycode = i;
379 e.xkey.window = wedit->winid;
380 CFocus (wedit);
381 CSendEvent (&e);
385 void CEditMenuCommand (int i)
387 menu_cmd ((unsigned long) i);
390 static void menu_key (KeySym i, int state)
392 int cmd, ch;
393 if (edit_translate_key (0, i, state, &cmd, &ch)) {
394 if (cmd > 0)
395 menu_cmd (cmd);
399 static void menu_ctrl_key (unsigned long i)
401 menu_key ((KeySym) i, ControlMask);
404 void CDrawEditMenuButtons (const char *ident, Window parent, Window focus_return, int x, int y)
406 int d;
408 CDrawMenuButton (catstrs (ident, ".filemenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 8,
409 /* The following are menu options. Do not change the key bindings (eg. C-o) and preserve '\t' */
410 _(" File "),
411 _("Open...\tC-o"), '~', menu_cmd, (unsigned long) CK_Load,
412 _("New\tC-n"), '~', menu_cmd, (unsigned long) CK_New,
413 "", ' ', (void *) 0, 0L,
414 _("Save\tF2"), '~', menu_cmd, (unsigned long) CK_Save,
415 _("Save as...\tF12"), '~', menu_cmd, (unsigned long) CK_Save_As,
416 "", ' ', (void *) 0, 0L,
417 _("Insert file...\tF15"), '~', menu_cmd, (unsigned long) CK_Insert_File,
418 _("Copy to file...\tC-f"), '~', menu_cmd, (unsigned long) CK_Save_Block
420 /* Tool hint */
421 CSetToolHint (catstrs (ident, ".filemenu", 0), _("Disk operations and file indexing/searching"));
423 CGetHintPos (&x, &d);
425 CDrawMenuButton (catstrs (ident, ".editmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 20,
426 _(" Edit "),
427 _("Toggle mark\tF3"), '~', menu_cmd, (unsigned long) CK_Mark,
428 _("Toggle mark columns\tC-b"), '~', menu_cmd, (unsigned long) CK_Column_Mark,
429 "", ' ', (void *) 0, 0L,
430 _("Toggle book mark\tC-M-Ins"), '~', menu_cmd, (unsigned long) CK_Toggle_Bookmark,
431 _("Previous book mark\tC-M-Up"), '~', menu_cmd, (unsigned long) CK_Prev_Bookmark,
432 _("Next book mark\tC-M-Down"), '~', menu_cmd, (unsigned long) CK_Next_Bookmark,
433 _("Flush book marks"), '~', menu_cmd, (unsigned long) CK_Flush_Bookmarks,
434 "", ' ', (void *) 0, 0L,
435 _("Toggle insert/overwrite\tIns"), '~', menu_cmd, (unsigned long) CK_Toggle_Insert,
436 "", ' ', (void *) 0, 0L,
437 _("Copy block to cursor\tF5"), '~', menu_cmd, (unsigned long) CK_Copy,
438 _("Move block to cursor\tF6"), '~', menu_cmd, (unsigned long) CK_Move,
439 _("Delete block\tF8/C-Del"), '~', menu_cmd, (unsigned long) CK_Remove,
440 "", ' ', (void *) 0, 0L,
441 _("Copy block to clipbrd\tC-Ins"), '~', menu_cmd, (unsigned long) CK_XStore,
442 _("Cut block to clipbrd\tS-Del"), '~', menu_cmd, (unsigned long) CK_XCut,
443 _("Paste block from clipbrd\tS-Ins"), '~', menu_cmd, (unsigned long) CK_XPaste,
444 _("Selection history\tM-Ins"), '~', menu_cmd, (unsigned long) CK_Selection_History,
445 "", ' ', (void *) 0, 0L,
446 _("Undo\tC-BackSpace"), '~', menu_cmd, (unsigned long) CK_Undo
448 /* Tool hint */
449 CSetToolHint (catstrs (ident, ".editmenu", 0), _("Manipulating blocks of text"));
451 CGetHintPos (&x, &d);
453 CDrawMenuButton (catstrs (ident, ".searchmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 4,
454 _(" Srch/Replce "),
455 _("Search...\tF7"), '~', menu_cmd, (unsigned long) CK_Find,
456 _("Search again\tF17"), '~', menu_cmd, (unsigned long) CK_Find_Again,
457 _("Replace...\tF4"), '~', menu_cmd, (unsigned long) CK_Replace,
458 _("Replace again\tF14"), '~', menu_cmd, (unsigned long) CK_Replace_Again
460 /* Tool hint */
461 CSetToolHint (catstrs (ident, ".searchmenu", 0), _("Search for and replace text"));
463 CGetHintPos (&x, &d);
465 CDrawMenuButton (catstrs (ident, ".commandmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 12,
466 _(" Command "),
467 _("Goto line...\tM-l"), '~', menu_cmd, (unsigned long) CK_Goto,
468 _("Goto matching bracket\tM-b"), '~', menu_cmd, (unsigned long) CK_Match_Bracket,
469 "", ' ', (void *) 0, 0L,
470 _("Start record macro\tC-r"), '~', menu_cmd, (unsigned long) CK_Begin_Record_Macro,
471 _("Finish record macro...\tC-r"), '~', menu_cmd, (unsigned long) CK_End_Record_Macro,
472 _("Execute macro...\tC-a, KEY"), '~', menu_ctrl_key, (unsigned long) XK_a,
473 _("Delete macro...\t"), '~', menu_cmd, (unsigned long) CK_Delete_Macro,
474 "", ' ', (void *) 0, 0L,
475 _("Insert date/time\tC-d"), '~', menu_cmd, (unsigned long) CK_Date,
476 _("Format paragraph\tM-p"), '~', menu_cmd, (unsigned long) CK_Paragraph_Format,
477 "", ' ', (void *) 0, 0L,
478 _("Refresh display\tC-l"), '~', menu_cmd, (unsigned long) CK_Refresh
480 /* Tool hint */
481 CSetToolHint (catstrs (ident, ".commandmenu", 0), _("Macros and internal commands"));
485 #endif /* !MIDNIGHT */