summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-09-10 20:10:18 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-09-10 20:10:18 +0200
commit82a2bb37e77e8ccb6c4f6193451390f073520771 (patch)
tree056aedb094794ebcb27d7eacc376feeca0f7e2f5 /src
parentf9e31856cfcbcb76396081e92802f961135b7194 (diff)
Remove runtime command, use shell expansion to source files in rc dir.
With the help of a new kak_runtime env var.
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc30
-rw-r--r--src/kakrc9
-rw-r--r--src/main.cc28
3 files changed, 28 insertions, 39 deletions
diff --git a/src/commands.cc b/src/commands.cc
index 8ab2810a..f369c9de 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -609,35 +609,6 @@ void exec_commands_in_file(const CommandParameters& params,
CommandManager::instance().execute(file_content, context);
}
-void exec_commands_in_runtime_file(const CommandParameters& params,
- Context& context)
-{
- if (params.size() != 1)
- throw wrong_argument_count();
-
- const String& filename = params[0];
- char buffer[2048];
-#if defined(__linux__)
- ssize_t res = readlink("/proc/self/exe", buffer, 2048 - (int)filename.length());
- assert(res != -1);
- buffer[res] = '\0';
-#elif defined(__APPLE__)
- uint32_t bufsize = 2048 - (int)filename.length();
- _NSGetExecutablePath(buffer, &bufsize);
- char* canonical_path = realpath(buffer, NULL);
- strncpy(buffer, canonical_path, 2048 - (int)filename.length());
- free(canonical_path);
-#else
-# error "finding executable path is not implemented on this platform"
-#endif
- char* ptr = strrchr(buffer, '/');
- if (ptr)
- {
- strcpy(ptr+1, filename.c_str());
- exec_commands_in_file(CommandParameters(buffer), context);
- }
-}
-
void set_option(OptionManager& option_manager, const CommandParameters& params,
Context& context)
{
@@ -849,7 +820,6 @@ void register_commands()
cm.register_command("hook", add_hook);
cm.register_command("source", exec_commands_in_file, filename_completer);
- cm.register_command("runtime", exec_commands_in_runtime_file);
cm.register_command("exec", exec_string);
cm.register_command("menu", menu);
diff --git a/src/kakrc b/src/kakrc
index a33210af..75ed1c7b 100644
--- a/src/kakrc
+++ b/src/kakrc
@@ -1,11 +1,4 @@
hook global WinCreate .* %{ addhl regex \h+(?=\n) 0:default,red }
hook global WinCreate .* %{ addhl number_lines }
-runtime rc/cpp.kak
-runtime rc/kakrc.kak
-runtime rc/asciidoc.kak
-runtime rc/git.kak
-runtime rc/global.kak
-runtime rc/diff.kak
-runtime rc/make.kak
-runtime rc/grep.kak
+%sh{ for rcfile in ${kak_runtime}/rc/*; do echo "try %{ source '${rcfile}' } catch %{ }"; done }
diff --git a/src/main.cc b/src/main.cc
index 8dd9e30b..b19ddd58 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -302,6 +302,28 @@ void select_to_next_char(Context& context)
});
}
+String runtime_directory()
+{
+ char buffer[2048];
+#if defined(__linux__)
+ ssize_t res = readlink("/proc/self/exe", buffer, 2048);
+ assert(res != -1);
+ buffer[res] = '\0';
+#elif defined(__APPLE__)
+ uint32_t bufsize = 2048;
+ _NSGetExecutablePath(buffer, &bufsize);
+ char* canonical_path = realpath(buffer, NULL);
+ strncpy(buffer, canonical_path, 2048);
+ free(canonical_path);
+#else
+# error "finding executable path is not implemented on this platform"
+#endif
+ char* ptr = strrchr(buffer, '/');
+ if (not ptr)
+ throw runtime_error("unable do determine runtime directory");
+ return String(buffer, ptr);
+}
+
std::unordered_map<Key, std::function<void (Context& context)>> keymap =
{
{ { Key::Modifiers::None, 'h' }, [](Context& context) { context.editor().move_selections({ 0, -std::max(context.numeric_param(),1) }); } },
@@ -424,6 +446,9 @@ int main(int argc, char* argv[])
shell_manager.register_env_var("selection",
[](const String& name, const Context& context)
{ return context.window().selections_content().back(); });
+ shell_manager.register_env_var("runtime",
+ [](const String& name, const Context& context)
+ { return runtime_directory(); });
shell_manager.register_env_var("opt_.+",
[](const String& name, const Context& context)
{ return context.option_manager()[name.substr(4)].as_string(); });
@@ -446,7 +471,8 @@ int main(int argc, char* argv[])
try
{
Context initialisation_context;
- command_manager.execute("runtime kakrc", initialisation_context);
+ command_manager.execute("source " + runtime_directory() + "/kakrc",
+ initialisation_context);
}
catch (Kakoune::runtime_error& error)
{