Размещение окна при переключении на несколько мониторов

rm -i читает его ответ из стандартного входа, который он наследовал от while цикл. Так строка текста от list.txt используется в качестве ответа на, "действительно удаляют?" вопрос. Для фиксации необходимо будет разделить два источника входа. Самый легкий путь состоит в том, чтобы иметь read возьмите его вход от отдельного дескриптора файла:

while IFS= read <&3 -r i; do
  rm -i -- "$i"     # Quote the file name, not just to be safe,
                    # but because it's the right syntax.
done 3< list.txt

Вы больше не перенаправляете стандартный вход (fd 0) для цикла с условием продолжения, таким образом, rm будет читать из терминала, как желаемый.

С другой стороны, Вы, возможно, сделали:

IFS=$'\n' # set field separator to newline
set -f    # disable globbing upon command substitution
rm -i -- $(cat list.txt)

Или, с GNU xargs:

xargs -rd '\n' --arg-file=list.txt rm -i --
3
16.09.2017, 03:23
2 ответа

xdotool

Общее представление, но Вы могли достигнуть того, что Вы хотите путем создания нескольких использований команд xdotool. Затем Вы могли выполнить их соответственно, когда у Вас есть 1 или 2 подключенные монитора.

Существует довольно хороший пример того, как Вы могли сделать это в обвиненном названный: Xubuntu – движущиеся окна между мониторами.

выборка от раздела: Перемещение активного окна к другому монитору (наконец!)

Вот то, что мы должны сделать:

  • Найдите активное окно
  • Получите его максимизируемое состояние и помните это
  • Удалите максимизацию
  • Получите его геометрию
  • Вычислите новое положение
  • Переместите его
  • Максимизируйте на основе предыдущего состояния
  • Повысьте его

Вот сценарий, который делает это:

wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

Более интерактивный метод

Я также нашел другой подход, который также использовал xdotool но перенесенный это в сценарий оболочки, который Вы могли затем связать с сочетанием клавиш. Используя этот метод Вы могли выбрать окно так, чтобы он был повышен и сфокусировался и путем удара комбинации сочетания клавиш, пошлет заявление в другое окно. Статья названа: Переместите Windows Between Monitors.

Метод предоставляет следующий сценарий, windowmove.sh:

#!/bin/bash
if [ $1 -eq 2 ]
then
POS1=`xrandr --current | head -2 | tail -1 | cut -d 'x' -f1 | cut -d ' ' -f3`
POS2=0
else
POS1=0
POS2=0
fi
/usr/bin/xdotool windowmove `/usr/bin/xdotool getwindowfocus` $POS1 $POS2
exit 0

POS1 вычисляет ширину Вашего основного экрана при помощи вывода xrandr. Если Вы находите, что сценарий не может переместить право окон, но это может переместить их оставленный, затем попытаться заменить ту строку POS1=1920 и заменить 1920 шириной в пикселях Вашего основного монитора.

Затем выполните апплет Клавиатурных привязок:

$ gnome-keybinding-properties

Примечание: Это выполнимо от различных мест на различных дистрибутивах через GUI.

Создайте 2 привязки клавиш с помощью этих 2 запусков приложения:

  • привязка # 1's команда: ./Scripts/windowmove.sh 1
  • привязка # 2's команда: ./Scripts/windowmove.sh 2
2
27.01.2020, 21:28
  • 1
    Спасибо. Я должен смочь взломать вместе точно, что я хочу от этого. –  user31765 24.10.2013, 17:22

Нет необходимости в xdotool. Вы можете записать расположение всех окон, а затем восстановить их с помощью всего лишьwmctrl:

Запись:wmctrl -lG > ${rcfile}

Место:

while read row; do
  IFS=" " read id g x y w h _ <<< ${row}
  wmctrl -ir ${id} -e 0,${x},${y},${w},${h}
done < ${rcfile}
1
14.09.2020, 15:40

Теги

Похожие вопросы