root/src/editor/editmenu.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. create_file_menu
  2. create_edit_menu
  3. create_search_replace_menu
  4. create_command_menu
  5. create_format_menu
  6. create_window_menu
  7. create_options_menu
  8. edit_drop_menu_cmd
  9. edit_init_menu
  10. edit_menu_cmd
  11. edit_drop_hotkey_menu

   1 /*
   2    Editor menu definitions and initialisation
   3 
   4    Copyright (C) 1996-2024
   5    Free Software Foundation, Inc.
   6 
   7    Written by:
   8    Paul Sheer, 1996, 1997
   9    Andrew Borodin <aborodin@vmail.ru> 2012
  10 
  11    This file is part of the Midnight Commander.
  12 
  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.
  17 
  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.
  22 
  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/>.
  25  */
  26 
  27 /** \file
  28  *  \brief Source: editor menu definitions and initialisation
  29  *  \author Paul Sheer
  30  *  \date 1996, 1997
  31  */
  32 
  33 #include <config.h>
  34 
  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 <sys/stat.h>
  42 #include <stdlib.h>
  43 
  44 #include "lib/global.h"
  45 
  46 #include "lib/tty/tty.h"        /* KEY_F */
  47 #include "lib/tty/key.h"        /* XCTRL */
  48 #include "lib/widget.h"
  49 
  50 #include "src/setup.h"          /* drop_menus */
  51 #include "src/keymap.h"
  52 
  53 #include "edit-impl.h"
  54 #include "editwidget.h"
  55 
  56 /*** global variables ****************************************************************************/
  57 
  58 /*** file scope macro definitions ****************************************************************/
  59 
  60 /*** file scope type declarations ****************************************************************/
  61 
  62 /*** forward declarations (file scope functions) *************************************************/
  63 
  64 /*** file scope variables ************************************************************************/
  65 
  66 /* --------------------------------------------------------------------------------------------- */
  67 /*** file scope functions ************************************************************************/
  68 /* --------------------------------------------------------------------------------------------- */
  69 
  70 static GList *
  71 create_file_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
  72 {
  73     GList *entries = NULL;
  74 
  75     entries = g_list_prepend (entries, menu_entry_new (_("&Open file..."), CK_EditFile));
  76     entries = g_list_prepend (entries, menu_entry_new (_("&New"), CK_EditNew));
  77     entries = g_list_prepend (entries, menu_entry_new (_("&Close"), CK_Close));
  78     entries = g_list_prepend (entries, menu_entry_new (_("&History..."), CK_History));
  79     entries = g_list_prepend (entries, menu_separator_new ());
  80     entries = g_list_prepend (entries, menu_entry_new (_("&Save"), CK_Save));
  81     entries = g_list_prepend (entries, menu_entry_new (_("Save &as..."), CK_SaveAs));
  82     entries = g_list_prepend (entries, menu_separator_new ());
  83     entries = g_list_prepend (entries, menu_entry_new (_("&Insert file..."), CK_InsertFile));
  84     entries = g_list_prepend (entries, menu_entry_new (_("Cop&y to file..."), CK_BlockSave));
  85     entries = g_list_prepend (entries, menu_separator_new ());
  86     entries = g_list_prepend (entries, menu_entry_new (_("&User menu..."), CK_UserMenu));
  87     entries = g_list_prepend (entries, menu_separator_new ());
  88     entries = g_list_prepend (entries, menu_entry_new (_("A&bout..."), CK_About));
  89     entries = g_list_prepend (entries, menu_separator_new ());
  90     entries = g_list_prepend (entries, menu_entry_new (_("&Quit"), CK_Quit));
  91 
  92     return g_list_reverse (entries);
  93 }
  94 
  95 /* --------------------------------------------------------------------------------------------- */
  96 
  97 static GList *
  98 create_edit_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
  99 {
 100     GList *entries = NULL;
 101 
 102     entries = g_list_prepend (entries, menu_entry_new (_("&Undo"), CK_Undo));
 103     entries = g_list_prepend (entries, menu_entry_new (_("&Redo"), CK_Redo));
 104     entries = g_list_prepend (entries, menu_separator_new ());
 105     entries = g_list_prepend (entries, menu_entry_new (_("&Toggle ins/overw"), CK_InsertOverwrite));
 106     entries = g_list_prepend (entries, menu_separator_new ());
 107     entries = g_list_prepend (entries, menu_entry_new (_("To&ggle mark"), CK_Mark));
 108     entries = g_list_prepend (entries, menu_entry_new (_("&Mark columns"), CK_MarkColumn));
 109     entries = g_list_prepend (entries, menu_entry_new (_("Mark &all"), CK_MarkAll));
 110     entries = g_list_prepend (entries, menu_entry_new (_("Unmar&k"), CK_Unmark));
 111     entries = g_list_prepend (entries, menu_separator_new ());
 112     entries = g_list_prepend (entries, menu_entry_new (_("Cop&y"), CK_Copy));
 113     entries = g_list_prepend (entries, menu_entry_new (_("Mo&ve"), CK_Move));
 114     entries = g_list_prepend (entries, menu_entry_new (_("&Delete"), CK_Remove));
 115     entries = g_list_prepend (entries, menu_separator_new ());
 116     entries = g_list_prepend (entries, menu_entry_new (_("Co&py to clipfile"), CK_Store));
 117     entries = g_list_prepend (entries, menu_entry_new (_("&Cut to clipfile"), CK_Cut));
 118     entries = g_list_prepend (entries, menu_entry_new (_("Pa&ste from clipfile"), CK_Paste));
 119     entries = g_list_prepend (entries, menu_separator_new ());
 120     entries = g_list_prepend (entries, menu_entry_new (_("&Beginning"), CK_Top));
 121     entries = g_list_prepend (entries, menu_entry_new (_("&End"), CK_Bottom));
 122 
 123     return g_list_reverse (entries);
 124 }
 125 
 126 /* --------------------------------------------------------------------------------------------- */
 127 
 128 static GList *
 129 create_search_replace_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 130 {
 131     GList *entries = NULL;
 132 
 133     entries = g_list_prepend (entries, menu_entry_new (_("&Search..."), CK_Search));
 134     entries = g_list_prepend (entries, menu_entry_new (_("Search &again"), CK_SearchContinue));
 135     entries = g_list_prepend (entries, menu_entry_new (_("&Replace..."), CK_Replace));
 136     entries = g_list_prepend (entries, menu_separator_new ());
 137     entries = g_list_prepend (entries, menu_entry_new (_("&Toggle bookmark"), CK_Bookmark));
 138     entries = g_list_prepend (entries, menu_entry_new (_("&Next bookmark"), CK_BookmarkNext));
 139     entries = g_list_prepend (entries, menu_entry_new (_("&Prev bookmark"), CK_BookmarkPrev));
 140     entries = g_list_prepend (entries, menu_entry_new (_("&Flush bookmarks"), CK_BookmarkFlush));
 141 
 142     return g_list_reverse (entries);
 143 }
 144 
 145 /* --------------------------------------------------------------------------------------------- */
 146 
 147 static GList *
 148 create_command_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 149 {
 150     GList *entries = NULL;
 151 
 152     entries = g_list_prepend (entries, menu_entry_new (_("&Go to line..."), CK_Goto));
 153     entries = g_list_prepend (entries, menu_entry_new (_("&Toggle line state"), CK_ShowNumbers));
 154     entries =
 155         g_list_prepend (entries, menu_entry_new (_("Go to matching &bracket"), CK_MatchBracket));
 156     entries =
 157         g_list_prepend (entries, menu_entry_new (_("Toggle s&yntax highlighting"), CK_SyntaxOnOff));
 158     entries = g_list_prepend (entries, menu_separator_new ());
 159     entries = g_list_prepend (entries, menu_entry_new (_("&Find declaration"), CK_Find));
 160     entries = g_list_prepend (entries, menu_entry_new (_("Back from &declaration"), CK_FilePrev));
 161     entries = g_list_prepend (entries, menu_entry_new (_("For&ward to declaration"), CK_FileNext));
 162 #ifdef HAVE_CHARSET
 163     entries = g_list_prepend (entries, menu_separator_new ());
 164     entries = g_list_prepend (entries, menu_entry_new (_("Encod&ing..."), CK_SelectCodepage));
 165 #endif
 166     entries = g_list_prepend (entries, menu_separator_new ());
 167     entries = g_list_prepend (entries, menu_entry_new (_("&Refresh screen"), CK_Refresh));
 168     entries = g_list_prepend (entries, menu_separator_new ());
 169     entries =
 170         g_list_prepend (entries,
 171                         menu_entry_new (_("&Start/Stop record macro"), CK_MacroStartStopRecord));
 172     entries = g_list_prepend (entries, menu_entry_new (_("Delete macr&o..."), CK_MacroDelete));
 173     entries =
 174         g_list_prepend (entries,
 175                         menu_entry_new (_("Record/Repeat &actions"), CK_RepeatStartStopRecord));
 176     entries = g_list_prepend (entries, menu_separator_new ());
 177 #ifdef HAVE_ASPELL
 178     if (strcmp (spell_language, "NONE") != 0)
 179     {
 180         entries = g_list_prepend (entries, menu_entry_new (_("S&pell check"), CK_SpellCheck));
 181         entries =
 182             g_list_prepend (entries, menu_entry_new (_("C&heck word"), CK_SpellCheckCurrentWord));
 183         entries =
 184             g_list_prepend (entries,
 185                             menu_entry_new (_("Change spelling &language..."),
 186                                             CK_SpellCheckSelectLang));
 187         entries = g_list_prepend (entries, menu_separator_new ());
 188     }
 189 #endif /* HAVE_ASPELL */
 190     entries = g_list_prepend (entries, menu_entry_new (_("&Mail..."), CK_EditMail));
 191 
 192 
 193     return g_list_reverse (entries);
 194 }
 195 
 196 /* --------------------------------------------------------------------------------------------- */
 197 
 198 static GList *
 199 create_format_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 200 {
 201     GList *entries = NULL;
 202 
 203     entries = g_list_prepend (entries, menu_entry_new (_("Insert &literal..."), CK_InsertLiteral));
 204     entries = g_list_prepend (entries, menu_entry_new (_("Insert &date/time"), CK_Date));
 205     entries = g_list_prepend (entries, menu_separator_new ());
 206     entries = g_list_prepend (entries, menu_entry_new (_("&Format paragraph"), CK_ParagraphFormat));
 207     entries = g_list_prepend (entries, menu_entry_new (_("&Sort..."), CK_Sort));
 208     entries =
 209         g_list_prepend (entries, menu_entry_new (_("&Paste output of..."), CK_ExternalCommand));
 210     entries = g_list_prepend (entries, menu_entry_new (_("&External formatter"), CK_PipeBlock (0)));
 211 
 212     return g_list_reverse (entries);
 213 }
 214 
 215 /* --------------------------------------------------------------------------------------------- */
 216 /**
 217  * Create the 'window' popup menu
 218  */
 219 
 220 static GList *
 221 create_window_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 222 {
 223     GList *entries = NULL;
 224 
 225     entries = g_list_prepend (entries, menu_entry_new (_("&Move"), CK_WindowMove));
 226     entries = g_list_prepend (entries, menu_entry_new (_("&Resize"), CK_WindowResize));
 227     entries =
 228         g_list_prepend (entries, menu_entry_new (_("&Toggle fullscreen"), CK_WindowFullscreen));
 229     entries = g_list_prepend (entries, menu_separator_new ());
 230     entries = g_list_prepend (entries, menu_entry_new (_("&Next"), CK_WindowNext));
 231     entries = g_list_prepend (entries, menu_entry_new (_("&Previous"), CK_WindowPrev));
 232     entries = g_list_prepend (entries, menu_entry_new (_("&List..."), CK_WindowList));
 233 
 234     return g_list_reverse (entries);
 235 }
 236 
 237 /* --------------------------------------------------------------------------------------------- */
 238 
 239 static GList *
 240 create_options_menu (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 241 {
 242     GList *entries = NULL;
 243 
 244     entries = g_list_prepend (entries, menu_entry_new (_("&General..."), CK_Options));
 245     entries = g_list_prepend (entries, menu_entry_new (_("Save &mode..."), CK_OptionsSaveMode));
 246     entries = g_list_prepend (entries, menu_entry_new (_("Learn &keys..."), CK_LearnKeys));
 247     entries =
 248         g_list_prepend (entries, menu_entry_new (_("Syntax &highlighting..."), CK_SyntaxChoose));
 249     entries = g_list_prepend (entries, menu_separator_new ());
 250     entries = g_list_prepend (entries, menu_entry_new (_("S&yntax file"), CK_EditSyntaxFile));
 251     entries = g_list_prepend (entries, menu_entry_new (_("&Menu file"), CK_EditUserMenu));
 252     entries = g_list_prepend (entries, menu_separator_new ());
 253     entries = g_list_prepend (entries, menu_entry_new (_("&Save setup"), CK_SaveSetup));
 254 
 255     return g_list_reverse (entries);
 256 }
 257 
 258 /* --------------------------------------------------------------------------------------------- */
 259 
 260 static void
 261 edit_drop_menu_cmd (WDialog * h, int which)
     /* [previous][next][first][last][top][bottom][index][help]  */
 262 {
 263     WMenuBar *menubar;
 264 
 265     menubar = menubar_find (h);
 266     menubar_activate (menubar, drop_menus, which);
 267 }
 268 
 269 /* --------------------------------------------------------------------------------------------- */
 270 /*** public functions ****************************************************************************/
 271 /* --------------------------------------------------------------------------------------------- */
 272 
 273 void
 274 edit_init_menu (WMenuBar * menubar)
     /* [previous][next][first][last][top][bottom][index][help]  */
 275 {
 276     menubar_add_menu (menubar,
 277                       menu_new (_("&File"), create_file_menu (), "[Internal File Editor]"));
 278     menubar_add_menu (menubar,
 279                       menu_new (_("&Edit"), create_edit_menu (), "[Internal File Editor]"));
 280     menubar_add_menu (menubar,
 281                       menu_new (_("&Search"), create_search_replace_menu (),
 282                                 "[Internal File Editor]"));
 283     menubar_add_menu (menubar,
 284                       menu_new (_("&Command"), create_command_menu (), "[Internal File Editor]"));
 285     menubar_add_menu (menubar,
 286                       menu_new (_("For&mat"), create_format_menu (), "[Internal File Editor]"));
 287     menubar_add_menu (menubar,
 288                       menu_new (_("&Window"), create_window_menu (), "[Internal File Editor]"));
 289     menubar_add_menu (menubar,
 290                       menu_new (_("&Options"), create_options_menu (), "[Internal File Editor]"));
 291 }
 292 
 293 /* --------------------------------------------------------------------------------------------- */
 294 
 295 void
 296 edit_menu_cmd (WDialog * h)
     /* [previous][next][first][last][top][bottom][index][help]  */
 297 {
 298     edit_drop_menu_cmd (h, -1);
 299 }
 300 
 301 /* --------------------------------------------------------------------------------------------- */
 302 
 303 gboolean
 304 edit_drop_hotkey_menu (WDialog * h, int key)
     /* [previous][next][first][last][top][bottom][index][help]  */
 305 {
 306     int m = 0;
 307     switch (key)
 308     {
 309     case ALT ('f'):
 310         m = 0;
 311         break;
 312     case ALT ('e'):
 313         m = 1;
 314         break;
 315     case ALT ('s'):
 316         m = 2;
 317         break;
 318     case ALT ('c'):
 319         m = 3;
 320         break;
 321     case ALT ('m'):
 322         m = 4;
 323         break;
 324     case ALT ('w'):
 325         m = 5;
 326         break;
 327     case ALT ('o'):
 328         m = 6;
 329         break;
 330     default:
 331         return FALSE;
 332     }
 333 
 334     edit_drop_menu_cmd (h, m);
 335     return TRUE;
 336 }
 337 
 338 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */