On Sun, Dec 30, 2007 at 05:48:19PM +0100, Marc Andre Tanner wrote:
> On Sun, Dec 30, 2007 at 05:19:20PM +0100, y i y u s wrote:

> > And a suggestion: if the default modifier is CTRL+g there should
> > be a keybinding to send a CTRL+g to the client. This way you can
> > have nested dvtms. I will probably write a patch for it, but dunno
> > when it will happen.
 
> You could use the -m command line option which sets the modifier at
> runtime. So for example dvtm -m ^w will set it to CTRL+w. But i
> agree that there should also be the possibility to send CTRL+g.

I'd also need a way to send CTRL+s.  My terminal reacts to the
combination and I don't know a way to escape it.  Under screen,
I can use ^as instead.

The following patch enables escaped keystrokes.  ^s works fine.
When I run a dvtm inside a dvtm, ^g works as well, but the inner
dvtm only displays garbled borders.

Regards,
Christian

---
 config.h |    2 ++
 dvtm.c   |   12 ++++++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/config.h b/config.h
index e5d0774..3fcb4a7 100644
--- a/config.h
+++ b/config.h
@@ -82,6 +82,8 @@ Key keys[] = {
        { MOD, '7', focusn, "7" },
        { MOD, '8', focusn, "8" },
        { MOD, '9', focusn, "9" },
+       { MOD, 'G', escapekey, "g" },
+       { MOD, 'S', escapekey, "s" },
 };
 
 /* possible values for the mouse buttons are listed below:
diff --git a/dvtm.c b/dvtm.c
index f782b2b..4520c37 100644
--- a/dvtm.c
+++ b/dvtm.c
@@ -101,6 +101,7 @@ void togglebar(const char *arg);
 void setmwfact(const char *arg);
 void setlayout(const char *arg);
 void zoom(const char *arg);
+void escapekey(const char *arg);
 /* special mouse related commands */
 void mouse_focus(const char *arg);
 void mouse_fullscreen(const char *arg);
@@ -493,6 +494,17 @@ drawbar(){
 }
 
 void
+escapekey(const char *arg){
+       if (strlen(arg)) {
+               if(sel && (!sel->minimized || isarrange(fullscreen))){
+                       madtty_keypress(sel->term, CTRL(arg[0]));
+                       draw_content(sel);
+                       wrefresh(sel->window);
+               }
+       }
+}
+
+void
 killclient(const char *arg){
        if(!sel)
                return;
-- 
1.5.3.7



Reply via email to