From 3f882f50e0b8eb66a59c955a910c5821473abe4b Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Sat, 3 Dec 2022 12:11:27 +0300 Subject: [PATCH] Ticket #4413: mcedit: syntax definitions in user location don't work. Fix location of all user's syntax related stuff. Now it is the ~/.local/share/mc/syntax/ directory. Don't use the system configuration directory (/etc/mc) as a storage of syntax definitions. Signed-off-by: Andrew Borodin --- doc/man/mcedit.1.in | 8 +++++--- lib/fileloc.h | 3 ++- lib/mcconfig/paths.c | 2 +- src/editor/editcmd.c | 6 +++--- src/editor/syntax.c | 16 +++++----------- tests/lib/mcconfig/user_configs_path.c | 4 ++-- 6 files changed, 18 insertions(+), 21 deletions(-) diff --git a/doc/man/mcedit.1.in b/doc/man/mcedit.1.in index 470481c1f..2db49d316 100644 --- a/doc/man/mcedit.1.in +++ b/doc/man/mcedit.1.in @@ -237,12 +237,12 @@ where equal is symbol "=" goes to next function in navigation list supports syntax highlighting. This means that keywords and contexts (like C comments, string constants, etc) are highlighted in different colors. The following section explains the format of the file -.BR ~/.config/mc/mcedit/Syntax . +.BR ~/.local/share/mc/syntax/Syntax . If this file is missing, system\-wide .B %pkgdatadir%/syntax/Syntax is used. The file -.B ~/.config/mc/mcedit/Syntax +.B ~/.local/share/mc/syntax/Syntax is rescanned on opening of every new editor file. The file contains rules for highlighting, each of which is given on a separate line, and define which keywords will be highlighted with what color. @@ -631,7 +631,9 @@ affect all users, whether they have ~/.config/mc/ini or not. .I %pkgdatadir%/syntax/* .IP The default system\-wide syntax files for mcedit, used only if -the corresponding user's own ~/.local/share/mc/mcedit/ file is missing. +the corresponding user's own file in +.B ~/.local/share/mc/syntax/ +is missing. .PP .I ~/.config/mc/ini .IP diff --git a/lib/fileloc.h b/lib/fileloc.h index 5e64ed87d..ebcfe9d13 100644 --- a/lib/fileloc.h +++ b/lib/fileloc.h @@ -72,10 +72,11 @@ /* file names */ #define EDIT_HOME_MACRO_FILE EDIT_HOME_DIR PATH_SEP_STR "macros.d" PATH_SEP_STR "macro" -#define EDIT_HOME_SYNTAX_FILE EDIT_HOME_DIR PATH_SEP_STR "Syntax" #define EDIT_HOME_CLIP_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.clip" #define EDIT_HOME_BLOCK_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.block" #define EDIT_HOME_TEMP_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.temp" +#define EDIT_SYNTAX_DIR "syntax" +#define EDIT_SYNTAX_FILE EDIT_SYNTAX_DIR PATH_SEP_STR "Syntax" #define EDIT_GLOBAL_MENU "mcedit.menu" #define EDIT_LOCAL_MENU ".cedit.menu" diff --git a/lib/mcconfig/paths.c b/lib/mcconfig/paths.c index a40aa9a1c..1f9efb843 100644 --- a/lib/mcconfig/paths.c +++ b/lib/mcconfig/paths.c @@ -64,7 +64,6 @@ static const struct { &mc_config_str, MC_HOTLIST_FILE }, { &mc_config_str, GLOBAL_KEYMAP_FILE }, { &mc_config_str, MC_USERMENU_FILE }, - { &mc_config_str, EDIT_HOME_SYNTAX_FILE }, { &mc_config_str, EDIT_HOME_MENU }, { &mc_config_str, MC_PANELS_FILE }, @@ -82,6 +81,7 @@ static const struct { &mc_data_str, MC_EXTFS_DIR }, { &mc_data_str, MC_HISTORY_FILE }, { &mc_data_str, MC_FILEPOS_FILE }, + { &mc_data_str, EDIT_SYNTAX_FILE }, { &mc_data_str, EDIT_HOME_CLIP_FILE }, { &mc_data_str, MC_MACRO_FILE }, diff --git a/src/editor/editcmd.c b/src/editor/editcmd.c index 25cb66794..5a0c86ac5 100644 --- a/src/editor/editcmd.c +++ b/src/editor/editcmd.c @@ -1128,19 +1128,19 @@ edit_load_syntax_file (WDialog * h) _("&User"), _("&System wide")); extdir_vpath = - vfs_path_build_filename (mc_global.sysconfig_dir, "syntax", "Syntax", (char *) NULL); + vfs_path_build_filename (mc_global.sysconfig_dir, EDIT_SYNTAX_FILE, (char *) NULL); if (!exist_file (vfs_path_get_last_path_str (extdir_vpath))) { vfs_path_free (extdir_vpath, TRUE); extdir_vpath = - vfs_path_build_filename (mc_global.share_data_dir, "syntax", "Syntax", (char *) NULL); + vfs_path_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_FILE, (char *) NULL); } if (dir == 0) { vfs_path_t *user_syntax_file_vpath; - user_syntax_file_vpath = mc_config_get_full_vpath (EDIT_HOME_SYNTAX_FILE); + user_syntax_file_vpath = mc_config_get_full_vpath (EDIT_SYNTAX_FILE); check_for_default (extdir_vpath, user_syntax_file_vpath); ret = edit_load_file_from_filename (h, user_syntax_file_vpath, 0); vfs_path_free (user_syntax_file_vpath, TRUE); diff --git a/src/editor/syntax.c b/src/editor/syntax.c index 818b4dd41..323fa896f 100644 --- a/src/editor/syntax.c +++ b/src/editor/syntax.c @@ -57,7 +57,7 @@ #include "lib/global.h" #include "lib/search.h" /* search engine */ #include "lib/skin.h" -#include "lib/fileloc.h" /* EDIT_HOME_DIR, EDIT_HOME_SYNTAX_FILE */ +#include "lib/fileloc.h" /* EDIT_SYNTAX_DIR, EDIT_SYNTAX_FILE */ #include "lib/strutil.h" /* utf string functions */ #include "lib/util.h" #include "lib/widget.h" /* Listbox, message() */ @@ -887,20 +887,14 @@ open_include_file (const char *filename) g_free (error_file_name); error_file_name = - g_build_filename (mc_config_get_data_path (), EDIT_HOME_DIR, filename, (char *) NULL); - f = fopen (error_file_name, "r"); - if (f != NULL) - return f; - - g_free (error_file_name); - error_file_name = g_build_filename (mc_global.sysconfig_dir, "syntax", filename, (char *) NULL); + g_build_filename (mc_config_get_data_path (), EDIT_SYNTAX_DIR, filename, (char *) NULL); f = fopen (error_file_name, "r"); if (f != NULL) return f; g_free (error_file_name); error_file_name = - g_build_filename (mc_global.share_data_dir, "syntax", filename, (char *) NULL); + g_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_DIR, filename, (char *) NULL); return fopen (error_file_name, "r"); } @@ -1270,7 +1264,7 @@ edit_read_syntax_file (WEdit * edit, GPtrArray * pnames, const char *syntax_file f = fopen (syntax_file, "r"); if (f == NULL) { - lib_file = g_build_filename (mc_global.share_data_dir, "syntax", "Syntax", (char *) NULL); + lib_file = g_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_FILE, (char *) NULL); f = fopen (lib_file, "r"); g_free (lib_file); if (f == NULL) @@ -1521,7 +1515,7 @@ edit_load_syntax (WEdit * edit, GPtrArray * pnames, const char *type) if (edit != NULL && edit->filename_vpath == NULL) return; - f = mc_config_get_full_path (EDIT_HOME_SYNTAX_FILE); + f = mc_config_get_full_path (EDIT_SYNTAX_FILE); if (edit != NULL) r = edit_read_syntax_file (edit, pnames, f, vfs_path_as_str (edit->filename_vpath), get_first_editor_line (edit), diff --git a/tests/lib/mcconfig/user_configs_path.c b/tests/lib/mcconfig/user_configs_path.c index 84bd05568..d86981ab5 100644 --- a/tests/lib/mcconfig/user_configs_path.c +++ b/tests/lib/mcconfig/user_configs_path.c @@ -97,8 +97,8 @@ static const struct test_user_config_paths_ds MC_USERMENU_FILE }, { /* 5. */ - CONF_MAIN, - EDIT_HOME_SYNTAX_FILE + CONF_DATA, + EDIT_SYNTAX_FILE }, { /* 6. */ CONF_MAIN,