aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2015-06-02 15:38:00 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2015-06-02 15:38:00 +0200
commit02d414b3ab447e637fef776e387aa5a07293738a (patch)
tree60d5db01e9e0cc15f1f8e84abb14138cb0ca54a3 /src/main.cpp
parent6c62ccc436d972a872616c187d460ed61c8bc0d2 (diff)
downloadsciteco-02d414b3ab447e637fef776e387aa5a07293738a.tar.gz
added <FG> command and special Q-Register "$" to set and get the current working directory
* FG stands for "Folder Go" * FG behaves similar to a Unix shell `cd`. Without arguments, it changes to the $HOME directory. * The $HOME directory was previously only used by $SCITECOCONFIG on Unix. Now it is documented on its own, since the HOME directory should also be configurable on Windows - e.g. to adapt SciTECO to a MinGW or Cygwin installation. HOME is initialized just like the other environment variables. This also means that now, the $HOME Q-Register is always defined and can be used by platform-agnostic macros. * FG uses a new kind of tab-completion: for directories only. It would be annoying to complete the FG command after every directory, so this tab-completion does not close the command automatically. Theoretically, it would be possible to close the command after completing a directory with no subdirectories, but this is not supported currently. * Filename arguments are no longer completed with " " if {} escaping is in place as this brings no benefit. Instead no completion character is inserted for this escape mode. * "$" was mapped to the current directory to support an elegant way to insert/get the current directory. Also this allows the idiom "[$ FG...new_dir...$ ]$" for changing the current directory temporarily. * The Q-Register stack was extended to support restoring the string part of special Q-Registers (that overwrite the default functionality) when using the "[$" and "]$" commands. * fixed minor typos (american spelling)
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 7ad4d80..6966d22 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -121,7 +121,7 @@ get_default_config_path(const gchar *program)
static inline gchar *
get_default_config_path(const gchar *program)
{
- return g_strdup(g_getenv("HOME") ? : g_get_home_dir());
+ return g_strdup(g_getenv("HOME"));
}
#else
@@ -199,6 +199,18 @@ initialize_environment(const gchar *program)
gchar **env;
/*
+ * Initialize and canonicalize $HOME.
+ * Therefore we can refer to $HOME as the
+ * current user's home directory on any platform
+ * and it can be re-configured even though g_get_home_dir()
+ * evaluates $HOME only beginning with glib v2.36.
+ */
+ g_setenv("HOME", g_get_home_dir(), FALSE);
+ abs_path = get_absolute_path(g_getenv("HOME"));
+ g_setenv("HOME", abs_path, TRUE);
+ g_free(abs_path);
+
+ /*
* Initialize $SCITECOCONFIG and $SCITECOPATH
*/
default_configpath = get_default_config_path(program);
@@ -340,6 +352,8 @@ main(int argc, char **argv)
QRegisters::globals.insert("-");
/* current buffer name and number ("*") */
QRegisters::globals.insert(new QRegisterBufferInfo());
+ /* current working directory ("$") */
+ QRegisters::globals.insert(new QRegisterWorkingDir());
/* environment defaults and registers */
initialize_environment(argv[0]);