Hotkey to move windows to predetermined location and geometry?

Duncan 1i5t5.duncan at cox.net
Tue Mar 13 16:12:03 GMT 2012


Dotan Cohen posted on Tue, 13 Mar 2012 13:22:41 +0200 as excerpted:

> On Tue, Mar 13, 2012 at 03:22, Duncan <1i5t5.duncan at cox.net> wrote:

>> 2) The scriptable solution makes use of a very handy little app called
>> wmctrl.  You can call wmctrl with appropriate options to move and/or
>> resize to specific coordinates, close or move to other desktops various
>> already open windows, in a real-time manner.

> Thanks, Duncan! The wmctrl does seem to be what I am looking for. I
> installed it and tried playing with it a bit, but I could not get it do
> affect any windows. I'll start googling around as I am certain that I am
> missing some thing obvious.

First thing, be sure you're either running it as the user you're logged 
into kde as, in an environment inherited from kde (such as from a konsole 
window, not from a virtual terminal text login that doesn't know about 
your X session), or that you set the DISPLAY variable, etc.  In konsole 
it should be set automatically, tho.  You can check the variable in 
konsole by issuing the "echo $DISPLAY" command (no quotes of course).  
Here, it returns ":0" (no quotes).

Second thing, checkout the manpage, and first try the -l option (with 
some windows open, of course, for it to report on).  That should list the 
managed windows, including a plasma-desktop window for the desktop 
itself, and for each of the panels (so here I have three plasma-desktop 
windows listed, two panels plus the desktop).  Similarly, -d should list 
your desktops, and -m should list the window manager (KWin) and some info 
about it.  If those options aren't reporting anything, wmctrl isn't 
seeing your X/kde session for some reason.

You can then try wmctrl -d to list the desktops, wmctrl -n <number> to 
set it to one more than there were, and wmctrl -d again, to check that it 
took.  Of course you can then set it back to the normal number of 
desktops if you wish.

All these "basics" work, here.

Third, the following should be obvious, and probably will be in 
hindsight, but it still feels a bit weird to me, and if I hadn't been 
paying attention reading the manpage, I'd have gotten in wrong:

Near the bottom of the manpage it explains the <WIN> parameter notation.  
It's worth noting that we're working with WINDOWS here, NOT WHOLE 
PROCESSES, so feeding wmctrl a PID (process-ID) as you'd feed to kill, or 
feeding it a procname/exename, as you'd feed to killall, will probably 
*NOT* work as intended.

If you think about it, it couldn't work that way, since as I mentioned 
above, plasma-desktop for instance has three open windows here, and just 
using the PID or process name isn't enough to identify which window you 
intended to manipulate.

Instead, the <WIN> paramater by default substring-matches (case 
insensitive) against the window TITLE.  Thus, the TITLE is what you need 
to match against.

For instance, here, I have a konsole window sitting at the bash prompt, 
with bash in the titlebar.  I've ensured that it's the only one running 
ATM so the wrong one won't get matched, accidentally.  Typing this at 
that konsole prompt causes that window to close, as you'd expect from the 
manpage:

wmctrl -c bash

Meanwhile, wmctrl -c konsole doesn't close the window (tho it might close 
another one with konsole in the name if there is one), because that's the 
name of the app, not the title of the window.


Fourth, try the mentioned :SELECT: special string, as mentioned in the 
manpage under the <WIN> description, like this:

wmctrl -c :SELECT:

That should give you a cross-hairs pointer, that lets you click on a 
window to close it.  Don't click the wrong one! =:^)

Fifth, if the title matching isn't working but :SELECT: does, I'd guess 
it may have something to do with either unicode or possibly right-to-left 
window titles (I'm presuming...).  Try the workaround noted near the 
bottom of the manpage to see if that works.  If not, it's probably time 
to file a bug with either the wmctrl author or your distro, specifically 
mentioning R2L titles, UTF8, etc, as appropriate.  While I'm at least 
partially UTF8 here, I'm en_US, as close to basic POSIX as it gets other 
than the unicode, so wouldn't expect the trip-ups in that regard that 
someone with I'd guess native RtL Hebrew window titles might have.

>> [1] When kde4 broke multi-key hotkeys that worked just fine in kde3, I
>> rolled my own solution.  I'm not a C/C++ or even python/perl coder,
>> only a bash scriptor, so I coded the script in bash and run it in a
>> special konsole window with its own kwin window rules.  It's not fancy,
>> but it does a rather impressive job, considering it's all bash and kwin
>> rules, picking up where all kde4 left me was broken pieces of a
>> solution that USED to work!  A kde single-key hotkey still launches my
>> script tho there's independent hotkey solutions out there too, if kde
>> decides to break that as well.  My script in turn takes a category and
>> then an action selection key, to launch anything I use often enough to
>> have programmed a sequence for in a total of three individual key
>> presses.
>> For example, to open my browser of choice to bank's secure login site
>> is launcher, n, b.  Launcher is an "extra" key available on my
>> inet/media keyboard, n=net (category), b=bank (individual task in the
>> selected category).

> I would love to see your scripted hotkeys bash file. I use Krunner very
> heavily, and your solution might be even more efficient.

FWIW, it's actually a collection of several files, an initial trigger 
script, the main menu script, a keymap file that maps ctrl-key hotkeys 
(normal printing characters and shifted chars are native, ctrl-key combos 
need the mapping file and some like ctrl-J, newline, don't work anyway, 
it's just those three variants, normal, shifted and controlled), and of 
course the menu files.  The menu files are user owned/configured, the 
others are placed under the /usr/local/ location as system files.

There's actually a bit of kde config that goes along with it too.  I 
mentioned the kwin window rules and the single khotkeys based trigger key 
above.  The last bit of the puzzle is that I run a separate konsole 
profile for the menu, tho I believe it's optional.  (I tried it along the 
way, and had it setup when I got the thing working, so left it setup, but 
I don't think it's actually necessary.)

I'll probably post the collection, along with appropriate instructions, 
later.  I'm too tired to compose the instructions properly, ATM.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman

___________________________________________________
This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.


More information about the kde mailing list