我已经进入 compizconfig 的网格部分并自定义了所有的平铺命令。
当我测试这些命令时,我没有看到任何一个命令能够有效地使屏幕居中。
我进入窗口放置部分,并将新窗口配置为居中打开。但如果我将窗口移到右侧,然后想将其居中,我不知道如何使用键盘命令执行此操作。“置中”将最大化它,“恢复”将把它移动到最近的位置/大小。
总结
假设我有一个窗口覆盖了屏幕的右半部分。我想保持尺寸/大小不变,但只是将其居中。
答案1
介绍:
以下脚本将用户活动窗口的中心与屏幕的中心对齐。它旨在绑定到“设置”->“键盘”->“快捷键”菜单中的键盘快捷键。
用法:
- 将脚本另存为
~/bin/center_active_window.py
。使用以下命令确保它具有可执行权限chmod +x ~/bin/center_active_window.py
- 打开系统设置 -> 键盘 -> 快捷键 -> 自定义。点击+。
- 系统会弹出一个窗口,要求您输入名称和命令。名称可以是任何内容,命令必须是新脚本的完整路径,即
/home/your_user_name/bin/center_active_window.py
。单击Apply - 单击
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 __name__ == '__main__':
main()
答案2
伙计们。我知道这是一个老问题,但我一直在寻找同样的东西,经过大量测试后,我想出了自己的脚本,如果您不介意的话,我真的很想与您分享。
#!/bin/sh
ScreenX=$(xdpyinfo | awk -F'[ x]+' '/dimensions:/{print $3}')
ScreenY=$(xdpyinfo | awk -F'[ x]+' '/dimensions:/{print $4}')
WindowX=$(xwininfo -id $(xdotool getactivewindow) | awk -F'[ :]+' '/Width:/{print $3}')
WindowY=$(xwininfo -id $(xdotool getactivewindow) | awk -F'[ :]+' '/Height:/{print $3}')
#WindowX=$(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p")
#WindowY=$(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
PositionX=$(((ScreenX/2)-(WindowX/2)))
PositionY=$(((ScreenY/2)-(WindowY/2)))
#echo "Screen X: " $ScreenX
#echo "Window X: " $WindowX
#echo "Position X: " $PositionX
#echo "Screen Y: " $ScreenY
#echo "Window Y: " $WindowY
#echo "Position Y: " $PositionY
wmctrl -r :ACTIVE: -e 1,$PositionX,$PositionY,$WindowX,$WindowY
有些命令带有注释。我决定保留它们只是为了好奇,因为当我试图弄清楚该怎么做时它们工作得很好(我不太熟悉 bash 脚本)。
如果有人知道如何让这个脚本更简洁和/或更流畅,请随时告诉我们。那会很酷。
我希望它有用。
干杯。