All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2] oe.terminal: add tmux classes
@ 2013-04-04 18:45 Christopher Larson
  2013-04-05  0:44 ` [PATCHv3] " Christopher Larson
  0 siblings, 1 reply; 5+ messages in thread
From: Christopher Larson @ 2013-04-04 18:45 UTC (permalink / raw)
  To: openembedded-core; +Cc: Christopher Larson

From: Christopher Larson <chris_larson@mentor.com>

This adds two new Terminal classes. It's separated into two, so that opening
a split inside a tmux window is preferred to the other terminal types, but
opening a tmux session is prioritized only slightly higher than screen.

- tmuxrunning: Open a new pane in the current running tmux window. Requires
  that the TMUX variable be added to the env whitelist to use it.
- tmux: Open a new tmux session

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
---
 meta/lib/oe/terminal.py | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
index 4c1e318..2e23d59 100644
--- a/meta/lib/oe/terminal.py
+++ b/meta/lib/oe/terminal.py
@@ -105,6 +105,43 @@ class Screen(Terminal):
         else:
             logger.warn(msg)
 
+class TmuxRunning(Terminal):
+    """Open a new pane in the current running tmux window"""
+    command = 'tmux split-window {command}'
+    priority = 2.75
+
+    def __init__(self, sh_cmd, title=None, env=None, d=None):
+        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
+            raise UnsupportedTerminal('tmux is not installed')
+
+        if not os.getenv('TMUX'):
+            raise UnsupportedTerminal('tmux is not running')
+
+        Terminal.__init__(self, sh_cmd, title, env, d)
+
+class TmuxNewSession(Terminal):
+    """Start a new tmux session and window"""
+    command = 'tmux new -d -s devshell -n devshell {command}'
+    priority = 0.75
+
+    def __init__(self, sh_cmd, title=None, env=None, d=None):
+        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
+            raise UnsupportedTerminal('tmux is not installed')
+
+        # TODO: consider using a 'devshell' session shared amongst all
+        # devshells, if it's already there, add a new window to it.
+        window_name = 'devshell-%i' % os.getpid()
+
+        self.command = 'tmux new -d -s {0} -n {0} {{command}}'.format(window_name)
+        Terminal.__init__(self, sh_cmd, title, env, d)
+
+        attach_cmd = 'tmux att -t {0}'.format(window_name)
+        msg = 'Tmux started. Please connect in another terminal with `tmux att -t {0}`'.format(window_name)
+        if d:
+            bb.event.fire(bb.event.LogExecTTY(msg, attach_cmd, 0.5, 10), d)
+        else:
+            logger.warn(msg)
+
 class Custom(Terminal):
     command = 'false' # This is a placeholder
     priority = 3
-- 
1.8.2




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCHv3] oe.terminal: add tmux classes
  2013-04-04 18:45 [PATCHv2] oe.terminal: add tmux classes Christopher Larson
@ 2013-04-05  0:44 ` Christopher Larson
  2013-04-05 13:55   ` Jason Wessel
  0 siblings, 1 reply; 5+ messages in thread
From: Christopher Larson @ 2013-04-05  0:44 UTC (permalink / raw)
  To: openembedded-core; +Cc: Christopher Larson

From: Christopher Larson <chris_larson@mentor.com>

This adds two new Terminal classes. It's separated into two, so that opening
a split inside a tmux window is preferred to the other terminal types, but
opening a tmux session is prioritized only slightly higher than screen.

- tmuxrunning: Open a new pane in the current running tmux window. Requires
  that the TMUX variable be added to the env whitelist to use it.
- tmux: Open a new tmux session

Signed-off-by: Christopher Larson <chris_larson@mentor.com>
---
 meta/lib/oe/terminal.py | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
index 2e23d59..e52863f 100644
--- a/meta/lib/oe/terminal.py
+++ b/meta/lib/oe/terminal.py
@@ -142,6 +142,44 @@ class TmuxNewSession(Terminal):
         else:
             logger.warn(msg)
 
+class TmuxRunning(Terminal):
+    """Open a new pane in the current running tmux window"""
+    name = 'tmux-running'
+    command = 'tmux split-window {command}'
+    priority = 2.75
+
+    def __init__(self, sh_cmd, title=None, env=None, d=None):
+        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
+            raise UnsupportedTerminal('tmux is not installed')
+
+        if not os.getenv('TMUX'):
+            raise UnsupportedTerminal('tmux is not running')
+
+        Terminal.__init__(self, sh_cmd, title, env, d)
+
+class Tmux(Terminal):
+    """Start a new tmux session and window"""
+    command = 'tmux new -d -s devshell -n devshell {command}'
+    priority = 0.75
+
+    def __init__(self, sh_cmd, title=None, env=None, d=None):
+        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
+            raise UnsupportedTerminal('tmux is not installed')
+
+        # TODO: consider using a 'devshell' session shared amongst all
+        # devshells, if it's already there, add a new window to it.
+        window_name = 'devshell-%i' % os.getpid()
+
+        self.command = 'tmux new -d -s {0} -n {0} {{command}}'.format(window_name)
+        Terminal.__init__(self, sh_cmd, title, env, d)
+
+        attach_cmd = 'tmux att -t {0}'.format(window_name)
+        msg = 'Tmux started. Please connect in another terminal with `tmux att -t {0}`'.format(window_name)
+        if d:
+            bb.event.fire(bb.event.LogExecTTY(msg, attach_cmd, 0.5, 10), d)
+        else:
+            logger.warn(msg)
+
 class Custom(Terminal):
     command = 'false' # This is a placeholder
     priority = 3
-- 
1.8.2




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCHv3] oe.terminal: add tmux classes
  2013-04-05  0:44 ` [PATCHv3] " Christopher Larson
@ 2013-04-05 13:55   ` Jason Wessel
  2013-04-05 14:20     ` Chris Larson
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Wessel @ 2013-04-05 13:55 UTC (permalink / raw)
  To: Christopher Larson; +Cc: Christopher Larson, openembedded-core

On 04/04/2013 07:44 PM, Christopher Larson wrote:
> From: Christopher Larson <chris_larson@mentor.com>
>
> This adds two new Terminal classes. It's separated into two, so that opening
> a split inside a tmux window is preferred to the other terminal types, but
> opening a tmux session is prioritized only slightly higher than screen.
>
> - tmuxrunning: Open a new pane in the current running tmux window. Requires
>   that the TMUX variable be added to the env whitelist to use it.
> - tmux: Open a new tmux session
>
> Signed-off-by: Christopher Larson <chris_larson@mentor.com>
> ---
>  meta/lib/oe/terminal.py | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
> index 2e23d59..e52863f 100644
> --- a/meta/lib/oe/terminal.py
> +++ b/meta/lib/oe/terminal.py
> @@ -142,6 +142,44 @@ class TmuxNewSession(Terminal):
>          else:
>              logger.warn(msg)
>  
> +class TmuxRunning(Terminal):
> +    """Open a new pane in the current running tmux window"""
> +    name = 'tmux-running'
> +    command = 'tmux split-window {command}'
> +    priority = 2.75
> +
> +    def __init__(self, sh_cmd, title=None, env=None, d=None):
> +        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
> +            raise UnsupportedTerminal('tmux is not installed')
> +
> +        if not os.getenv('TMUX'):
> +            raise UnsupportedTerminal('tmux is not running')
> +
> +        Terminal.__init__(self, sh_cmd, title, env, d)


When we chatted yesterday I didn't fully understand how the Tmux Running piece worked.   Now I get it, you run tmux and then start a build with in that session and just join back to it when the TMUX var is set because that is how TMUX does internal communications setup.  I have to admit that is pretty slick. :-)

It seems to me we can just fold these two classes together and drive it off the TMUX variable.   This way we can just have one OE TERMINAL type, and if you don't want the behavior to engage of the "split" you just unset TMUX before you build.   I believe that this covers all the cases you care about, and would allow for the simplistic case I care about where I just set OE_TERMINAL=tmux to work for both cases. I would recommend we just patch up the bitbake.conf BBHASH pieces all in one shot with this patch so their is nothing special anyone has to do to make use of this.

Would you be ok with that?

Further work that I'll probably consider doing if no one else does it first is to add tmux-native so we always have it as the fall back for getting to patch failures and such on a remote build server.

Cheers,
Jason.



> +
> +class Tmux(Terminal):
> +    """Start a new tmux session and window"""
> +    command = 'tmux new -d -s devshell -n devshell {command}'
> +    priority = 0.75
> +
> +    def __init__(self, sh_cmd, title=None, env=None, d=None):
> +        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
> +            raise UnsupportedTerminal('tmux is not installed')
> +
> +        # TODO: consider using a 'devshell' session shared amongst all
> +        # devshells, if it's already there, add a new window to it.
> +        window_name = 'devshell-%i' % os.getpid()
> +
> +        self.command = 'tmux new -d -s {0} -n {0} {{command}}'.format(window_name)
> +        Terminal.__init__(self, sh_cmd, title, env, d)
> +
> +        attach_cmd = 'tmux att -t {0}'.format(window_name)
> +        msg = 'Tmux started. Please connect in another terminal with `tmux att -t {0}`'.format(window_name)
> +        if d:
> +            bb.event.fire(bb.event.LogExecTTY(msg, attach_cmd, 0.5, 10), d)
> +        else:
> +            logger.warn(msg)
> +
>  class Custom(Terminal):
>      command = 'false' # This is a placeholder
>      priority = 3




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv3] oe.terminal: add tmux classes
  2013-04-05 13:55   ` Jason Wessel
@ 2013-04-05 14:20     ` Chris Larson
  2013-04-05 22:10       ` Jason Wessel
  0 siblings, 1 reply; 5+ messages in thread
From: Chris Larson @ 2013-04-05 14:20 UTC (permalink / raw)
  To: Jason Wessel; +Cc: Patches and discussions about the oe-core layer

[-- Attachment #1: Type: text/plain, Size: 3540 bytes --]

On Fri, Apr 5, 2013 at 6:55 AM, Jason Wessel <jason.wessel@windriver.com>wrote:

> On 04/04/2013 07:44 PM, Christopher Larson wrote:
> > From: Christopher Larson <chris_larson@mentor.com>
> >
> > This adds two new Terminal classes. It's separated into two, so that
> opening
> > a split inside a tmux window is preferred to the other terminal types,
> but
> > opening a tmux session is prioritized only slightly higher than screen.
> >
> > - tmuxrunning: Open a new pane in the current running tmux window.
> Requires
> >   that the TMUX variable be added to the env whitelist to use it.
> > - tmux: Open a new tmux session
> >
> > Signed-off-by: Christopher Larson <chris_larson@mentor.com>
> > ---
> >  meta/lib/oe/terminal.py | 38 ++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 38 insertions(+)
> >
> > diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
> > index 2e23d59..e52863f 100644
> > --- a/meta/lib/oe/terminal.py
> > +++ b/meta/lib/oe/terminal.py
> > @@ -142,6 +142,44 @@ class TmuxNewSession(Terminal):
> >          else:
> >              logger.warn(msg)
> >
> > +class TmuxRunning(Terminal):
> > +    """Open a new pane in the current running tmux window"""
> > +    name = 'tmux-running'
> > +    command = 'tmux split-window {command}'
> > +    priority = 2.75
> > +
> > +    def __init__(self, sh_cmd, title=None, env=None, d=None):
> > +        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
> > +            raise UnsupportedTerminal('tmux is not installed')
> > +
> > +        if not os.getenv('TMUX'):
> > +            raise UnsupportedTerminal('tmux is not running')
> > +
> > +        Terminal.__init__(self, sh_cmd, title, env, d)
>
>
> When we chatted yesterday I didn't fully understand how the Tmux Running
> piece worked.   Now I get it, you run tmux and then start a build with in
> that session and just join back to it when the TMUX var is set because that
> is how TMUX does internal communications setup.  I have to admit that is
> pretty slick. :-)
>
> It seems to me we can just fold these two classes together and drive it
> off the TMUX variable.   This way we can just have one OE TERMINAL type,
> and if you don't want the behavior to engage of the "split" you just unset
> TMUX before you build.   I believe that this covers all the cases you care
> about, and would allow for the simplistic case I care about where I just
> set OE_TERMINAL=tmux to work for both cases. I would recommend we just
> patch up the bitbake.conf BBHASH pieces all in one shot with this patch so
> their is nothing special anyone has to do to make use of this.
>
> Would you be ok with that?
>
> Further work that I'll probably consider doing if no one else does it
> first is to add tmux-native so we always have it as the fall back for
> getting to patch failures and such on a remote build server.


The problem with combining them is they'd be stuck at the same priority,
which makes 'auto' less useful. In the case where DISPLAY and TMUX are both
set, I think it makes more sense to prefer to interact with the running
tmux session rather than spawning a new xterm, yet spawning a new tmux
session should be kept at the same priority as screen to meet user
expectations.

A decent compromise, to make the explicit OE_TERMINAL=tmux case more
useful, would be to merge the tmuxrunning bits into tmux, but still keep
the independent tmuxrunning class for the 'auto' case. Thoughts on that?
-- 
Christopher Larson

[-- Attachment #2: Type: text/html, Size: 4447 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv3] oe.terminal: add tmux classes
  2013-04-05 14:20     ` Chris Larson
@ 2013-04-05 22:10       ` Jason Wessel
  0 siblings, 0 replies; 5+ messages in thread
From: Jason Wessel @ 2013-04-05 22:10 UTC (permalink / raw)
  To: Chris Larson; +Cc: Patches and discussions about the oe-core layer

[-- Attachment #1: Type: text/plain, Size: 3926 bytes --]

On 04/05/2013 09:20 AM, Chris Larson wrote:
>
> On Fri, Apr 5, 2013 at 6:55 AM, Jason Wessel <jason.wessel@windriver.com <mailto:jason.wessel@windriver.com>> wrote:
>
>     On 04/04/2013 07:44 PM, Christopher Larson wrote:
>     > From: Christopher Larson <chris_larson@mentor.com <mailto:chris_larson@mentor.com>>
>     >
>     > This adds two new Terminal classes. It's separated into two, so that opening
>     > a split inside a tmux window is preferred to the other terminal types, but
>     > opening a tmux session is prioritized only slightly higher than screen.
>     >
>     > - tmuxrunning: Open a new pane in the current running tmux window. Requires
>     >   that the TMUX variable be added to the env whitelist to use it.
>     > - tmux: Open a new tmux session
>     >
>     > Signed-off-by: Christopher Larson <chris_larson@mentor.com <mailto:chris_larson@mentor.com>>
>     > ---
>     >  meta/lib/oe/terminal.py | 38 ++++++++++++++++++++++++++++++++++++++
>     >  1 file changed, 38 insertions(+)
>     >
>     > diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
>     > index 2e23d59..e52863f 100644
>     > --- a/meta/lib/oe/terminal.py
>     > +++ b/meta/lib/oe/terminal.py
>     > @@ -142,6 +142,44 @@ class TmuxNewSession(Terminal):
>     >          else:
>     >              logger.warn(msg)
>     >
>     > +class TmuxRunning(Terminal):
>     > +    """Open a new pane in the current running tmux window"""
>     > +    name = 'tmux-running'
>     > +    command = 'tmux split-window {command}'
>     > +    priority = 2.75
>     > +
>     > +    def __init__(self, sh_cmd, title=None, env=None, d=None):
>     > +        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
>     > +            raise UnsupportedTerminal('tmux is not installed')
>     > +
>     > +        if not os.getenv('TMUX'):
>     > +            raise UnsupportedTerminal('tmux is not running')
>     > +
>     > +        Terminal.__init__(self, sh_cmd, title, env, d)
>
>
>     When we chatted yesterday I didn't fully understand how the Tmux Running piece worked.   Now I get it, you run tmux and then start a build with in that session and just join back to it when the TMUX var is set because that is how TMUX does internal communications setup.  I have to admit that is pretty slick. :-)
>
>     It seems to me we can just fold these two classes together and drive it off the TMUX variable.   This way we can just have one OE TERMINAL type, and if you don't want the behavior to engage of the "split" you just unset TMUX before you build.   I believe that this covers all the cases you care about, and would allow for the simplistic case I care about where I just set OE_TERMINAL=tmux to work for both cases. I would recommend we just patch up the bitbake.conf BBHASH pieces all in one shot with this patch so their is nothing special anyone has to do to make use of this.
>
>     Would you be ok with that?
>
>     Further work that I'll probably consider doing if no one else does it first is to add tmux-native so we always have it as the fall back for getting to patch failures and such on a remote build server.
>
>
> The problem with combining them is they'd be stuck at the same priority, which makes 'auto' less useful. In the case where DISPLAY and TMUX are both set, I think it makes more sense to prefer to interact with the running tmux session rather than spawning a new xterm, yet spawning a new tmux session should be kept at the same priority as screen to meet user expectations.
>
> A decent compromise, to make the explicit OE_TERMINAL=tmux case more useful, would be to merge the tmuxrunning bits into tmux, but still keep the independent tmuxrunning class for the 'auto' case. Thoughts on that?


Based on how the auto list processing works your latest proposed solution seems like the most reasonable choice.

Thanks,
Jason.

[-- Attachment #2: Type: text/html, Size: 6659 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-04-05 22:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-04 18:45 [PATCHv2] oe.terminal: add tmux classes Christopher Larson
2013-04-05  0:44 ` [PATCHv3] " Christopher Larson
2013-04-05 13:55   ` Jason Wessel
2013-04-05 14:20     ` Chris Larson
2013-04-05 22:10       ` Jason Wessel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.