web-dev-qa-db-ja.com

キーボードショートカットでウィンドウを中央に配置するにはどうすればよいですか?

Compizconfigのグリッドセクションに移動し、すべてのタイルコマンドをカスタマイズしました。

私がコマンドをテストしていたとき、それらのどれもが画面を効果的に中央に配置するのを見ませんでした。

ウィンドウ配置セクションに入り、新しいウィンドウを中央に開くように構成しました。しかし、ウィンドウを右側に移動してから中央に配置したい場合、キーボードコマンドを使用してそれを行う方法がわかりません。 「put center」はそれを最大化し、「restore」はそれを最新の位置/サイズに移動します。

要約するために

画面の右半分を覆うウィンドウがあるとします。寸法/サイズは同じに保ちたいが、ちょうど中央にしたい。

2
max pleaner

前書き:

次のスクリプトは、ユーザーのアクティブウィンドウの中心を画面の中心に揃えます。 [設定]-> [キーボード]-> [ショートカット]メニューのキーボードショートカットにバインドすることを目的としています。


使用法:

  1. スクリプトを~/bin/center_active_window.pyとして保存します。 chmod +x ~/bin/center_active_window.pyを使用して実行可能権限があることを確認してください
  2. システム設定->キーボード->ショートカット->カスタムを開きます。クリック +
  3. 名前とコマンドを要求するポップアップが表示されます。名前は何でもかまいませんが、コマンドは新しいスクリプトへのフルパス、つまり/home/your_user_name/bin/center_active_window.pyでなければなりません。クリック Apply
  4. Disabledテキストをクリックし、プロンプトが表示されたらカスタムキーバインドを割り当てます。私は使っています Ctrl+Super+C 、ただし、好きなものを使用できます。

ソースコード

GitHubの要点 としても利用可能

#!/usr/bin/env python3

# Author: Serg Kolo
# Date: Oct 3rd, 2016
# Description: Script for aligning the center of 
#     user's active window with the center of the monitor
# Tested on: Ubuntu 16.04
# Written for: http://askubuntu.com/q/832720/295286

from __future__ import print_function
from gi.repository import Gdk
import subprocess

def get_offset(*args):
    command = ['xprop','-notype','_NET_FRAME_EXTENTS',
               '-id',str(args[0])
    ]

    out = subprocess.check_output(command)
    return int(out.decode().strip().split(',')[-2])

def main():

    screen = Gdk.Screen.get_default()
    window = screen.get_active_window()
    window.unmaximize()
    window_width = window.get_width()
    window_y = window.get_Origin()[-1]
    print(window_y)
    window_monitor = screen.get_monitor_at_window(window)
    monitor_center = screen.get_monitor_geometry(window_monitor).width/2

    # if centers of window and screen are aligned
    # the top left corner will be at screen_center - window_width/2    
    new_position = monitor_center - window_width /2

    # For some reason there is vertical offset necessary
    # Apparently this comes form _NET_FRAME_EXTENTS value
    offset = get_offset(int(window.get_xid()))

    window.move(new_position,window_y-offset)
    print(window.get_Origin()) 

if __== '__main__':
    main()

2