<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><div data-html-editor-font-wrapper="true" style="font-family: arial, sans-serif; font-size: 13px;"><blockquote><div><div style="color: #000000;background-color: #FFFFFF"><p>Hi lista :)</p><p>Using an <a target="_blank" tabindex="-1" rel="external nofollow" href="https://i3wm.org/docs/userguide.html#exec">i3</a> shortcut, I can control my jack transport from everywhere, even when no jack application has focus :</p><p><tt>bindsym $mod+p exec echo play | jack_transport</tt><br><tt>bindsym $mod+Shift+p exec echo stop | jack_transport</tt></p><p>Thanks to FalkTX for the pipe trick BTW, I saw that on linuxmusicians ; This is very cool if you have some sort of wireless keyboard, but as you can see it's two different keystrokes, how do I make it so <command> toggles play/pause? Alternatively, how do I know when jack transport is rolling, so I can hack my way into making my own toggle script? I did my homework and read the inline --help of all the available jack commands on my machine :</p><p><span style="color: rgb(51, 51, 51); font-size: 13px;"></span></p></div></div></blockquote><br><br>With this patch, jack_transport should be able to toggle. I will suggest it to the jack-develop list but would be happy if some else can test it.<br><br><br>Holger<br><br>-----------------<br><br>diff --git a/example-clients/transport.c b/example-clients/transport.c<br>index c543b41..0b1130f 100644<br>--- a/example-clients/transport.c<br>+++ b/example-clients/transport.c<br>@@ -211,6 +211,29 @@ static void com_timeout(char *arg)<br>       jack_set_sync_timeout(client, (jack_time_t) (timeout*1000000));<br>}<br> <br>+/* Set sync timeout in seconds. */<br>+static void com_toggle(char *arg)<br>+{        <br>+       jack_position_t current;<br>+       jack_transport_state_t transport_state;<br>+<br>+       transport_state = jack_transport_query (client, ¤t);<br>+<br>+               switch (transport_state) {<br>+       case JackTransportStopped:<br>+                com_play( arg );<br>+               break;<br>+       case JackTransportRolling:<br>+                com_stop( arg );<br>+               break;<br>+       case JackTransportStarting:<br>+               printf ("state: Starting - no transport toggling");<br>+               break;<br>+        default:<br>+               printf ("state: Unknown - no transport toggling");<br>+       }  <br>+}<br>+<br> <br>/* Command parsing based on GNU readline info examples. */<br> <br>@@ -238,6 +261,7 @@ command_t commands[] = {<br>       {"stop",        com_stop,       "Stop transport"},<br>       {"tempo",       com_tempo,      "Set beat tempo <beats_per_min>"},<br>       {"timeout",     com_timeout,    "Set sync timeout in <seconds>"},<br>+       {"toggle",      com_toggle,     "Toggle transport rolling"},<br>       {"?",           com_help,       "Synonym for `help'" },<br>       {(char *)NULL, (cmd_function_t *)NULL, (char *)NULL }<br>};</div></body></html>