Manual pages: mcmcdiffmceditmcview

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

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