Indentation.
[midnight-commander.git] / src / editor / editmenu.c
bloba55636d379348f58b2d833f830f54e44bfb8c881
1 /*
2 Editor menu definitions and initialisation
4 Copyright (C) 1996, 1998, 2001, 2002, 2003, 2005, 2007, 2011, 2012
5 The Free Software Foundation, Inc.
7 Written by:
8 Paul Sheer, 1996, 1997
9 Andrew Borodin <aborodin@vmail.ru> 2012
11 This file is part of the Midnight Commander.
13 The Midnight Commander is free software: you can redistribute it
14 and/or modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation, either version 3 of the License,
16 or (at your option) any later version.
18 The Midnight Commander is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 /** \file
28 * \brief Source: editor menu definitions and initialisation
29 * \author Paul Sheer
30 * \date 1996, 1997
33 #include <config.h>
35 #include <stdio.h>
36 #include <stdarg.h>
37 #include <sys/types.h>
38 #include <unistd.h>
39 #include <string.h>
40 #include <ctype.h>
41 #include <errno.h>
42 #include <sys/stat.h>
43 #include <stdlib.h>
45 #include "lib/global.h"
47 #include "lib/tty/tty.h" /* KEY_F */
48 #include "lib/tty/key.h" /* XCTRL */
49 #include "lib/widget.h"
51 #include "src/setup.h" /* drop_menus */
52 #include "src/keybind-defaults.h"
54 #include "edit-impl.h"
55 #include "editwidget.h"
57 /*** global variables ****************************************************************************/
59 /*** file scope macro definitions ****************************************************************/
61 /*** file scope type declarations ****************************************************************/
63 /*** file scope variables ************************************************************************/
65 /*** file scope functions ************************************************************************/
66 /* --------------------------------------------------------------------------------------------- */
68 static GList *
69 create_file_menu (void)
71 GList *entries = NULL;
73 entries = g_list_prepend (entries, menu_entry_create (_("&Open file..."), CK_EditFile));
74 entries = g_list_prepend (entries, menu_entry_create (_("&New"), CK_EditNew));
75 entries = g_list_prepend (entries, menu_entry_create (_("&Close"), CK_Close));
76 entries = g_list_prepend (entries, menu_separator_create ());
77 entries = g_list_prepend (entries, menu_entry_create (_("&Save"), CK_Save));
78 entries = g_list_prepend (entries, menu_entry_create (_("Save &as..."), CK_SaveAs));
79 entries = g_list_prepend (entries, menu_separator_create ());
80 entries = g_list_prepend (entries, menu_entry_create (_("&Insert file..."), CK_InsertFile));
81 entries = g_list_prepend (entries, menu_entry_create (_("Cop&y to file..."), CK_BlockSave));
82 entries = g_list_prepend (entries, menu_separator_create ());
83 entries = g_list_prepend (entries, menu_entry_create (_("&User menu..."), CK_UserMenu));
84 entries = g_list_prepend (entries, menu_separator_create ());
85 entries = g_list_prepend (entries, menu_entry_create (_("A&bout..."), CK_About));
86 entries = g_list_prepend (entries, menu_separator_create ());
87 entries = g_list_prepend (entries, menu_entry_create (_("&Quit"), CK_Quit));
89 return g_list_reverse (entries);
92 /* --------------------------------------------------------------------------------------------- */
94 static GList *
95 create_edit_menu (void)
97 GList *entries = NULL;
99 entries = g_list_prepend (entries, menu_entry_create (_("&Undo"), CK_Undo));
100 entries = g_list_prepend (entries, menu_entry_create (_("&Redo"), CK_Redo));
101 entries = g_list_prepend (entries, menu_separator_create ());
102 entries =
103 g_list_prepend (entries, menu_entry_create (_("&Toggle ins/overw"), CK_InsertOverwrite));
104 entries = g_list_prepend (entries, menu_separator_create ());
105 entries = g_list_prepend (entries, menu_entry_create (_("To&ggle mark"), CK_Mark));
106 entries = g_list_prepend (entries, menu_entry_create (_("&Mark columns"), CK_MarkColumn));
107 entries = g_list_prepend (entries, menu_entry_create (_("Mark &all"), CK_MarkAll));
108 entries = g_list_prepend (entries, menu_entry_create (_("Unmar&k"), CK_Unmark));
109 entries = g_list_prepend (entries, menu_separator_create ());
110 entries = g_list_prepend (entries, menu_entry_create (_("Cop&y"), CK_Copy));
111 entries = g_list_prepend (entries, menu_entry_create (_("Mo&ve"), CK_Move));
112 entries = g_list_prepend (entries, menu_entry_create (_("&Delete"), CK_Remove));
113 entries = g_list_prepend (entries, menu_separator_create ());
114 entries = g_list_prepend (entries, menu_entry_create (_("Co&py to clipfile"), CK_Store));
115 entries = g_list_prepend (entries, menu_entry_create (_("&Cut to clipfile"), CK_Cut));
116 entries = g_list_prepend (entries, menu_entry_create (_("Pa&ste from clipfile"), CK_Paste));
117 entries = g_list_prepend (entries, menu_separator_create ());
118 entries = g_list_prepend (entries, menu_entry_create (_("&Beginning"), CK_Top));
119 entries = g_list_prepend (entries, menu_entry_create (_("&End"), CK_Bottom));
121 return g_list_reverse (entries);
124 /* --------------------------------------------------------------------------------------------- */
126 static GList *
127 create_search_replace_menu (void)
129 GList *entries = NULL;
131 entries = g_list_prepend (entries, menu_entry_create (_("&Search..."), CK_Search));
132 entries = g_list_prepend (entries, menu_entry_create (_("Search &again"), CK_SearchContinue));
133 entries = g_list_prepend (entries, menu_entry_create (_("&Replace..."), CK_Replace));
134 entries = g_list_prepend (entries, menu_separator_create ());
135 entries = g_list_prepend (entries, menu_entry_create (_("&Toggle bookmark"), CK_Bookmark));
136 entries = g_list_prepend (entries, menu_entry_create (_("&Next bookmark"), CK_BookmarkNext));
137 entries = g_list_prepend (entries, menu_entry_create (_("&Prev bookmark"), CK_BookmarkPrev));
138 entries = g_list_prepend (entries, menu_entry_create (_("&Flush bookmarks"), CK_BookmarkFlush));
140 return g_list_reverse (entries);
143 /* --------------------------------------------------------------------------------------------- */
145 static GList *
146 create_command_menu (void)
148 GList *entries = NULL;
150 entries = g_list_prepend (entries, menu_entry_create (_("&Go to line..."), CK_Goto));
151 entries = g_list_prepend (entries, menu_entry_create (_("&Toggle line state"), CK_ShowNumbers));
152 entries =
153 g_list_prepend (entries, menu_entry_create (_("Go to matching &bracket"), CK_MatchBracket));
154 entries =
155 g_list_prepend (entries,
156 menu_entry_create (_("Toggle s&yntax highlighting"), CK_SyntaxOnOff));
157 entries = g_list_prepend (entries, menu_separator_create ());
158 entries = g_list_prepend (entries, menu_entry_create (_("&Find declaration"), CK_Find));
159 entries =
160 g_list_prepend (entries, menu_entry_create (_("Back from &declaration"), CK_FilePrev));
161 entries =
162 g_list_prepend (entries, menu_entry_create (_("For&ward to declaration"), CK_FileNext));
163 #ifdef HAVE_CHARSET
164 entries = g_list_prepend (entries, menu_separator_create ());
165 entries = g_list_prepend (entries, menu_entry_create (_("Encod&ing..."), CK_SelectCodepage));
166 #endif
167 entries = g_list_prepend (entries, menu_separator_create ());
168 entries = g_list_prepend (entries, menu_entry_create (_("&Refresh screen"), CK_Refresh));
169 entries = g_list_prepend (entries, menu_separator_create ());
170 entries =
171 g_list_prepend (entries,
172 menu_entry_create (_("&Start/Stop record macro"), CK_MacroStartStopRecord));
173 entries = g_list_prepend (entries, menu_entry_create (_("Delete macr&o..."), CK_MacroDelete));
174 entries =
175 g_list_prepend (entries,
176 menu_entry_create (_("Record/Repeat &actions"), CK_RepeatStartStopRecord));
177 entries = g_list_prepend (entries, menu_separator_create ());
178 #ifdef HAVE_ASPELL
179 if (strcmp (spell_language, "NONE") != 0)
181 entries = g_list_prepend (entries, menu_entry_create (_("S&pell check"), CK_SpellCheck));
182 entries =
183 g_list_prepend (entries,
184 menu_entry_create (_("C&heck word"), CK_SpellCheckCurrentWord));
185 entries =
186 g_list_prepend (entries,
187 menu_entry_create (_("Change spelling &language..."),
188 CK_SpellCheckSelectLang));
189 entries = g_list_prepend (entries, menu_separator_create ());
191 #endif /* HAVE_ASPELL */
192 entries = g_list_prepend (entries, menu_entry_create (_("&Mail..."), CK_Mail));
195 return g_list_reverse (entries);
198 /* --------------------------------------------------------------------------------------------- */
200 static GList *
201 create_format_menu (void)
203 GList *entries = NULL;
205 entries =
206 g_list_prepend (entries, menu_entry_create (_("Insert &literal..."), CK_InsertLiteral));
207 entries = g_list_prepend (entries, menu_entry_create (_("Insert &date/time"), CK_Date));
208 entries = g_list_prepend (entries, menu_separator_create ());
209 entries =
210 g_list_prepend (entries, menu_entry_create (_("&Format paragraph"), CK_ParagraphFormat));
211 entries = g_list_prepend (entries, menu_entry_create (_("&Sort..."), CK_Sort));
212 entries =
213 g_list_prepend (entries, menu_entry_create (_("&Paste output of..."), CK_ExternalCommand));
214 entries =
215 g_list_prepend (entries, menu_entry_create (_("&External formatter"), CK_PipeBlock (0)));
217 return g_list_reverse (entries);
220 /* --------------------------------------------------------------------------------------------- */
222 * Create the 'window' popup menu
225 static GList *
226 create_window_menu (void)
228 GList *entries = NULL;
230 entries = g_list_prepend (entries, menu_entry_create (_("&Move"), CK_WindowMove));
231 entries = g_list_prepend (entries, menu_entry_create (_("&Resize"), CK_WindowResize));
232 entries =
233 g_list_prepend (entries, menu_entry_create (_("&Toggle fullscreen"), CK_WindowFullscreen));
234 entries = g_list_prepend (entries, menu_separator_create ());
235 entries = g_list_prepend (entries, menu_entry_create (_("&Next"), CK_WindowNext));
236 entries = g_list_prepend (entries, menu_entry_create (_("&Previous"), CK_WindowPrev));
237 entries = g_list_prepend (entries, menu_entry_create (_("&List..."), CK_WindowList));
239 return g_list_reverse (entries);
242 /* --------------------------------------------------------------------------------------------- */
244 static GList *
245 create_options_menu (void)
247 GList *entries = NULL;
249 entries = g_list_prepend (entries, menu_entry_create (_("&General..."), CK_Options));
250 entries = g_list_prepend (entries, menu_entry_create (_("Save &mode..."), CK_OptionsSaveMode));
251 entries = g_list_prepend (entries, menu_entry_create (_("Learn &keys..."), CK_LearnKeys));
252 entries =
253 g_list_prepend (entries, menu_entry_create (_("Syntax &highlighting..."), CK_SyntaxChoose));
254 entries = g_list_prepend (entries, menu_separator_create ());
255 entries = g_list_prepend (entries, menu_entry_create (_("S&yntax file"), CK_EditSyntaxFile));
256 entries = g_list_prepend (entries, menu_entry_create (_("&Menu file"), CK_EditUserMenu));
257 entries = g_list_prepend (entries, menu_separator_create ());
258 entries = g_list_prepend (entries, menu_entry_create (_("&Save setup"), CK_SaveSetup));
260 return g_list_reverse (entries);
263 /* --------------------------------------------------------------------------------------------- */
265 static void
266 edit_drop_menu_cmd (WDialog * h, int which)
268 WMenuBar *menubar;
270 menubar = find_menubar (h);
272 if (!menubar->is_active)
274 menubar->is_active = TRUE;
275 menubar->is_dropped = (drop_menus != 0);
276 if (which >= 0)
277 menubar->selected = which;
279 menubar->previous_widget = dlg_get_current_widget_id (h);
280 dlg_select_widget (menubar);
284 /* --------------------------------------------------------------------------------------------- */
285 /*** public functions ****************************************************************************/
286 /* --------------------------------------------------------------------------------------------- */
288 void
289 edit_init_menu (struct WMenuBar *menubar)
291 menubar_add_menu (menubar,
292 create_menu (_("&File"), create_file_menu (), "[Internal File Editor]"));
293 menubar_add_menu (menubar,
294 create_menu (_("&Edit"), create_edit_menu (), "[Internal File Editor]"));
295 menubar_add_menu (menubar,
296 create_menu (_("&Search"), create_search_replace_menu (),
297 "[Internal File Editor]"));
298 menubar_add_menu (menubar,
299 create_menu (_("&Command"), create_command_menu (),
300 "[Internal File Editor]"));
301 menubar_add_menu (menubar,
302 create_menu (_("For&mat"), create_format_menu (), "[Internal File Editor]"));
303 menubar_add_menu (menubar,
304 create_menu (_("&Window"), create_window_menu (), "[Internal File Editor]"));
305 menubar_add_menu (menubar,
306 create_menu (_("&Options"), create_options_menu (),
307 "[Internal File Editor]"));
310 /* --------------------------------------------------------------------------------------------- */
312 void
313 edit_menu_cmd (WDialog * h)
315 edit_drop_menu_cmd (h, -1);
318 /* --------------------------------------------------------------------------------------------- */
320 gboolean
321 edit_drop_hotkey_menu (WDialog * h, int key)
323 int m = 0;
324 switch (key)
326 case ALT ('f'):
327 m = 0;
328 break;
329 case ALT ('e'):
330 m = 1;
331 break;
332 case ALT ('s'):
333 m = 2;
334 break;
335 case ALT ('c'):
336 m = 3;
337 break;
338 case ALT ('m'):
339 m = 4;
340 break;
341 case ALT ('w'):
342 m = 5;
343 break;
344 case ALT ('o'):
345 m = 6;
346 break;
347 default:
348 return FALSE;
351 edit_drop_menu_cmd (h, m);
352 return TRUE;
355 /* --------------------------------------------------------------------------------------------- */