[2767] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[PATCH] Allow adding text to the command history

daemon@ATHENA.MIT.EDU (adehnert@MIT.EDU)
Thu Nov 11 23:05:04 2010

From: adehnert@MIT.EDU
To: barnowl-dev@mit.edu
Cc: Alex Dehnert <adehnert@mit.edu>
Date: Thu, 11 Nov 2010 23:04:57 -0500

From: Alex Dehnert <adehnert@mit.edu>

Adds the cmd-history-add command, which permits
appending text to the command history.

Adds the with-history command, which permits
saving a command to history and executing it.
This is primarily intended for use with bindkey.

See also http://barnowl.mit.edu/ticket/96.
---
I wrote this a while ago. I'm not sure if I ever actually sent it in,
but I know I at least mentioned it somewhere.

 commands.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 50 insertions(+), 0 deletions(-)

diff --git a/commands.c b/commands.c
index 5cbe262..e7e0c4b 100644
--- a/commands.c
+++ b/commands.c
@@ -768,6 +768,16 @@ const owl_cmd commands_to_init[]
               "message <message>",
               ""),
 
+  OWLCMD_ARGS("add-cmd-history", owl_command_add_cmd_history, OWL_CTX_ANY,
+              "Add a command to the history",
+              "add-cmd-history <cmd>",
+              ""),
+
+  OWLCMD_ARGS("with-history", owl_command_with_history, OWL_CTX_ANY,
+              "Run a command and store it into the history",
+              "with-history <cmd>",
+              ""),
+
   OWLCMD_VOID("yes", owl_command_yes, OWL_CTX_RECV,
               "Answer yes to a question",
               "yes",
@@ -2632,6 +2642,46 @@ char *owl_command_message(int argc, const char *const *argv, const char *buff)
     return NULL;
 }
 
+char *owl_command_add_cmd_history(int argc, const char *const *argv, const char *buff)
+{
+  owl_history *hist;
+  const char *ptr;
+
+  if (argc < 2) {
+    owl_function_makemsg("usage: %s <commands> ...", argv[0]);
+    return NULL;
+  }
+
+  ptr = skiptokens(buff, 1);
+  hist = owl_global_get_cmd_history(&g);
+  owl_history_store(hist, ptr);
+  owl_history_reset(hist);
+  /* owl_function_makemsg("History '%s' stored successfully", ptr+1); */
+  return NULL;
+}
+
+char *owl_command_with_history(int argc, const char *const *argv, const char *buff)
+{
+  owl_history *hist;
+  const char *ptr;
+
+  if (argc < 2) {
+    owl_function_makemsg("usage: %s <commands> ...", argv[2]);
+    return NULL;
+  }
+
+  ptr = skiptokens(buff, 1);
+  if (!ptr) {
+    owl_function_makemsg("Parse error finding command");
+    return NULL;
+  }
+
+  hist = owl_global_get_cmd_history(&g);
+  owl_history_store(hist, ptr);
+  owl_history_reset(hist);
+  return owl_function_command(ptr);
+}
+
 void owl_command_yes(void)
 {
   owl_message *m;
-- 
1.6.3.3

home help back first fref pref prev next nref lref last post