jump or exec(适用于多种窗口管理器)

讨论openbox,awesome,FVWM等WM
回复
头像
bigsun
帖子: 301
注册时间: 2009-01-11 16:05
送出感谢: 2 次
接收感谢: 11 次

jump or exec(适用于多种窗口管理器)

#1

帖子 bigsun » 2011-03-16 0:51

安装wmctrl和dmenu
新建dmenu_run

代码: 全选

#!/bin/sh
exe=`dmenu_path | dmenu ${1+"$@"}` && exec ~/focus.py $exe $exe
新建focus.py

代码: 全选

#!/usr/bin/env python
import os
import sys
import commands

run_command = sys.argv[1] # the program to be run
program_name = sys.argv[2] # the program to be focused

# get all windows which contain "program_name" from wmcontrol
candidates = sorted([x.strip() for x in commands.getoutput(""" wmctrl -l -x | awk -v win="%s" 'tolower($0) ~ win {print $1;}' """ % (program_name, )).split("\n") if x !=''])

if candidates :
    active_window_string = commands.getoutput("""xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" """)
    active_window_string =  active_window_string[active_window_string.find("#")+4:].strip()
    active_window = "0x" + "0" * (8-len(active_window_string)) + active_window_string

    next_window = None # the window to display. (one of the windows in candidates)
    if active_window not in candidates: # if the active window is not among the candidate windows
            next_window = candidates[0] # ..just show the first candidate window
    else:# we are already showing one of the candidate windows
            next_window = candidates[ (candidates.index(active_window)+1) % len(candidates)] # show the *next* candidate in the list (cycling)

    if next_window:
            os.system(""" wmctrl -i -a "%s" """ % (next_window,) ) # tell wmcontrol to display the next_window
else : # no windows open which fit the pattern of program_name
    os.system("%s &" % (run_command,)) # open new window
在窗口管理器上加个keybinding,我的是fvwm

代码: 全选

Key F2  A M Exec exec ~/dmenu_run
python程序来自:
http://blog.mfaathp.com/2011/02/ubuntu% ... %E5%BA%8F/

另一个有用的链接:
http://lifegoo.pluskid.org/wiki/JumpOrExec.html#sec2
usbtopc
帖子: 96
注册时间: 2009-06-30 23:05
送出感谢: 0
接收感谢: 1 次

Re: jump or exec(适用于多种窗口管理器)

#2

帖子 usbtopc » 2011-03-16 10:04

感谢分享!

dmenu是个不错的软件,一直在用。
裸跑X可能是最后的选择......
目前使用dwm-plus: http://code.google.com/p/dwm-plus/
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: jump or exec(适用于多种窗口管理器)

#3

帖子 eexpress » 2011-03-16 10:34

居然用py调用xprop wmctrl。真折腾。
居然用py来作wm自带的窗口轮询。
● 鸣学
头像
poweroff
帖子: 395
注册时间: 2008-12-13 15:03
送出感谢: 0
接收感谢: 1 次

Re: jump or exec(适用于多种窗口管理器)

#4

帖子 poweroff » 2011-03-16 10:40

不要跟楼上一般见识。他就这样。
一条狗的马甲!
对不起,我承认我是一只穿着马甲的狗!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: jump or exec(适用于多种窗口管理器)

#5

帖子 eexpress » 2011-03-16 10:49

DestroyFunc JumpExec
AddToFunc JumpExec
+ I All ($0) WindowListFunc
+ I TestRc (NoMatch) Exec exec $0 &

没见识的,不去搜索。
● 鸣学
回复

回到 “窗口管理器”