将窗口复制到多个工作区

将窗口复制到多个工作区

有没有办法将窗口复制到多个工作区。例如,如果 Chrome 在工作区 1 的桌面上打开,我想将其复制到工作区 X,而不是移动它,这样,当我切换到工作区 X 时,Chrome 窗口也会出现在那里。

建议不必仅限于操作系统解决方案。如果有人能建议一个容易获得的免费程序,那也会很有帮助。

当前操作系统版本:Ubuntu 14.04-amd64

答案1

Ubuntu:

在多个桌面上显示窗口是现成的。只需右键单击任务栏中的应用程序图标即可

截屏

选择“移至桌面”>>“所有桌面”

这样,窗口就会显示在每个“桌面”上(上下文菜单中的“移动”字样有点误导)。

侏儒

事实证明,这款产品开箱即用

右键单击窗口标题并选择“始终在可见工作区”

在此处输入图片描述

答案2

我创建了以下 bash 脚本,我认为它接近 OP 想要的。它不会将选定的窗口复制到选定的工作区上。而是在选定的工作区发生变化时自动将选定的窗口移动到选定的工作区上。

#!/bin/bash
# get id of window
id=$(xwininfo -id $(xdotool getwindowfocus) | grep "Window id" | cut -d' ' -f4)
# get pid of script
script_pid=$(echo $$)

# file for temporarily storing id-pid pairs
temp="/tmp/ids-pids.txt"
# create the file if it does not exist
touch $temp

# check if window id already exists in temp
# if yes, kill the script and remove the window id entry
# if no, add a window id-script pid entry
# this is used as a toggle for turning the script on/off with the same keystroke
if grep -q $id $temp; then
    kill $(grep $id $temp | cut -d' ' -f2)
    sed -i "/$id/d" $temp 
    kill $$
else
    echo $id $script_pid >> $temp
fi

# enter the workspaces numbers that the window can appear on as an array
# input is space-delimited
IFS=' ' read -r -a array < <( zenity --entry \
                --width 400 \
                --title="Window on multiple workspaces" \
                --text="Window on workspaces:" )

# if the user cancels text entry or inputs nothing, then exit and kill the script
if [ ${#array[@]} -eq 0 ]; then
    sed -i "/$id/d" $temp 
    kill $$
fi

while true
do
    # get current workspace
    workspace=$(wmctrl -d | grep \* | cut -d' ' -f1)
    # move window to the workspace if it is in the allowed workspaces array
    if [[ "${array[@]}" =~ "${workspace}" ]]; then 
        wmctrl -i -r $id -t $workspace
    fi

    # check if window is closed
    # if yes, remove its id-pid entry and kill the script 
    if echo $(xwininfo -id $id 2>&1) | grep -q "X Error:"; then
        sed -i "/$id/d" $temp
        kill $(grep $id $temp | cut -d' ' -f2)
        kill $$
    fi

    # sleep is used so that the command won't run continuously
    sleep 1
done

如何使用

  • 首先,确保您已安装此脚本中使用的程序:

    sudo apt install xdotool wmctrl zenity
    
  • 将脚本复制并粘贴到计算机中的 .sh 文件中,例如主文件夹 ( /home/user/window_workspaces.sh)。

  • 使其可执行:

    chmod u+x /home/user/window_workspaces.sh
    
  • 将脚本分配给快捷方式。在 GNOME 中,打开应用程序概述设置设备键盘→ 点击底部的“+”,输入快捷方式名称、脚本路径和要使用的快捷方式,如下图所示。我选择Super+Z作为脚本的快捷方式。

    GNOME 快捷方式

  • 在焦点窗口上,按Super+ Z。将弹出一个窗口,您可以在其中输入希望窗口出现的工作区,用空格隔开, 如下所示。

    工作区入口

  • 在聚焦同一窗口的情况下再次按下Super+Z它将恢复正常,即仅出现在一个工作区中。

该脚本应该适用于所有桌面环境。

请随意提出任何更改!

相关内容