You are not logged in.
Yes, that makes sense and behaves when embedded art isn't found;)
Path don't need to be expanded if '-maxdepth' is used.
You can even add a second(should be first then) bemenu to choose from F.I. a genre(if your music is well ordered!) by using 'maxdepth' and trowing it in an array, just a thought.
Even using one(genre) and playing it directly would be a possibility, which would be my choice for I only own music I like to play, entering(click play) the random choice seems a bit far fetched...
Offline
Qinoe. Again thanks for sharing the knowledge, I've picked up a few great tips from yourself & trilby, (especially no longer harming felines) as for the random | shuf thing, I use this merely to show random/different order of mp3's in the *menu -l dropdown.
Last edited by cirrus (2020-03-17 00:39:38)
Ancestoral Clan https://cirrus.freevar.com/mclean.html
Offline
Hi !
I use this script to see and switch to a opened window
#!/bin/bash
#!/bin/bash
num=$(wmctrl -l | sed 's/ / /' | cut -d " " -f 4- | nl -w 3 -n rn | sed -r 's/^([ 0-9]+)[ \t]*(.*)$/\1 - \2/' | dmenu -l 20 | cut -d '-' -f -1)
[[ -z "$num" ]] && exit
wmctrl -l | sed -n "$num p" | cut -c -10 | xargs wmctrl -i -a
How do i need to adapt this script to see also the name of the app but without the first to fields for example:
wmctrl -lx
0x01400003 3 pcmanfm.Pcmanfm HOME to_dokument
to this:
pcmanfm.Pcmanfm HOME to_dokument
or
Pcmanfm HOME to_dokument
Thanks !
kind regrads
kirstoferus
Last edited by kristoferus (2020-05-12 17:06:18)
Offline
Please use [ code ] tags (see) https://bbs.archlinux.org/help.php#bbcode
Something like?
wmctrl -lx|awk '{print $3, $4, $5}'
Offline
Hi !
I have adapt my post with code tags :
YES !
kind regards
Last edited by kristoferus (2020-05-12 17:08:52)
Offline
That first line is ... a bit much. There is never any reason to pipe through that many text processing tools that can all do basically the same thing. I don't use wmctrl to test, but this should produce the same result:
num=$(wmctrl -l | awk '{ $1=$2=$3=""; gsub(/^ */,""); printf "%3d - %s\n", NR, $0; }' | dmenu -l 20 | cut -d' ' -f 1)
It'd be even easier if wmctrl allowed you to specify output format. I don't see any such option from a quick glance at the man page, but it wouldn't surprise me if it existed.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
@Trilby, I thought I give a hint.. you provide the answer right away... and a nice one!
Offline
Oh, no, I was addressing the first line in the script which had pipe cancer. Your addressed the direct question well on how to write the last line. Though you'd just want to add the line number in the awk script.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Hi !
If i use
wmctrl -lx|awk '{print $3, $4, $5}' | dmenu -l 20 | wmctrl -lx | awk '{print $1}' | xargs wmctrl -i -a
not work if i select in dmenu
Thanks for help !
Last edited by kristoferus (2020-05-14 09:36:05)
Offline
You're saying that doesn't work? I wouldn't expect it to. You need to get the result from dmenu to filter the output of wmctrl -lx, you can't just feed it into the stdin.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Not entirely true;), this does work..
num=$(wmctrl -l | awk '{ $1=$2=$3=""; gsub(/^ */,""); printf "%3d - %s\n", NR, $0; }' | dmenu -l 20 | cut -d '-' -f 1)
[[ -z "$num" ]] && exit
wmctrl -l | sed -n "$num p" | cut -c -10 | xargs wmctrl -i -a
Offline
sed + cut = sed. I'm not sure what the input looks like, so there's probably something much less ugly that this for that third line:
wmctrl -l | sed -n "$num s/\(..........\).*/\1/p" | xargs wmctrl -i -a
Although I suspect what's wanted there is awk:
wmctrl -l | awk -v N=$num 'NR==N { print $1; }' | xargs wmctrl -i -a
Last edited by Trilby (2020-05-14 12:19:09)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
I'll have a look at it but sure that line ain't gonna work... though I agree on the sed + cut;)
Offline
Yes the script work but without the first Argument like this
Pcmanfm HOME to_dokument
Offline
@Trilby, the point is OP is using 'sed -n "$num p"', print current pattern space.
Which leads to the answer '0x04400103' after using cut!
I don't know how to achieve that using awk have to take a look in the man;)
Offline
What's the input? sed -n "$num p" just prints the n'th line of input, then the cut prints just the first 10 characters of that line. This is exactly what my sed command does. The awk command prints the first column of the n'th line. But again, as I don't know what the input is, I can't test the awk line.
No matter how you do it, you should only need one text processing tool between the first wmctrl and dmenu, then only one text processing tool in between the second and third calls to wmctrl. Exactly what these should be can only be determined if someone actually provides example input and desired output.
You could also get rid of one of the calls to wmctrl if you stored the list in a variable.
Last edited by Trilby (2020-05-14 14:06:29)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
darn, how could I think so complicated... here it is
num=$(wmctrl -l | awk '{ $1=$2=$3=""; gsub(/^ */,""); printf "%3d - %s\n", NR, $0; }' | $dmnews -l 20 | cut -d '-' -f 1)
wmctrl -l | awk "/$num/"'{print $1}' | xargs wmctrl -i -a
Offline
That will get all kinds of false positives. You don't want to the second awk to match every line that coincidentally has the number selected in the window name / title. Use NR not pattern matching.
And I doubt that will even work. "num" is an ordinal number added to the wmctrl output in the first line. It will not match anything from the second output of wmctrl.
Last edited by Trilby (2020-05-14 14:09:43)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Yes, you're right, the output of the wmctrl -l would be
0x01800022 0 asterope xterm
0x01a00022 0 asterope xterm
0x04200003 3 asterope Downloads
0x04400103 4 asterope pve-admin-guide.pdf - 65/462 (120 dpi)
so indeed checking can only be done trough the hexadecimal number
Offline
*headdesk* no, that's not what I said at all.
These lines get the above input, format it for dmenu with ordinal line numbers, allow the user to select one in dmenu, then take the number of that result for the variable. The third line gets the line based on that number and outputs the associated window ID. This can be piped to xargs/wmctrl again to select that window:
num=$(wmctrl -l | awk '{ $1=$2=$3=""; gsub(/^ */,""); printf "%3d - %s\n", NR, $0; }' | dmenu -l 20 | cut -d '-' -f 1)
[ -z "$num" ] && exit
wmctrl -l | awk -v N="$num" 'NR == N { print $1; }' # | xargs ...
It would, however, be much safer to store the initial wmctrl output. It'd like be trivially more efficient, but it will not completely break if any windows are mapped or removed while the script is running:
list=$(wmctrl -l)
num=$(echo "$list" | awk '{ $1=$2=$3=""; gsub(/^ */,""); printf "%3d - %s\n", NR, $0; }' | dmenu -l 20 | cut -d '-' -f 1)
[ -z "$num" ] && exit
echo "$list" | awk -v N="$num" 'NR == N { print $1; }' | xargs wmctrl -i -a
Last edited by Trilby (2020-05-14 14:39:27)
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Ja oops, sorry for completely misunderstanding, I see ... now, this works very well yes.
I really need to do this more so I don't forget how to handle this for I already knew how to in the past:(
It's a shame but I have very little to practice this with for myself...
Offline
That's why we get into pointless back and forths on a forum about the best way to write a silly script which most people wouldn't care about as long as it gets the job done. Practice.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Thanks but again :-(
Yes the script work but without the first Argument like this
Pcmanfm HOME to_dokument
Offline
I'm not sure what that means. Is that line what shows up in dmenu? It shouldn't be. What is the "first Argument" that is missing?
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Online
Hi !
ok Sorry !
I have already a script that shows if i open dmenu the opened windows like your script and it works !
but if i open dmenu i see only the window title (perhaps sometimes more times):
like this
HOME to_dokument
HOME to_dokument
and i want that i see also which program is the opend window
like this: (only to see with wmctrl -lx)
Pcmanfm HOME to_dokument
Urxvt HOME to_dokument
Here also my try: (with wmctrl -l it works -> but nut with wmctrl -lx)
#!/usr/bin/bash
in=$(wmctrl -lx)
choice=$(echo "$in" | awk '{print $2, $3, $4}' | dmenu -l 20)
[[ -z "$choice" ]] && exit 1
echo "$in" | grep -F "$choice" | awk '{printf $1;exit}' | xargs wmctrl -i -a
Thanks
kristoferus
Last edited by kristoferus (2020-05-14 16:42:41)
Offline