2012年11月14日水曜日

Linuxで任意のウィンドウを最前面,最小化するプログラム

QuakeやGuake,VisorやTotalTerminalというアプリをご存知でしょうか.
これらは任意のキーを押下すると,Terminalを表示したり非表示にしたり出来るアプリです.
僕はGuakeをUbuntuで使用しています.
これらはとても便利なのですが,Terminal以外もこのような動作をさせられたら便利だと思い,それに近いことを実現するプログラムを書きました.

Ubuntu12.04で動作を確認しています.

カレントウィンドウの取得はStackOverFlowのこのスレッドを参考にしています.

http://stackoverflow.com/questions/3551754/xorg-python-and-current-window-title


続きは使用方法とプログラムのソースコードです.




コマンド経由でウィンドウを操作する以下のパッケージに依存しているため,先にインストールします.
% sudo apt-get install  wmctrl xwit

ccsmがインストールされていない場合はこれも実行してください.
% sudo apt-get install compizconfig-settings-manager

quakeapp.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from subprocess import PIPE, Popen
import os
import sys

def get_current_window_name():
    for i in Popen(['xprop', '-root'],  stdout=PIPE).stdout:
        if '_NET_ACTIVE_WINDOW(WINDOW):' in i:
            for j in Popen(['xprop', '-id', i.split()[4]], stdout=PIPE).stdout:
                if 'WM_ICON_NAME(STRING)' in j:
                    return j.split()[2][1:][:-1]

def toggle_foreground(app_name):
    app = get_current_window_name()
    if not app or not 0 is app.find(app_name):
        os.system('wmctrl -a ' + app_name)
    else:
        os.system('xwit -iconify -names ' + app_name)

if __name__ == '__main__':
    if 2 > len(sys.argv):
        print(u'最前面,最小化の対象にしたいアプリケーションの名前を与えてください.')
    else:
        toggle_foreground(sys.argv[1])

Gist: https://gist.github.com/4072339

quakemacs.sh
#!/bin/sh
quakeapp emacs23X201s

このemacs23X201sの部分は任意のアプリケーションのものに変えてください.

これらを任意のディレクトリに置き,実行権限を与え,パスの通ったディレクトリからシンボリックリンクを張ります.
僕はquakeappとquakemacsという名前でシンボリックリンクを張っています.

次にCompizConfig設定マネージャを起動します.

コマンドを有効にし,コマンドを開きます
コマンドを割り当てます.
割り当てたコマンドを実行するキーを選択します.
僕はCtrl + F12にしています.

以上です.設定後にCtrl + F12を押すと指定したアプリケーションが最前面に移動してきたり,最小化したりするはずです.

0 件のコメント:

コメントを投稿