-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
On June 2, 2014 12:54:39 AM GMT+03:00, "Jean-François Bignolles" <[email protected]> wrote: >Hi, > >I made a new patch (based on vim 7.4.315). > >Le mercredi 28 mai 2014 19:49:50 UTC+2, Bram Moolenaar a écrit : > >> I had a look at this. >> >> First a small remark about the patch: >> >> Places for your personal initializations: >> >> - Unix $HOME/.vimrc or $HOME/.vim/vimrc >> + Unix $HOME/.vimrc or $HOME/.vim/vimrc; >> + with |+xdg_basedir| feature, it can also be >> + $XDG_CONFIG_HOME/vim/vimrc (first place) >> >> That should be $XDG_CONFIG_HOME/vim, without the /vimrc. > >No. "$XDG_CONFIG_HOME/vim" is a *DIRECTORY*, not a file; it's an >alternative >choice for "$HOME/vim". This documentation extract talks about the >"vimrc", >the main Vim user configuration *FILE*. > >> Problem with making this a compile-time feature is that if the binary >is >> shared with several users, or it's part of a precompiled package, >> suddenly the user has to put his Vim files elsewhere. This will >quickly >> lead to two different binaries, so that users can select the one that >> fits them. >> >> Making this a runtime option is problematic, since the changes are in >> the default values. > >In the new patch there is no compile-time switch anymore; XDG support >is >always enabled, but in a way where compatibility with non-XDG version >is >preserved. > >> This is far from ideal, I expect it to cause more trouble than it >would >> ever solve. Who actually uses these $XDG_ variables? > >For end user, defining $XDG_ variables is is optional, not mandatory. >For the developper wishing to support XDG, interpreting them is a >requirement: it allows the user to overide default locations. >That's why special logic is added for $XDG_ variables expansion. > >> Probably the only way is to ADD these $XDG_ directories, after the >> current directories. So that they only get used if the old >directories >> do not exist. Then users getting a new binary will not notice a >> difference, and are free to move their files to the new location, if >> that is that they prefer. > >The new patch does this. > >> In practice this probably means users would do: >> mv ~/.vim ~/.config/vim >> mv ~/.vimrc ~/.config/vim/vimrc > >Exactly. > >So, let's give a short description: > - vimrc: "$XDG_CONFIG_HOME/vim/vimrc" is added (3rd choice). > - gvimrc: "$XDG_CONFIG_HOME/vim/gvimrc" is added (3rd choice). > - viminfo path is unchanged, but the user can use 'viminfo' option. >- 'backupdir' and 'directory': "$XDG_CACHE_HOME/vim" is added (2nd >choice); > if the user doesn't create this directory, Vim behaviour is unchanged. >- 'runtimepath': "$XDG_CONFIG_HOME/vim" and >"$XDG_CONFIG_HOME/vim/after" > are added, but don't replace "$HOME/.vim" and "$HOME/.vim/after". > - 'viewdir' is unchanged (since it's a single directory option). > >regards, >jfb > >Note: can't make "Attach a file" to work, so the patch is appended... AFAIR Google has extension filter in their web interface. You need to use name with a known extension; .diff is known to work. >--------------------------------------------------------->8 >diff -r 07aa56179a10 runtime/doc/gui.txt >--- a/runtime/doc/gui.txt Thu May 29 11:47:40 2014 +0200 >+++ b/runtime/doc/gui.txt Sun Jun 01 22:10:28 2014 +0200 >@@ -1,4 +1,4 @@ >-*gui.txt* For Vim version 7.4. Last change: 2014 Mar 08 >+*gui.txt* For Vim version 7.4. Last change: 2014 May 30 > > > VIM REFERENCE MANUAL by Bram Moolenaar >@@ -66,7 +66,8 @@ > - If the GVIMINIT environment variable exists and is not empty, it is > executed as an Ex command. >- If the user gvimrc file exists, it is sourced. The name of this file >is >- normally "$HOME/.gvimrc". You can check this with ":version". >+ normally "$HOME/.gvimrc". It can also be >"$XDG_CONFIG_HOME/vim/gvimrc" >+ (see |xdg_basedir|). You can check this with ":version". > - For Win32, when $HOME is not set, "$VIM\_gvimrc" is used. >- When a "_gvimrc" file is not found, ".gvimrc" is tried too. And vice > versa. >diff -r 07aa56179a10 runtime/doc/options.txt >--- a/runtime/doc/options.txt Thu May 29 11:47:40 2014 +0200 >+++ b/runtime/doc/options.txt Sun Jun 01 22:10:28 2014 +0200 >@@ -1,4 +1,4 @@ >-*options.txt* For Vim version 7.4. Last change: 2014 May 13 >+*options.txt* For Vim version 7.4. Last change: 2014 May 30 > > > VIM REFERENCE MANUAL by Bram Moolenaar >@@ -988,7 +988,7 @@ > *'backupdir'* *'bdir'* > 'backupdir' 'bdir' string (default for Amiga: ".,t:", > for MS-DOS and Win32: ".,$TEMP,c:/tmp,c:/temp" >- for Unix: ".,~/tmp,~/") >+ for Unix: ".,$XDG_CACHE_HOME/vim,~/tmp,~/") > global > {not in Vi} > List of directories for the backup file, separated with commas. >@@ -1008,7 +1008,8 @@ > name, precede it with a backslash. > - To include a comma in a directory name precede it with a backslash. > - A directory name may end in an '/'. >- - Environment variables are expanded |:set_env|. >+ - Environment variables are expanded |:set_env|; see |xdg_basedir| >+ for expansion of $XDG_CACHE_HOME. > - Careful with '\' characters, type one before a space, type two to > get one in the option (see |option-backslash|), for example: > > :set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces >@@ -2478,7 +2479,7 @@ > *'directory'* *'dir'* > 'directory' 'dir' string (default for Amiga: ".,t:", > for MS-DOS and Win32: ".,$TEMP,c:\tmp,c:\temp" >- for Unix: ".,~/tmp,/var/tmp,/tmp") >+ for Unix: >".,$XDG_CACHE_HOME/vim,~/tmp,/var/tmp,/tmp") > global > List of directory names for the swap file, separated with commas. > - The swap file will be created in the first directory where this is >@@ -2503,7 +2504,8 @@ > name, precede it with a backslash. > - To include a comma in a directory name precede it with a backslash. > - A directory name may end in an ':' or '/'. >- - Environment variables are expanded |:set_env|. >+ - Environment variables are expanded |:set_env|; see |xdg_basedir| >+ for expansion of $XDG_CACHE_HOME. > - Careful with '\' characters, type one before a space, type two to > get one in the option (see |option-backslash|), for example: > > :set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces >@@ -5726,9 +5728,11 @@ > *'runtimepath'* *'rtp'* *vimfiles* > 'runtimepath' 'rtp' string (default: > Unix: "$HOME/.vim, >+ $XDG_CONFIG_HOME/vim, > $VIM/vimfiles, > $VIMRUNTIME, > $VIM/vimfiles/after, >+ $XDG_CONFIG_HOME/vim/after, > $HOME/.vim/after" > Amiga: "home:vimfiles, > $VIM/vimfiles, >@@ -5774,6 +5778,9 @@ > > And any other file searched for with the |:runtime| command. > >+ Environment variables are expanded |:set_env|; see |xdg_basedir| >+ for expansion of $XDG_CONFIG_HOME. >+ > The defaults for most systems are setup to search five locations: > 1. In your home directory, for your personal preferences. > 2. In a system-wide Vim directory, for preferences from the system >diff -r 07aa56179a10 runtime/doc/os_unix.txt >--- a/runtime/doc/os_unix.txt Thu May 29 11:47:40 2014 +0200 >+++ b/runtime/doc/os_unix.txt Sun Jun 01 22:10:28 2014 +0200 >@@ -1,4 +1,4 @@ >-*os_unix.txt* For Vim version 7.4. Last change: 2005 Mar 29 >+*os_unix.txt* For Vim version 7.4. Last change: 2014 May 30 > > > VIM REFERENCE MANUAL by Bram Moolenaar >@@ -57,4 +57,37 @@ >The file "tools/vim132" is a shell script that can be used to put Vim >in 132 > column mode on a vt100 and lookalikes. > >+ *xdg_basedir* *$XDG_CACHE_HOME* *$XDG_CONFIG_HOME* >*$XDG_DATA_HOME* >+Vim supports the XDG Base Directory specification. This means that: >+ >+ 1. The XDG environment variables mentionned above (names in XDG_*) >are >+ handled by Vim in a special way. If they aren't defined or are >empty, >+ Vim expands them with the default value of the XDG specification: >+ >+ VARIABLE DEFAULT VALUE~ >+ $XDG_CACHE_HOME $HOME/.cache >+ $XDG_CONFIG_HOME $HOME/.config >+ $XDG_DATA_HOME $HOME/.local/share >+ >+ 2. The following options have their default value changed with >respect >+ to their non-XDG Unix counterparts: >+ >+ OPTION DEFAULT VALUE~ >+ 'backupdir' .,$XDG_CACHE_HOME/vim,~/,/tmp >+ 'directory' .,$XDG_CACHE_HOME/vim,~/tmp,/var/tmp,/tmp >+ 'runtimepath' $HOME/.vim,$XDG_CONFIG_HOME/vim,$VIM,$VIMRUNTIME, >+ >$VIM/after,$XDG_CONFIG_HOME/vim/after,$HOME/.vim/after >+ >+ 3. For each list of candidate user configuration files, an >alternative >+ is added: >+ >+ WHAT PREPENDED NAME~ >+ |vimrc| $XDG_CONFIG_HOME/vim/vimrc >+ |gvimrc| $XDG_CONFIG_HOME/vim/gvimrc >+ >+See >http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html >+for more details. >+ >+User may also use $XDG_ paths with 'viminfo' and the 'viewdir' >options. >+ > vim:tw=78:ts=8:ft=help:norl: >diff -r 07aa56179a10 runtime/doc/starting.txt >--- a/runtime/doc/starting.txt Thu May 29 11:47:40 2014 +0200 >+++ b/runtime/doc/starting.txt Sun Jun 01 22:10:28 2014 +0200 >@@ -1,4 +1,4 @@ >-*starting.txt* For Vim version 7.4. Last change: 2014 Mar 29 >+*starting.txt* For Vim version 7.4. Last change: 2014 May 30 > > > VIM REFERENCE MANUAL by Bram Moolenaar >@@ -758,7 +758,8 @@ > name. Also see |vimrc-intro|. > > Places for your personal initializations: >- Unix $HOME/.vimrc or $HOME/.vim/vimrc >+ Unix $HOME/.vimrc, $HOME/.vim/vimrc >+ or $XDG_CONFIG_HOME/vim/vimrc (see >|xdg_basedir|) > OS/2 $HOME/.vimrc, $HOME/vimfiles/vimrc > or $VIM/.vimrc (or _vimrc) > MS-Windows $HOME/_vimrc, $HOME/vimfiles/vimrc >@@ -769,9 +770,13 @@ > The files are searched in the order specified above and only the first > one that is found is read. > >- RECOMMENDATION: Put all your Vim configuration stuff in the >- $HOME/.vim/ directory ($HOME/vimfiles/ for MS-Windows). That makes it >- easy to copy it to another system. >+ RECOMMENDATION: Put all your Vim configuration stuff in the preferred >+ directory. That makes it easy to copy it to another system. >+ The preferred directory is: >+ Unix $HOME/.vim or $XDG_CONFIG_HOME/vim/vimrc >+ (see |xdg_basedir|) >+ Ms-Windows $HOME/vimfiles >+ OS/2 $HOME/vimfiles > > If Vim was started with "-u filename", the file "filename" is used. > All following initializations until 4. are skipped. $MYVIMRC is not >@@ -804,6 +809,7 @@ > - The user vimrc file(s): > "$HOME/.vimrc" (for Unix and OS/2) (*) > "$HOME/.vim/vimrc" (for Unix and OS/2) (*) >+ "$XDG_CONFIG_HOME/vim/vimrc" (Unix: see |xdg_basedir|) (*) > "s:.vimrc" (for Amiga) (*) > "home:.vimrc" (for Amiga) (*) > "home:vimfiles:vimrc" (for Amiga) (*) >@@ -895,6 +901,7 @@ > > Some hints on using initializations: > >+ > Standard setup: >Create a vimrc file to set the default settings and mappings for all >your edit > sessions. Put it in a place so that it will be found by 3b: >diff -r 07aa56179a10 src/misc1.c >--- a/src/misc1.c Thu May 29 11:47:40 2014 +0200 >+++ b/src/misc1.c Sun Jun 01 22:10:28 2014 +0200 >@@ -14,6 +14,13 @@ > #include "vim.h" > #include "version.h" > >+/* When Gtk GUI is enabled, we can use GLib support functions >+ * of XDG Base Directory >+ */ >+#ifdef FEAT_GUI_GTK >+#include <glib.h> >+#endif >+ > static char_u *vim_version_dir __ARGS((char_u *vimdir)); >static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u >*name)); > #if defined(FEAT_CMDL_COMPL) >@@ -4141,9 +4148,61 @@ > *dst = NUL; > } > >+/* XDG environment variable identifier (<=> variable name) */ >+typedef enum { >+ XDG_CACHE_HOME, >+ XDG_CONFIG_HOME, >+ XDG_DATA_HOME >+} XdgEnvId_T; >+ >+/* XDG environment variable names (indexed by 'XdgEnvId_T' above) */ >+static const char_u *xdg_env_name[] = { >+ "XDG_CACHE_HOME", >+ "XDG_CONFIG_HOME", >+ "XDG_DATA_HOME" >+}; >+ >+#ifndef FEAT_GUI_GTK >+/* No Gtk (Glib more exactly) XDG support function, use internal code >instead */ >+ >+/* >+ * Return XDG environment variable value or "emulated" one. >+ */ >+ char_u * >+vim_getxdg (id) >+ XdgEnvId_T id; /* XDG environment variable identifier */ >+{ >+ /* Default [unexpanded] values, indexed by 'id' */ >+ static const char_u *def_value[] = { >+ /* XDG_CACHE_HOME */ "$HOME/.cache", >+ /* XDG_CONFIG_HOME */ "$HOME/.config", >+ /* XDG_DATA_HOME */ "$HOME/.local/share" >+ }; >+ /* Cached values */ >+ static char_u *env_value[] = { NULL, NULL, NULL }; >+ >+ char_u *dir; >+ >+ if (env_value[id] == NULL) { >+ dir = mch_getenv (xdg_env_name[id]); >+ >+ if ((dir != NULL) && (dir[0] != NUL)) >+ /* Variable exists and isn't empty => can use it */ >+ dir = vim_strsave (dir); >+ else { >+ /* Use expanded default value */ >+ dir = alloc (MAXPATHL); >+ expand_env ((char_u*)def_value[id], dir, MAXPATHL); >+ } >+ env_value[id] = dir; >+ } >+ return env_value[id]; >+} >+#endif /* !FEAT_GUI_GTK */ > /* > * Vim's version of getenv(). > * Special handling of $HOME, $VIM and $VIMRUNTIME. >+ * Also special handling of some $XDG_* variables. > * Also does ACP to 'enc' conversion for Win32. > * "mustfree" is set to TRUE when returned is allocated, it must be > * initialized to FALSE by the caller. >@@ -4188,6 +4247,30 @@ > return p; > } > >+ /* Retrieve XDG environment variable (maybe virtual) value */ >+ if (STRCMP (name, xdg_env_name[XDG_CACHE_HOME]) == 0) { >+#ifdef FEAT_GUI_GTK >+ return (char_u*) g_get_user_cache_dir (); >+#else >+ return vim_getxdg (XDG_CACHE_HOME); >+#endif >+ } >+ >+ if (STRCMP (name, xdg_env_name[XDG_CONFIG_HOME]) == 0) { >+#ifdef FEAT_GUI_GTK >+ return (char_u*) g_get_user_config_dir (); >+#else >+ return vim_getxdg (XDG_CONFIG_HOME); >+#endif >+ } >+ >+ if (STRCMP (name, xdg_env_name[XDG_DATA_HOME]) == 0) { >+#ifdef FEAT_GUI_GTK >+ return (char_u*) g_get_user_data_dir (); >+#else >+ return vim_getxdg (XDG_DATA_HOME); >+#endif >+ } > vimruntime = (STRCMP(name, "VIMRUNTIME") == 0); > if (!vimruntime && STRCMP(name, "VIM") != 0) > return NULL; >diff -r 07aa56179a10 src/os_unix.h >--- a/src/os_unix.h Thu May 29 11:47:40 2014 +0200 >+++ b/src/os_unix.h Sun Jun 01 22:10:28 2014 +0200 >@@ -309,11 +309,14 @@ > # endif > #endif > >-#if !defined(USR_VIMRC_FILE3) && defined(OS2) >-# define USR_VIMRC_FILE3 "$VIM/.vimrc" >-#endif >-#if !defined(USR_VIMRC_FILE3) && defined(VMS) >-# define USR_VIMRC_FILE3 "sys$login:_vimrc" >+#ifndef USR_VIMRC_FILE3 >+# if defined(OS2) >+# define USR_VIMRC_FILE3 "$VIM/.vimrc" >+# elif defined(VMS) >+# define USR_VIMRC_FILE3 "sys$login:_vimrc" >+# else >+# define USR_VIMRC_FILE3 "$XDG_CONFIG_HOME/vim/vimrc" >+# endif > #endif > > #ifndef USR_GVIMRC_FILE >@@ -336,9 +339,11 @@ > # endif > #endif > >-#ifdef VMS >-# ifndef USR_GVIMRC_FILE3 >-# define USR_GVIMRC_FILE3 "sys$login:_gvimrc" >+#ifndef USR_GVIMRC_FILE3 >+# if defined(VMS) >+# define USR_GVIMRC_FILE3 "sys$login:_gvimrc" >+# else >+# define USR_GVIMRC_FILE3 "$XDG_CONFIG_HOME/vim/gvimrc" > # endif > #endif > >@@ -387,7 +392,8 @@ > # ifdef VMS > # define DFLT_BDIR "./,sys$login:,tmp:" > # else >-# define DFLT_BDIR ".,~/tmp,~/" /* default for 'backupdir' */ >+# define DFLT_BDIR ".,$XDG_CACHE_HOME/vim,~/tmp,~/" >+ /* default for 'backupdir' */ > # endif > # endif > #endif >@@ -399,7 +405,8 @@ > # ifdef VMS > # define DFLT_DIR "./,sys$login:,tmp:" > # else >-# define DFLT_DIR ".,~/tmp,/var/tmp,/tmp" /* default for >'directory' */ >+# define DFLT_DIR ".,$XDG_CACHE_HOME/vim,~/tmp,/var/tmp,/tmp" >+ /* default for 'directory' */ > # endif > # endif > #endif >@@ -418,20 +425,26 @@ > > #define DFLT_ERRORFILE "errors.err" > >-#ifdef OS2 >-# define >DFLT_RUNTIMEPATH >"$HOME/vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/vimfiles/after" >+#ifndef RUNTIME_GLOBAL >+ #define RUNTIME_GLOBAL "$VIM/vimfiles" >+#endif >+ >+#if defined(OS2) >+# define RUNTIME_USER "$HOME/vimfiles" >+#elif defined(VMS) >+# define RUNTIME_USER "sys$login:vimfiles" > #else >-# ifdef VMS >-# define DFLT_RUNTIMEPATH >"sys$login:vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,sys$login:vimfiles/after" >-# else >-# ifdef RUNTIME_GLOBAL >-# define DFLT_RUNTIMEPATH "~/.vim," RUNTIME_GLOBAL ",$VIMRUNTIME," >RUNTIME_GLOBAL "/after,~/.vim/after" >-# else >-# define >DFLT_RUNTIMEPATH >"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after" >-# endif >-# endif >+# define RUNTIME_USER "~/.vim,$XDG_CONFIG_HOME/vim" >+# define RUNTIME_AFTER "$XDG_CONFIG_HOME/vim/after,~/.vim/after" > #endif > >+#ifndef RUNTIME_AFTER >+#define RUNTIME_AFTER RUNTIME_USER "/after" >+#endif >+ >+#define DFLT_RUNTIMEPATH RUNTIME_USER "," RUNTIME_GLOBAL >",$VIMRUNTIME," \ >+ RUNTIME_GLOBAL "/after," RUNTIME_AFTER >+ > #ifdef OS2 > /* > * Try several directories to put the temp files. -----BEGIN PGP SIGNATURE----- Version: APG v1.1.1 iQI1BAEBCgAfBQJTi5ZfGBxaeVggPHp5eC52aW1AZ21haWwuY29tPgAKCRCf3UKj HhHSvuS/EAChYfZLQZ11scLjnN4iSEkVNccxu5WhBCve0Hy7E04eXKpds56PPHGt AWpr4oMWWhhKABBTSM1Erxs0bQSG4HrFKAQ2W52Gz2lnBgL1F88opyPIC0MZAdZA vQYrMnqG3QBoBDswByYbFSVQGdfwf3BXxg6FKtbzy/mis7Y5gFyHDjhm5xCM4K7B N3W4lBsV137oNtJUNwOUJlCLDrSeP07Z0XZ+5416FcSZAkrlggqHk/iU5nIH+ROI 5usCs/45B7qjyCLNNdMPhQ+YCpY76/7u7dlPbwwg2NBIaO+qneoLs9cMHL9hx8uQ S+CiDkryEnxDVQ4IuHBufhjZr07hxwT3mJkMOtqzCedQBIs3wO28k0c5KZoa7v2G jDhUKALpTlWf7yTUzcnVpfRn8IWD7jehgWZjivyHRNMF2lMy6I73cd2ebXi6mltI BKANG4b33IrNP9lWWlYF6/h5+eUUFKndVLj2shCOl1t8P5cY72vDbRfsSbJibw/c SUBtYCO1qS3FDZv3uJYffGN6FctH5vrwe1JTgRxi+nv7y/aolDHS1i1x2KJ23z5h YbaPquEWQuAALcoAM5J4Vgao/0e3caX6GjrBdZ/Tfv5vBpXEmJDI/5vZF+3v5WCa X+698fiRcUcX/PNN9IWka/zUhxj92A8i5x99Ns6INQ/I2XLWHsM6gA== =dfC5 -----END PGP SIGNATURE----- -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
