<!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>