mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 00:38:17 +00:00
vim-patch:8.0.1554: custom plugins loaded with --clean
Problem: Custom plugins loaded with --clean.
Solution: Do not include the home directory in 'runtimepath'.
0726870326
This commit is contained in:
@@ -90,6 +90,7 @@ argument.
|
|||||||
--clean Equivalent to "-u NONE -i NONE":
|
--clean Equivalent to "-u NONE -i NONE":
|
||||||
- Skips initializations from files and environment variables.
|
- Skips initializations from files and environment variables.
|
||||||
- No 'shada' file is read or written.
|
- No 'shada' file is read or written.
|
||||||
|
- Excludes user directories from 'runtimepath'
|
||||||
|
|
||||||
*--noplugin*
|
*--noplugin*
|
||||||
--noplugin Skip loading plugins. Resets the 'loadplugins' option.
|
--noplugin Skip loading plugins. Resets the 'loadplugins' option.
|
||||||
|
@@ -84,44 +84,11 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "nvim/api/vim.h"
|
#include "nvim/api/vim.h"
|
||||||
|
|
||||||
// Maximum number of commands from + or -c arguments.
|
|
||||||
#define MAX_ARG_CMDS 10
|
|
||||||
|
|
||||||
// values for "window_layout"
|
// values for "window_layout"
|
||||||
#define WIN_HOR 1 // "-o" horizontally split windows
|
#define WIN_HOR 1 // "-o" horizontally split windows
|
||||||
#define WIN_VER 2 // "-O" vertically split windows
|
#define WIN_VER 2 // "-O" vertically split windows
|
||||||
#define WIN_TABS 3 // "-p" windows on tab pages
|
#define WIN_TABS 3 // "-p" windows on tab pages
|
||||||
|
|
||||||
// Struct for various parameters passed between main() and other functions.
|
|
||||||
typedef struct {
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
|
|
||||||
char *use_vimrc; // vimrc from -u argument
|
|
||||||
|
|
||||||
int n_commands; // no. of commands from + or -c
|
|
||||||
char *commands[MAX_ARG_CMDS]; // commands from + or -c arg
|
|
||||||
char_u cmds_tofree[MAX_ARG_CMDS]; // commands that need free()
|
|
||||||
int n_pre_commands; // no. of commands from --cmd
|
|
||||||
char *pre_commands[MAX_ARG_CMDS]; // commands from --cmd argument
|
|
||||||
|
|
||||||
int edit_type; // type of editing to do
|
|
||||||
char_u *tagname; // tag from -t argument
|
|
||||||
char_u *use_ef; // 'errorfile' from -q argument
|
|
||||||
|
|
||||||
bool input_isatty; // stdin is a terminal
|
|
||||||
bool output_isatty; // stdout is a terminal
|
|
||||||
bool err_isatty; // stderr is a terminal
|
|
||||||
int no_swap_file; // "-n" argument used
|
|
||||||
int use_debug_break_level;
|
|
||||||
int window_count; // number of windows to use
|
|
||||||
int window_layout; // 0, WIN_HOR, WIN_VER or WIN_TABS
|
|
||||||
|
|
||||||
int diff_mode; // start with 'diff' set
|
|
||||||
|
|
||||||
char *listen_addr; // --listen {address}
|
|
||||||
} mparm_T;
|
|
||||||
|
|
||||||
// Values for edit_type.
|
// Values for edit_type.
|
||||||
#define EDIT_NONE 0 // no edit type yet
|
#define EDIT_NONE 0 // no edit type yet
|
||||||
#define EDIT_FILE 1 // file name argument[s] given, use argument list
|
#define EDIT_FILE 1 // file name argument[s] given, use argument list
|
||||||
@@ -188,7 +155,7 @@ bool event_teardown(void)
|
|||||||
/// Performs early initialization.
|
/// Performs early initialization.
|
||||||
///
|
///
|
||||||
/// Needed for unit tests. Must be called after `time_init()`.
|
/// Needed for unit tests. Must be called after `time_init()`.
|
||||||
void early_init(void)
|
void early_init(mparm_T *paramp)
|
||||||
{
|
{
|
||||||
env_init();
|
env_init();
|
||||||
fs_init();
|
fs_init();
|
||||||
@@ -222,7 +189,7 @@ void early_init(void)
|
|||||||
// msg_outtrans_len_attr().
|
// msg_outtrans_len_attr().
|
||||||
// First find out the home directory, needed to expand "~" in options.
|
// First find out the home directory, needed to expand "~" in options.
|
||||||
init_homedir(); // find real value of $HOME
|
init_homedir(); // find real value of $HOME
|
||||||
set_init_1();
|
set_init_1(paramp != NULL ? paramp->clean : false);
|
||||||
log_init();
|
log_init();
|
||||||
TIME_MSG("inits 1");
|
TIME_MSG("inits 1");
|
||||||
|
|
||||||
@@ -265,9 +232,17 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
init_startuptime(¶ms);
|
init_startuptime(¶ms);
|
||||||
|
|
||||||
|
// Need to find "--clean" before actually parsing arguments.
|
||||||
|
for (int i = 1; i < params.argc; i++) {
|
||||||
|
if (STRICMP(params.argv[i], "--clean") == 0) {
|
||||||
|
params.clean = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
event_init();
|
event_init();
|
||||||
|
|
||||||
early_init();
|
early_init(¶ms);
|
||||||
|
|
||||||
set_argv_var(argv, argc); // set v:argv
|
set_argv_var(argv, argc); // set v:argv
|
||||||
|
|
||||||
@@ -862,6 +837,7 @@ static void command_line_scan(mparm_T *parmp)
|
|||||||
argv_idx += 11;
|
argv_idx += 11;
|
||||||
} else if (STRNICMP(argv[0] + argv_idx, "clean", 5) == 0) {
|
} else if (STRNICMP(argv[0] + argv_idx, "clean", 5) == 0) {
|
||||||
parmp->use_vimrc = "NONE";
|
parmp->use_vimrc = "NONE";
|
||||||
|
parmp->clean = true;
|
||||||
set_option_value("shadafile", 0L, "NONE", 0);
|
set_option_value("shadafile", 0L, "NONE", 0);
|
||||||
} else {
|
} else {
|
||||||
if (argv[0][argv_idx])
|
if (argv[0][argv_idx])
|
||||||
@@ -1277,9 +1253,8 @@ static void init_params(mparm_T *paramp, int argc, char **argv)
|
|||||||
/// Initialize global startuptime file if "--startuptime" passed as an argument.
|
/// Initialize global startuptime file if "--startuptime" passed as an argument.
|
||||||
static void init_startuptime(mparm_T *paramp)
|
static void init_startuptime(mparm_T *paramp)
|
||||||
{
|
{
|
||||||
for (int i = 1; i < paramp->argc; i++) {
|
for (int i = 1; i < paramp->argc - 1; i++) {
|
||||||
if (STRICMP(paramp->argv[i], "--startuptime") == 0
|
if (STRICMP(paramp->argv[i], "--startuptime") == 0) {
|
||||||
&& i + 1 < paramp->argc) {
|
|
||||||
time_fd = os_fopen(paramp->argv[i + 1], "a");
|
time_fd = os_fopen(paramp->argv[i + 1], "a");
|
||||||
time_start("--- NVIM STARTING ---");
|
time_start("--- NVIM STARTING ---");
|
||||||
break;
|
break;
|
||||||
|
@@ -4,8 +4,42 @@
|
|||||||
#include "nvim/normal.h"
|
#include "nvim/normal.h"
|
||||||
#include "nvim/event/loop.h"
|
#include "nvim/event/loop.h"
|
||||||
|
|
||||||
|
// Maximum number of commands from + or -c arguments.
|
||||||
|
#define MAX_ARG_CMDS 10
|
||||||
|
|
||||||
extern Loop main_loop;
|
extern Loop main_loop;
|
||||||
|
|
||||||
|
// Struct for various parameters passed between main() and other functions.
|
||||||
|
typedef struct {
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
|
||||||
|
char *use_vimrc; // vimrc from -u argument
|
||||||
|
bool clean; // --clean argument
|
||||||
|
|
||||||
|
int n_commands; // no. of commands from + or -c
|
||||||
|
char *commands[MAX_ARG_CMDS]; // commands from + or -c arg
|
||||||
|
char_u cmds_tofree[MAX_ARG_CMDS]; // commands that need free()
|
||||||
|
int n_pre_commands; // no. of commands from --cmd
|
||||||
|
char *pre_commands[MAX_ARG_CMDS]; // commands from --cmd argument
|
||||||
|
|
||||||
|
int edit_type; // type of editing to do
|
||||||
|
char_u *tagname; // tag from -t argument
|
||||||
|
char_u *use_ef; // 'errorfile' from -q argument
|
||||||
|
|
||||||
|
bool input_isatty; // stdin is a terminal
|
||||||
|
bool output_isatty; // stdout is a terminal
|
||||||
|
bool err_isatty; // stderr is a terminal
|
||||||
|
int no_swap_file; // "-n" argument used
|
||||||
|
int use_debug_break_level;
|
||||||
|
int window_count; // number of windows to use
|
||||||
|
int window_layout; // 0, WIN_HOR, WIN_VER or WIN_TABS
|
||||||
|
|
||||||
|
int diff_mode; // start with 'diff' set
|
||||||
|
|
||||||
|
char *listen_addr; // --listen {address}
|
||||||
|
} mparm_T;
|
||||||
|
|
||||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||||
# include "main.h.generated.h"
|
# include "main.h.generated.h"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -524,11 +524,17 @@ char *get_lib_dir(void)
|
|||||||
///
|
///
|
||||||
/// Windows: Uses "…/nvim-data" for kXDGDataHome to avoid storing
|
/// Windows: Uses "…/nvim-data" for kXDGDataHome to avoid storing
|
||||||
/// configuration and data files in the same path. #4403
|
/// configuration and data files in the same path. #4403
|
||||||
static void set_runtimepath_default(void)
|
///
|
||||||
|
/// If "clean_arg" is true, Nvim was started with --clean.
|
||||||
|
static void set_runtimepath_default(bool clean_arg)
|
||||||
{
|
{
|
||||||
size_t rtp_size = 0;
|
size_t rtp_size = 0;
|
||||||
char *const data_home = stdpaths_get_xdg_var(kXDGDataHome);
|
char *const data_home = clean_arg
|
||||||
char *const config_home = stdpaths_get_xdg_var(kXDGConfigHome);
|
? NULL
|
||||||
|
: stdpaths_get_xdg_var(kXDGDataHome);
|
||||||
|
char *const config_home = clean_arg
|
||||||
|
? NULL
|
||||||
|
: stdpaths_get_xdg_var(kXDGConfigHome);
|
||||||
char *const vimruntime = vim_getenv("VIMRUNTIME");
|
char *const vimruntime = vim_getenv("VIMRUNTIME");
|
||||||
char *const libdir = get_lib_dir();
|
char *const libdir = get_lib_dir();
|
||||||
char *const data_dirs = stdpaths_get_xdg_var(kXDGDataDirs);
|
char *const data_dirs = stdpaths_get_xdg_var(kXDGDataDirs);
|
||||||
@@ -622,7 +628,8 @@ static void set_runtimepath_default(void)
|
|||||||
/// Initialize the options, first part.
|
/// Initialize the options, first part.
|
||||||
///
|
///
|
||||||
/// Called only once from main(), just after creating the first buffer.
|
/// Called only once from main(), just after creating the first buffer.
|
||||||
void set_init_1(void)
|
/// If "clean_arg" is true, Nvim was started with --clean.
|
||||||
|
void set_init_1(bool clean_arg)
|
||||||
{
|
{
|
||||||
int opt_idx;
|
int opt_idx;
|
||||||
|
|
||||||
@@ -765,7 +772,7 @@ void set_init_1(void)
|
|||||||
true);
|
true);
|
||||||
// Set default for &runtimepath. All necessary expansions are performed in
|
// Set default for &runtimepath. All necessary expansions are performed in
|
||||||
// this function.
|
// this function.
|
||||||
set_runtimepath_default();
|
set_runtimepath_default(clean_arg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set all the options (except the terminal options) to their default
|
* Set all the options (except the terminal options) to their default
|
||||||
|
@@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen')
|
|||||||
|
|
||||||
local clear = helpers.clear
|
local clear = helpers.clear
|
||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
|
local ok = helpers.ok
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
local matches = helpers.matches
|
local matches = helpers.matches
|
||||||
local eval = helpers.eval
|
local eval = helpers.eval
|
||||||
@@ -17,6 +18,7 @@ local rmdir = helpers.rmdir
|
|||||||
local sleep = helpers.sleep
|
local sleep = helpers.sleep
|
||||||
local iswin = helpers.iswin
|
local iswin = helpers.iswin
|
||||||
local write_file = helpers.write_file
|
local write_file = helpers.write_file
|
||||||
|
local meths = helpers.meths
|
||||||
|
|
||||||
describe('startup', function()
|
describe('startup', function()
|
||||||
before_each(function()
|
before_each(function()
|
||||||
@@ -357,3 +359,10 @@ describe('sysinit', function()
|
|||||||
eval('printf("loaded %d xdg %d vim %d", g:loaded, get(g:, "xdg", 0), get(g:, "vim", 0))'))
|
eval('printf("loaded %d xdg %d vim %d", g:loaded, get(g:, "xdg", 0), get(g:, "vim", 0))'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('clean', function()
|
||||||
|
clear()
|
||||||
|
ok(string.match(meths.get_option('runtimepath'), funcs.stdpath('config')) ~= nil)
|
||||||
|
clear('--clean')
|
||||||
|
ok(string.match(meths.get_option('runtimepath'), funcs.stdpath('config')) == nil)
|
||||||
|
end)
|
||||||
|
@@ -96,8 +96,8 @@ local init = only_separate(function()
|
|||||||
c.func(unpack(c.args))
|
c.func(unpack(c.args))
|
||||||
end
|
end
|
||||||
libnvim.time_init()
|
libnvim.time_init()
|
||||||
libnvim.early_init()
|
|
||||||
libnvim.event_init()
|
libnvim.event_init()
|
||||||
|
libnvim.early_init(nil)
|
||||||
if child_calls_mod then
|
if child_calls_mod then
|
||||||
for _, c in ipairs(child_calls_mod) do
|
for _, c in ipairs(child_calls_mod) do
|
||||||
c.func(unpack(c.args))
|
c.func(unpack(c.args))
|
||||||
|
Reference in New Issue
Block a user