Как я могу привязать ключ к циклу между рабочими пространствами?

Я использую 2 рабочих пространства прямо сейчас, и я хотел бы иметь возможность циклически переключаться между ними, используя один ярлык. На данный момент я могу сделать Ctrl + Alt + Right, чтобы переключиться на рабочую область 2, а Left переключится на 1, но я хочу, чтобы один ключ (или комбинация клавиш) переключился на рабочую область, в которой я не сейчас. Таким образом мне понадобится только этот ярлык, и мне не нужны два.

Я запускаю Ubuntu на старой машине, и это мешает мне включить компиляцию вообще. Я попытался написать сценарий, используя как wmctrl, так и xdotool, но не работаю должным образом (независимо от того, что я делаю, они оба переключаются только на рабочую область 1 и никогда не на 2).

Любые предложения ?

7
задан 5 October 2010 в 21:48

20 ответов

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

#!/bin/sh
total=$(wmctrl -d | wc -l)
current=$(wmctrl -d | sed -n 's/^\([0-9]\+\) *\*.*/\1/p')
if [ -z "$total" ] || [ -z "$current" ]; then
  echo 1>&2 "$0: Could not obtain workspace information!"
  exit 2
fi
target=$(($current+1))
if [ $target = $total ]; then
  target=0
fi
wmctrl -s $target
5
ответ дан 26 May 2018 в 01:13
  • 1
    В самом деле. Я фактически пытался использовать имя каждой рабочей области (D1 и D2) вместо своих чисел (0 и 1). Должно быть, читайте дальше по странице руководства. знак равно – Malabarba 6 October 2010 в 02:01
  • 2
    Хороший скрипт - он работает для любого количества рабочих областей. Хорошая вещь! ... как подключить этот скрипт до нажатия клавиши? – pbr 6 October 2010 в 04:57
  • 3
    Сохраните его в любом месте в виде текстового файла и отметьте его как исполняемый файл (chmod +x filename). Перейдите в раздел «Система - & gt; Предпочтения - & gt; Ярлыки клавиш ". В этом меню создайте новый ярлык, дайте ему какое угодно имя и укажите его на сохраненный файл. Например, если вы сохраните файл как «script.sh», в вашей домашней папке, что вам нужно написать в «Command " поле ввода: «/home/yourusername/script.sh" ;. – Malabarba 6 October 2010 в 10:40
  • 4
    Потрясающие. Спасибо, Брюс, за документирование оставшихся шагов по этому поводу. – pbr 14 October 2010 в 12:55
  • 5
    постскриптум Я придерживаюсь ввода исполняемых файлов в ~ / bin, поэтому я бы воспользовался ярлыком для этого местоположения. – pbr 14 October 2010 в 12:56

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

#!/bin/sh total=$(wmctrl -d | wc -l) current=$(wmctrl -d | sed -n 's/^\([0-9]\+\) *\*.*/\1/p') if [ -z "$total" ] || [ -z "$current" ]; then echo 1>&2 "$0: Could not obtain workspace information!" exit 2 fi target=$(($current+1)) if [ $target = $total ]; then target=0 fi wmctrl -s $target
5
ответ дан 25 July 2018 в 23:09

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

#!/bin/sh total=$(wmctrl -d | wc -l) current=$(wmctrl -d | sed -n 's/^\([0-9]\+\) *\*.*/\1/p') if [ -z "$total" ] || [ -z "$current" ]; then echo 1>&2 "$0: Could not obtain workspace information!" exit 2 fi target=$(($current+1)) if [ $target = $total ]; then target=0 fi wmctrl -s $target
5
ответ дан 27 July 2018 в 03:03

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

#!/bin/sh total=$(wmctrl -d | wc -l) current=$(wmctrl -d | sed -n 's/^\([0-9]\+\) *\*.*/\1/p') if [ -z "$total" ] || [ -z "$current" ]; then echo 1>&2 "$0: Could not obtain workspace information!" exit 2 fi target=$(($current+1)) if [ $target = $total ]; then target=0 fi wmctrl -s $target
5
ответ дан 31 July 2018 в 11:13

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 2 August 2018 в 04:29

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 4 August 2018 в 21:01

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 6 August 2018 в 04:33

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 7 August 2018 в 22:43

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 10 August 2018 в 10:48

Вот сценарий, который переключается на следующую рабочую область, обертывая назад к первому после последнего. Обратите внимание, что рабочие пространства нумеруются от 0, возможно, это то, что бросило вас, когда вы пытались написать скрипт.

  #! / Bin / sh total = $ (wmctrl -d | wc -l) current  = $ (wmctrl -d | sed -n 's / ^ \ ([0-9] \ + \) * \ *. * / \ 1 / p'), если [-z "$ total"] ||  [-z "$ current"];  затем echo 1 & amp; 2 "$ 0: не удалось получить информацию о рабочем пространстве!"  exit 2 fi target = $ (($ current + 1)), если [$ target = $ total];  то target = 0 fi wmctrl -s $ target  
5
ответ дан 13 August 2018 в 17:23
  • 1
    В самом деле. Я фактически пытался использовать имя каждой рабочей области (D1 и D2) вместо своих чисел (0 и 1). Должно быть, читайте дальше по странице руководства. знак равно – Malabarba 6 October 2010 в 02:01
  • 2
    Хороший скрипт - он работает для любого количества рабочих областей. Хорошая вещь! ... как подключить этот скрипт до нажатия клавиши? – pbr 6 October 2010 в 04:57
  • 3
    Сохраните его в любом месте в виде текстового файла и пометьте его как исполняемый файл ( chmod + x filename ). Перейдите в раздел «Система - & gt; Предпочтения - & gt; Ярлыки клавиш ". В этом меню создайте новый ярлык, дайте ему какое угодно имя и укажите его на сохраненный файл. Например, если вы сохраните файл как «script.sh», в вашей домашней папке, что вам нужно написать в «Command & quot; поле ввода: «/home/yourusername/script.sh" ;. – Malabarba 6 October 2010 в 10:40
  • 4
    Потрясающие. Спасибо, Брюс, за документирование оставшихся шагов по этому поводу. – pbr 14 October 2010 в 12:55
  • 5
    постскриптум Я придерживаюсь ввода исполняемых файлов в ~ / bin, поэтому я бы воспользовался ярлыком для этого местоположения. – pbr 14 October 2010 в 12:56

Я знаю, что это старо, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

wmctrl -s `wmctrl -d | awk '$2=="*"{cur=NR} END{print cur % NR}'`

Для нескольких видовых экранов:

[ f2]
2
ответ дан 26 May 2018 в 01:13

Я знаю, что это старо, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

wmctrl -s `wmctrl -d | awk '$2=="*"{cur=NR} END{print cur % NR}'`

Для нескольких видовых экранов:

wmctrl -o `wmctrl -d | awk '{gsub(/[^0-9]/," ",$0);x = ($4 + $6 + $8) % $2; if( x == 0 ) y = ($5 + $7 + $9) % $3; else y = $5; print x","y}'`
2
ответ дан 25 July 2018 в 23:09

Я знаю, что это старо, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

wmctrl -s `wmctrl -d | awk '$2=="*"{cur=NR} END{print cur % NR}'`

Для нескольких видовых экранов:

wmctrl -o `wmctrl -d | awk '{gsub(/[^0-9]/," ",$0);x = ($4 + $6 + $8) % $2; if( x == 0 ) y = ($5 + $7 + $9) % $3; else y = $5; print x","y}'`
2
ответ дан 27 July 2018 в 03:03

Я знаю, что это старо, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

wmctrl -s `wmctrl -d | awk '$2=="*"{cur=NR} END{print cur % NR}'`

Для нескольких видовых экранов:

wmctrl -o `wmctrl -d | awk '{gsub(/[^0-9]/," ",$0);x = ($4 + $6 + $8) % $2; if( x == 0 ) y = ($5 + $7 + $9) % $3; else y = $5; print x","y}'`
2
ответ дан 31 July 2018 в 11:13

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 2 August 2018 в 04:29

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 4 August 2018 в 21:01

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 6 August 2018 в 04:33

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 7 August 2018 в 22:43

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 10 August 2018 в 10:48

Я знаю, что это старый, но вот мои версии:

Для нескольких рабочих пространств (как в ответе Гилла):

  wmctrl -s `wmctrl -d |  awk '$ 2 == "*" {cur = NR} END {print cur% NR}' ` 

Для нескольких видовых экранов:

  wmctrl -o  `wmctrl -d |  awk '{gsub (/ [^ 0-9] /, "", $ 0); x = ($ 4 + $ 6 + $ 8)% $ 2;  if (x == 0) y = ($ 5 + $ 7 + $ 9)% $ 3;  else y = $ 5;  print x "," y} '` 
2
ответ дан 13 August 2018 в 17:23

Другие вопросы по тегам:

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