mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 12:56:51 +03:00
fb48d4a295
The 'User Menu' entry is moved from 'File' submenu to 'Command' one. The 'Edit editor menu file' and 'Edit syntax file' entries are moved from main MC menu ('Command' submenu) to editor main menu ('Options' submenu) and renamed. src/cmd.c (check_for_default): moved to util.c and maken global. (menu_edit_cmd): rewritten to handle MC menu files only and renamed to edit_mc_menu_cmd. Editor relevant routines are moved to editor code. src/cmd.h: cleanup. src/main.c: main menu reorganization. src/user.h: moved editor macros to edit/edit.h. src/util.c, src/util.h: check_for_default function from src/cmd.h. Rewritten to use exist_file() function. edit/editcmddef.h: added new commands: CK_Load_Syntax_File and CK_Load_Menu_File. edit/edit.h: editor file macros from src/user.h. New type for file which is currently being edited. Modified edit_load_cmd function to be more advanced. edit/edit.c (edit_execute_cmd): handle new commands: CK_Load_Syntax_File and CK_Load_Menu_File. edit/editmenu.c: menu reorganization: moved two entries here from main MC menu. Added requireq handle functions. Small optimization: removed extra layer in menu entry handlers. edit/editcmd.c: menu and syntax files edit is implemented. Modified edit_load_cmd function to be more advanced.
563 lines
14 KiB
C
563 lines
14 KiB
C
/* editor menu definitions and initialisation
|
|
|
|
Copyright (C) 1996, 1998, 2001, 2002, 2003, 2005, 2007
|
|
Free Software Foundation, Inc.
|
|
|
|
Authors: 1996, 1997 Paul Sheer
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
02110-1301, USA.
|
|
*/
|
|
|
|
/** \file
|
|
* \brief Source: editor menu definitions and initialisation
|
|
* \author Paul Sheer
|
|
* \date 1996, 1997
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <sys/types.h>
|
|
#ifdef HAVE_UNISTD_H
|
|
# include <unistd.h>
|
|
#endif
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
#include <errno.h>
|
|
#include <sys/stat.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "../src/global.h"
|
|
|
|
#include "edit.h"
|
|
#include "../src/cmd.h"
|
|
#include "../src/wtools.h" /* query_dialog() */
|
|
#include "../src/menu.h" /* menu_entry */
|
|
#include "../src/tty.h" /* KEY_F */
|
|
#include "../src/key.h" /* XCTRL */
|
|
#include "../src/main.h" /* drop_menus */
|
|
#include "../src/learn.h" /* learn_keys */
|
|
|
|
#include "edit-widget.h"
|
|
#include "editcmddef.h"
|
|
|
|
static void
|
|
menu_cmd (int command)
|
|
{
|
|
edit_execute_key_command (wedit, command, -1);
|
|
edit_update_screen (wedit);
|
|
}
|
|
|
|
static void menu_key (int i)
|
|
{
|
|
send_message ((Widget *) wedit, WIDGET_KEY, i);
|
|
}
|
|
|
|
static void
|
|
edit_about_cmd (void)
|
|
{
|
|
query_dialog (_(" About "),
|
|
_("\n Cooledit v3.11.5\n\n"
|
|
" Copyright (C) 1996 the Free Software Foundation\n\n"
|
|
" A user friendly text editor written\n"
|
|
" for the Midnight Commander.\n"), D_NORMAL,
|
|
1, _("&OK"));
|
|
}
|
|
|
|
static void
|
|
menu_mail_cmd (void)
|
|
{
|
|
menu_cmd (CK_Mail);
|
|
}
|
|
|
|
static void
|
|
menu_load_cmd (void)
|
|
{
|
|
menu_cmd (CK_Load);
|
|
}
|
|
|
|
static void
|
|
menu_new_cmd (void)
|
|
{
|
|
menu_cmd (CK_New);
|
|
}
|
|
|
|
static void
|
|
menu_save_cmd (void)
|
|
{
|
|
menu_cmd (CK_Save);
|
|
}
|
|
|
|
static void
|
|
menu_save_as_cmd (void)
|
|
{
|
|
menu_cmd (CK_Save_As);
|
|
}
|
|
|
|
static void
|
|
menu_insert_file_cmd (void)
|
|
{
|
|
menu_cmd (CK_Insert_File);
|
|
}
|
|
|
|
static void
|
|
menu_quit_cmd (void)
|
|
{
|
|
menu_cmd (CK_Exit);
|
|
}
|
|
|
|
static void
|
|
menu_mark_cmd (void)
|
|
{
|
|
menu_cmd (CK_Mark);
|
|
}
|
|
|
|
static void
|
|
menu_markcol_cmd (void)
|
|
{
|
|
menu_cmd (CK_Column_Mark);
|
|
}
|
|
|
|
static void
|
|
menu_ins_cmd (void)
|
|
{
|
|
menu_cmd (CK_Toggle_Insert);
|
|
}
|
|
|
|
static void
|
|
menu_copy_cmd (void)
|
|
{
|
|
menu_cmd (CK_Copy);
|
|
}
|
|
|
|
static void
|
|
menu_move_cmd (void)
|
|
{
|
|
menu_cmd (CK_Move);
|
|
}
|
|
|
|
static void
|
|
menu_delete_cmd (void)
|
|
{
|
|
menu_cmd (CK_Remove);
|
|
}
|
|
|
|
static void
|
|
menu_cut_cmd (void)
|
|
{
|
|
menu_cmd (CK_Save_Block);
|
|
}
|
|
|
|
static void
|
|
menu_search_cmd (void)
|
|
{
|
|
menu_cmd (CK_Find);
|
|
}
|
|
|
|
static void
|
|
menu_search_again_cmd (void)
|
|
{
|
|
menu_cmd (CK_Find_Again);
|
|
}
|
|
|
|
static void
|
|
menu_replace_cmd (void)
|
|
{
|
|
menu_cmd (CK_Replace);
|
|
}
|
|
|
|
static void
|
|
menu_begin_record_cmd (void)
|
|
{
|
|
menu_cmd (CK_Begin_Record_Macro);
|
|
}
|
|
|
|
static void
|
|
menu_end_record_cmd (void)
|
|
{
|
|
menu_cmd (CK_End_Record_Macro);
|
|
}
|
|
|
|
static void
|
|
menu_exec_macro_cmd (void)
|
|
{
|
|
menu_key (XCTRL ('a'));
|
|
}
|
|
|
|
static void
|
|
menu_exec_macro_delete_cmd (void)
|
|
{
|
|
menu_cmd (CK_Delete_Macro);
|
|
}
|
|
|
|
static void
|
|
menu_c_form_cmd (void)
|
|
{
|
|
menu_key (KEY_F (19));
|
|
}
|
|
|
|
static void
|
|
menu_ispell_cmd (void)
|
|
{
|
|
menu_cmd (CK_Pipe_Block (1));
|
|
}
|
|
|
|
static void
|
|
menu_sort_cmd (void)
|
|
{
|
|
menu_cmd (CK_Sort);
|
|
}
|
|
|
|
static void
|
|
menu_ext_cmd (void)
|
|
{
|
|
menu_cmd (CK_ExtCmd);
|
|
}
|
|
|
|
static void
|
|
menu_date_cmd (void)
|
|
{
|
|
menu_cmd (CK_Date);
|
|
}
|
|
|
|
static void
|
|
menu_undo_cmd (void)
|
|
{
|
|
menu_cmd (CK_Undo);
|
|
}
|
|
|
|
static void
|
|
menu_beginning_cmd (void)
|
|
{
|
|
menu_cmd (CK_Beginning_Of_Text);
|
|
}
|
|
|
|
static void
|
|
menu_end_cmd (void)
|
|
{
|
|
menu_cmd (CK_End_Of_Text);
|
|
}
|
|
|
|
static void
|
|
menu_refresh_cmd (void)
|
|
{
|
|
menu_cmd (CK_Refresh);
|
|
}
|
|
|
|
static void
|
|
menu_goto_line (void)
|
|
{
|
|
menu_cmd (CK_Goto);
|
|
}
|
|
|
|
static void
|
|
menu_toggle_line_state (void)
|
|
{
|
|
menu_cmd (CK_Toggle_Line_State);
|
|
}
|
|
|
|
static void
|
|
menu_goto_bracket (void)
|
|
{
|
|
menu_cmd (CK_Match_Bracket);
|
|
}
|
|
|
|
static void
|
|
menu_lit_cmd (void)
|
|
{
|
|
menu_key (XCTRL ('q'));
|
|
}
|
|
|
|
static void
|
|
menu_format_paragraph (void)
|
|
{
|
|
menu_cmd (CK_Paragraph_Format);
|
|
}
|
|
|
|
static void
|
|
menu_edit_syntax_file_cmd (void)
|
|
{
|
|
menu_cmd (CK_Load_Syntax_File);
|
|
}
|
|
|
|
static void
|
|
menu_edit_menu_file_cmd (void)
|
|
{
|
|
menu_cmd (CK_Load_Menu_File);
|
|
}
|
|
|
|
static void
|
|
menu_user_menu_cmd (void)
|
|
{
|
|
menu_key (KEY_F (11));
|
|
}
|
|
|
|
static menu_entry FileMenu[] =
|
|
{
|
|
{' ', N_("&Open file..."), NULL_HOTKEY, menu_load_cmd},
|
|
{' ', N_("&New C-n"), NULL_HOTKEY, menu_new_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Save F2"), NULL_HOTKEY, menu_save_cmd},
|
|
{' ', N_("Save &as... F12"), NULL_HOTKEY, menu_save_as_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Insert file... F15"), NULL_HOTKEY, menu_insert_file_cmd},
|
|
{' ', N_("Copy to &file... C-f"), NULL_HOTKEY, menu_cut_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&User menu... F11"), NULL_HOTKEY, menu_user_menu_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("A&bout... "), NULL_HOTKEY, edit_about_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Quit F10"), NULL_HOTKEY, menu_quit_cmd}
|
|
};
|
|
|
|
static menu_entry FileMenuEmacs[] =
|
|
{
|
|
{' ', N_("&Open file..."), NULL_HOTKEY, menu_load_cmd},
|
|
{' ', N_("&New C-x k"), NULL_HOTKEY, menu_new_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Save F2"), NULL_HOTKEY, menu_save_cmd},
|
|
{' ', N_("Save &as... F12"), NULL_HOTKEY, menu_save_as_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Insert file... F15"), NULL_HOTKEY, menu_insert_file_cmd},
|
|
{' ', N_("Copy to &file... "), NULL_HOTKEY, menu_cut_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&User menu... F11"), NULL_HOTKEY, menu_user_menu_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("A&bout... "), NULL_HOTKEY, edit_about_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Quit F10"), NULL_HOTKEY, menu_quit_cmd}
|
|
};
|
|
|
|
static menu_entry EditMenu[] =
|
|
{
|
|
{' ', N_("&Toggle Mark F3"), NULL_HOTKEY, menu_mark_cmd},
|
|
{' ', N_("&Mark Columns S-F3"), NULL_HOTKEY, menu_markcol_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Toggle &ins/overw Ins"), NULL_HOTKEY, menu_ins_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Copy F5"), NULL_HOTKEY, menu_copy_cmd},
|
|
{' ', N_("&Move F6"), NULL_HOTKEY, menu_move_cmd},
|
|
{' ', N_("&Delete F8"), NULL_HOTKEY, menu_delete_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Undo C-u"), NULL_HOTKEY, menu_undo_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Beginning C-PgUp"), NULL_HOTKEY, menu_beginning_cmd},
|
|
{' ', N_("&End C-PgDn"), NULL_HOTKEY, menu_end_cmd}
|
|
};
|
|
|
|
#define EditMenuEmacs EditMenu
|
|
|
|
static menu_entry SearReplMenu[] =
|
|
{
|
|
{' ', N_("&Search... F7"), NULL_HOTKEY, menu_search_cmd},
|
|
{' ', N_("Search &again F17"), NULL_HOTKEY, menu_search_again_cmd},
|
|
{' ', N_("&Replace... F4"), NULL_HOTKEY, menu_replace_cmd}
|
|
};
|
|
|
|
#define SearReplMenuEmacs SearReplMenu
|
|
|
|
static menu_entry CmdMenu[] =
|
|
{
|
|
{' ', N_("&Go to line... M-l"), NULL_HOTKEY, menu_goto_line},
|
|
{' ', N_("Toggle li&ne state M-n"), NULL_HOTKEY, menu_toggle_line_state},
|
|
{' ', N_("Go to matching &bracket M-b"), NULL_HOTKEY, menu_goto_bracket},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Insert &literal... C-q"), NULL_HOTKEY, menu_lit_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Refresh screen C-l"), NULL_HOTKEY, menu_refresh_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Start record macro C-r"), NULL_HOTKEY, menu_begin_record_cmd},
|
|
{' ', N_("&Finish record macro... C-r"), NULL_HOTKEY, menu_end_record_cmd},
|
|
{' ', N_("&Execute macro... C-a, KEY"), NULL_HOTKEY, menu_exec_macro_cmd},
|
|
{' ', N_("Delete macr&o... "), NULL_HOTKEY, menu_exec_macro_delete_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Insert &date/time "), NULL_HOTKEY, menu_date_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Format p&aragraph M-p"), NULL_HOTKEY, menu_format_paragraph},
|
|
{' ', N_("'ispell' s&pell check C-p"), NULL_HOTKEY, menu_ispell_cmd},
|
|
{' ', N_("Sor&t... M-t"), NULL_HOTKEY, menu_sort_cmd},
|
|
{' ', N_("Paste o&utput of... M-u"), NULL_HOTKEY, menu_ext_cmd},
|
|
{' ', N_("E&xternal Formatter F19"), NULL_HOTKEY, menu_c_form_cmd},
|
|
{' ', N_("&Mail... "), NULL_HOTKEY, menu_mail_cmd}
|
|
};
|
|
|
|
static menu_entry CmdMenuEmacs[] =
|
|
{
|
|
{' ', N_("&Go to line... M-l"), NULL_HOTKEY, menu_goto_line},
|
|
{' ', N_("Toggle li&ne state M-n"), NULL_HOTKEY, menu_toggle_line_state},
|
|
{' ', N_("Go to matching &bracket M-b"), NULL_HOTKEY, menu_goto_bracket},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Insert &literal... C-q"), NULL_HOTKEY, menu_lit_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Refresh screen C-l"), NULL_HOTKEY, menu_refresh_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("&Start record macro C-r"), NULL_HOTKEY, menu_begin_record_cmd},
|
|
{' ', N_("&Finish record macro... C-r"), NULL_HOTKEY, menu_end_record_cmd},
|
|
{' ', N_("&Execute macro... C-x e, KEY"), NULL_HOTKEY, menu_exec_macro_cmd},
|
|
{' ', N_("Delete macr&o... "), NULL_HOTKEY, menu_exec_macro_delete_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Insert &date/time "), NULL_HOTKEY, menu_date_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Format p&aragraph M-p"), NULL_HOTKEY, menu_format_paragraph},
|
|
{' ', N_("'ispell' s&pell check M-$"), NULL_HOTKEY, menu_ispell_cmd},
|
|
{' ', N_("Sor&t... M-t"), NULL_HOTKEY, menu_sort_cmd},
|
|
{' ', N_("Paste o&utput of... M-u"), NULL_HOTKEY, menu_ext_cmd},
|
|
{' ', N_("E&xternal Formatter F19"), NULL_HOTKEY, menu_c_form_cmd},
|
|
{' ', N_("&Mail... "), NULL_HOTKEY, menu_mail_cmd}
|
|
};
|
|
|
|
static menu_entry OptMenu[] =
|
|
{
|
|
{' ', N_("&General... "), NULL_HOTKEY, edit_options_dialog},
|
|
{' ', N_("&Save mode..."), NULL_HOTKEY, menu_save_mode_cmd},
|
|
{' ', N_("Learn &Keys..."), NULL_HOTKEY, learn_keys},
|
|
{' ', N_("Syntax &Highlighting..."), NULL_HOTKEY, edit_syntax_dialog},
|
|
{' ', N_("S&yntax file"), NULL_HOTKEY, menu_edit_syntax_file_cmd},
|
|
{' ', N_("&Menu file"), NULL_HOTKEY, menu_edit_menu_file_cmd},
|
|
{' ', "", NULL_HOTKEY, 0},
|
|
{' ', N_("Save setu&p"), NULL_HOTKEY, save_setup_cmd}
|
|
};
|
|
|
|
#define OptMenuEmacs OptMenu
|
|
|
|
#define menu_entries(x) sizeof(x)/sizeof(menu_entry)
|
|
|
|
#define N_menus 5
|
|
|
|
static Menu *EditMenuBar [N_menus];
|
|
|
|
static void
|
|
edit_init_menu_normal (void)
|
|
{
|
|
EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu),
|
|
"[Internal File Editor]");
|
|
}
|
|
|
|
static void
|
|
edit_init_menu_emacs (void)
|
|
{
|
|
EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs),
|
|
"[Internal File Editor]");
|
|
EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs),
|
|
"[Internal File Editor]");
|
|
}
|
|
|
|
static void
|
|
edit_init_menu (void)
|
|
{
|
|
switch (edit_key_emulation) {
|
|
default:
|
|
case EDIT_KEY_EMULATION_NORMAL:
|
|
edit_init_menu_normal ();
|
|
break;
|
|
case EDIT_KEY_EMULATION_EMACS:
|
|
edit_init_menu_emacs ();
|
|
break;
|
|
}
|
|
}
|
|
|
|
struct WMenu *
|
|
edit_create_menu (void)
|
|
{
|
|
edit_init_menu ();
|
|
return menubar_new (0, 0, COLS, EditMenuBar, N_menus);
|
|
}
|
|
|
|
void
|
|
edit_done_menu (struct WMenu *wmenu)
|
|
{
|
|
int i;
|
|
for (i = 0; i < N_menus; i++)
|
|
destroy_menu (wmenu->menu[i]);
|
|
}
|
|
|
|
|
|
void
|
|
edit_reload_menu (void)
|
|
{
|
|
edit_done_menu (edit_menubar);
|
|
edit_init_menu ();
|
|
menubar_arrange (edit_menubar);
|
|
}
|
|
|
|
|
|
static void
|
|
edit_drop_menu_cmd (WEdit *e, int which)
|
|
{
|
|
if (edit_menubar->active)
|
|
return;
|
|
edit_menubar->active = 1;
|
|
edit_menubar->dropped = drop_menus;
|
|
if (which >= 0) {
|
|
edit_menubar->selected = which;
|
|
}
|
|
|
|
edit_menubar->previous_widget = e->widget.parent->current->dlg_id;
|
|
dlg_select_widget (edit_menubar);
|
|
}
|
|
|
|
|
|
void edit_menu_cmd (WEdit * e)
|
|
{
|
|
edit_drop_menu_cmd (e, -1);
|
|
}
|
|
|
|
|
|
int edit_drop_hotkey_menu (WEdit * e, int key)
|
|
{
|
|
int m = 0;
|
|
switch (key) {
|
|
case ALT ('f'):
|
|
if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
|
|
return 0;
|
|
m = 0;
|
|
break;
|
|
case ALT ('e'):
|
|
m = 1;
|
|
break;
|
|
case ALT ('s'):
|
|
m = 2;
|
|
break;
|
|
case ALT ('c'):
|
|
m = 3;
|
|
break;
|
|
case ALT ('o'):
|
|
m = 4;
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
|
|
edit_drop_menu_cmd (e, m);
|
|
return 1;
|
|
}
|