I had to write a custom bash launch script for a local machine, but wanted it to do one thing if the shift-key
was pressed and another thing if it was not.
After searching, i found that bash is NOT capable of such a thing. However, there was a short and simpe C implementation found here: https://forums.gentoo.org/viewtopic-p-2455159.html#2455159
So after compiling the code (gcc shift_state.c -o shift_state ; chmod +x shift_state
) and explicitly running it under sudo
(required to access /dev/console
), i found it did exactly what was needed.
So the only problem remaining was i didn’t want to run my bash script with sudo
. To circumvent such, i ran sudo visudo
and added the line myusername ALL=(ALL) NOPASSWD: /home/myusername/scripts/shift_state
which would allow me to run sudo ~/scripts/shift_state
without entering my password.
Subsequently, it was easy to implement a bash script as needed.
Code:
But wait, there's more!
Such could also be used to customize your XFCE Panel-based launch-bar. (Or any launch-bar for that matter.) For instance, In the past, I've created a panel item for Sublimetext. This is a "Launcher" item with two sublimetext commands, one launches and another launches with the -n
parameter for a new window. However, it looks ugly and a bit cumbersome to launch:
With the shift_state method, I have replaced the Launcher commands with a single command: bash -c "if ! (( $(sudo ~/scripts/shift_state) )) ; then /opt/sublime_text/sublime_text %F ; else /opt/sublime_text/sublime_text -n %F ; fi"
. Now it looks better without a secondary command-arrow, and when I shift-click to launch, it provides me the same function in a quicker workflow way.
~~~
As Always, Good Luck! You can thank me with bitcoin.
Written with StackEdit.