কিভাবে সমস্ত উইন্ডোজ অন্য ওয়ার্কস্পেসে স্থানান্তরিত করতে হয়


8

সমস্ত উইন্ডোজ (বা সমস্ত ছোট উইন্ডোজ নয়) অন্য একটি ওয়ার্কস্পেস তৈরি করে রাখা কি সম্ভব?

আমি জানি আমি সঙ্গে অন্যান্য কর্মক্ষেত্র এক জানালা স্থানান্তর করতে পারেন Shift+ + Ctrl+ + Alt+ + arrow, কিন্তু এটি শুধুমাত্র এক যে দৃষ্টি নিবদ্ধ করা উইন্ডো সরে যাবে।


আপনি কি এখনও Unক্য সমাধানে আগ্রহী?
জ্যাকব ভিলিজম 25'15

হ্যাঁ, আমি ityক্যের সমাধান চাইছিলাম। দুঃখিত, আমি ঠিক উল্লেখ করতে পারি নি যে আমি
ityক্য

আপনি কি এটি লক্ষ্য করেছেন? আমি চেষ্টা করিনি, জানি না এটি এখনও কাজ করে কিনা। যদি তা না হয় তবে আমি একটি শর্টকাট কী সংমিশ্রনের অধীনে একটি বিকল্প তৈরি করতে চাই।
জ্যাকব Vlijm

আহ, দুঃখিত, এটি একটি একক উইন্ডোর জন্য, এটি খতিয়ে দেখবে!
জ্যাকব Vlijm

এটিতে কাজ করে চলেছেন এবং একটি "ধরণের" ওয়ার্কিং স্ক্রিপ্ট রয়েছে। তবে এলোমেলোভাবে ঘটে যাওয়া সমস্যাগুলি এটিকে খুব কম ব্যবহারযোগ্য করে তোলে। আমি যদি এটির কারণ হয় তবে তা পোস্ট করব।
জ্যাকব ভিলিজ

উত্তর:


5

Ityক্য: ভিউপোর্ট কী কী?

উবুন্টু ইউনিটি ভিউপোর্টগুলি ব্যবহার করে - মূলত একটি সমন্বিত ব্যবস্থা (সহ 0,0 শীর্ষে বাম কোণে থাকে), যেখানে একটি স্ক্রিন রেজোলিউশনের সাথে খাপে বিভক্ত একটি বিশাল ডেস্কটপ ch আপনি ডান এবং নীচের দিকে যেতে চলাকালীন স্থানাঙ্কগুলি বর্ধমান হয়।

এখানে চিত্র বর্ণনা লিখুন

সমন্বয় ব্যবস্থাটি আপেক্ষিক। যদি আমার বর্তমান ভিউপোর্টটি উপরে বামে থাকে তবে সেই ভিউপোর্টের সাথে সম্পর্কিত সমস্ত কিছুই প্রস্থ এবং উচ্চতার বৃদ্ধিতে ইতিবাচক মান হবে। উদাহরণস্বরূপ, যদি আমার বর্তমান ভিউপোর্টটি বাম দিকের শীর্ষে থাকে তবে উপরের মিডল ওয়ার্কস্পেসের উপরে আপনি দেখতে পাবেন ফায়ারফক্স উইন্ডোটি শীর্ষ বামদিকের ভিউপোর্টের তুলনায় x মান 1366 এবং y মান 0 এ অবস্থিত। যদি আমার অ্যাক্টিভ ভিউপোর্টটি শীর্ষ মধ্যম এক হয় তবে উপরের বামদিকের ভিউপোর্টের টার্মিনাল উইন্ডোটি x মান -1327 60 এ অবস্থিত for এটি মূল বিষয়xdotool , কারণ , ণাত্মক xdotoolসংখ্যার সাথে কাজ করে না।

এও নোট করুন, আপনার বর্তমান ভিউপোর্টের উপরের বাম কোণটি সর্বদা xdotool দ্বারা 0 0 স্থানাঙ্ক হিসাবে ধরে নেওয়া হবে। এর অর্থ আমরা কেবল জিনিসগুলি ডান এবং নীচে সরাতে পারি।

Ityক্যের জন্য এক্সডটুল কাজ করা

এখন আমরা জানি যে xdotoolউইন্ডোটি কেবলমাত্র আমাদের উপরের-বাম কোণে সম্পর্কিত (যেমন, আপনি সর্বদা উইন্ডোটিকে নীচে এবং ডানদিকে সরানো যেতে পারেন, তবে কখনও উপরে এবং বামে রাখতে পারবেন না)। আমরা কীভাবে forক্যের জন্য সেই কাজটি করব। ওয়েল, বেসিক ধারণা হবে

  1. বর্তমান ভিউপোর্টের সমস্ত উইন্ডোটি বের করুন
  2. উপরের বাম কোণে সেই ভিউপোর্টে 0 0 স্থানাঙ্ক ধরে নিতে একটি অনুরোধ করা ভিউপোর্টে মুহুর্তে সরান
  3. সমস্ত উইন্ডোটিকে ব্যবহারকারী-সংজ্ঞায়িত ভিউপোর্ট স্থানাঙ্কগুলিতে সরান
  4. পুরানো ভিউপোর্টে ফিরে যান (optionচ্ছিক, উইন্ডোগুলিও অনুসরণ করতে পারে)

স্ক্রিপ্টিং সমাধান

নীচের স্ক্রিপ্ট উপরে বর্ণিত পদ্ধতিটি ঠিক সম্পাদন করে। -vম্যানুয়ালি স্থানাঙ্ক নির্দিষ্ট করতে একে পতাকা সহ বলা যেতে পারে বা আপনি -gজিইউআই ডায়ালগ আনতে পতাকা ব্যবহার করতে পারেন । -fপতাকাটি স্ক্রিপ্টকে ভিউপোর্টও স্যুইচ করতে বলবে; যদি সেই পতাকাটি ব্যবহার না করা হয় - আপনি বর্তমান ভিউপোর্টে রয়ে যাবেন এবং কেবল উইন্ডোজই প্রায় সরানো হবে

লিপি প্রাপ্তি

নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে কেউ সরাসরি এই পোস্ট থেকে উত্স কোডটি অনুলিপি করতে পারেন:

  1. sudo apt-get install git
  2. cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
  3. sudo chmod -R +x sergrep

স্ক্রিপ্ট ফাইল হবে /opt/sergrep/move_viewport_windows.sh

স্ক্রিপ্টকে শর্টকাটে আবদ্ধ করতে, আমি কীভাবে কীবোর্ডের সংমিশ্রণে .sh ফাইলগুলি সংযুক্ত করব?

নোট করুন wmctrlএবং xdotoolএই স্ক্রিপ্টটি সঠিকভাবে কাজ করার জন্য প্রয়োজনীয়। আপনি এগুলি sudo apt-get xdotool এবং wmctrl এর মাধ্যমে ইনস্টল করতে পারেন

সোর্স কোড

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: April 17 2016
# Purpose: Move all windows on the current viewport
#          to a user-defined one
# Written for:
# Tested on: Ubuntu 14.04 LTS , Unity 7.2.6
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

get_active_viewport()
{
  xprop -root -notype _NET_DESKTOP_VIEWPORT
}

get_screen_geometry()
{
 xwininfo -root | awk '/-geometry/{gsub(/+|x/," ");print $2,$3}'  
}

current_wins()
{  
   HEX="$(wmctrl -lG | \
   awk -v xlim="$XMAX" -v ylim="$YMAX" \
      'BEGIN{printf "ibase=16;"} $3>0 && $3<xlim  && $4>0 && $4<ylim \
      { gsub(/0x/,""); printf "%s;",toupper($1)  } ')"
   echo $HEX | bc | tr '\n' ' '
}

gui_selection()
{
  SCHEMA="org.compiz.core:/org/compiz/profiles/unity/plugins/core/"
  read swidth sdepth  <<< "$(get_screen_geometry)"
  vwidth=$(gsettings get $SCHEMA hsize)
  vheight=$(gsettings get $SCHEMA vsize)

 width=0
 for horizontal in $(seq 1 $vwidth); do
    height=0 
    for vertical in $(seq 1 $vheight);  do

      array+=( FALSE  )
      array+=( $(echo "$width"x"$height") )

    height=$(($height+$sdepth))
    done
 width=$(($width+$swidth))
 done

 zenity --list --radiolist --column="" --column "CHOICE" ${array[@]} --width 350 --height 350 2> /dev/null
}

print_usage()
{
cat << EOF
move_viewport_windows.sh [-v 'XPOS YPOS' ] [-g] [-f ] [-h]

Copyright Serg Kolo , 2016

The script gets list of all windows on the current Unity 
viewport and moves them to user-specified viewport. If
ran without flags specified, script prints this text

-g flag brings up GUI dialog with list of viewports

-v allows manually specifying viewoport. Argument must be
   quoted, X and Y position space separated

-f if set, the viewport will switch to the same one where
   windows were sent

-h prints this text

** NOTE ** 
wmctrl and xdotool are required for this script to work
properly. You can install them via sudo apt-get install
xdotool and wmctrl

EOF
}

parse_args()
{
  if [ $# -eq 0  ];then
    print_usage
    exit
  fi
  while getopts "v:ghf" opt
 do
   case ${opt} in
     v) NEWVP=${OPTARG}
        ;;
     g) NEWVP="$(gui_selection | tr 'x' ' ' )"
        [ -z "$NEWVP" ] && exit 1
        ;;
     f) FOLLOW=true
        ;; 
     h) print_usage
        exit 0
        ;;
     \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
    esac
  done
  shift $((OPTIND-1))
}

main()
{
 # Basic idea:
 #-------------------
 # 1. get current viewport and list of windows
 # 2. go to viewport 0 0 and move all windows from list
 #    to desired viewport
 # 3. go back to original viewport or follow the windows,
 #    depending on user choice
 # 4. Tell the user where they are currently

 local FOLLOW
 local NEWVP # coordinates of desired viewport
 local XMAX YMAX # must be two vals for awk to work
 local OLDVP=$(get_active_viewport | awk -F '=' '{sub(/,/," ");print $2}' )

 parse_args "$@"

 read XMAX YMAX  <<< "$(get_screen_geometry)" # move to getopts

 windows=( $(current_wins) )

 xdotool set_desktop_viewport 0 0 
 for win in ${windows[@]} ; do
    echo "$win"
    xdotool windowmove $win $NEWVP
 done
 # sleep 0.25 # uncomment if necessary

 if [ $FOLLOW  ]; then
     xdotool set_desktop_viewport $NEWVP
 else
     xdotool set_desktop_viewport $OLDVP
 fi

 sleep 0.25 # delay to allow catching active viewport
 notify-send "current viewport is $(get_active_viewport | awk -F '=' '{sub(/,/," ");print $2}' )"
 exit 0
}
main "$@"

ডেমো

স্ক্রিপ্টটির ওয়েবম রেকর্ডিং কার্যত:

https://www.youtube.com/watch?v=cJMlC41CWWo

সমস্যা

ইউনিটির gridপ্লাগইনের কারণে যা উইন্ডো স্নাপিংয়ের জন্য দায়ী, স্ক্রিপ্টটি সর্বাধিক বা ডান / বাম স্ন্যাপযুক্ত উইন্ডোগুলিকে সরাতে পারে না। সমস্ত উইন্ডো দিয়ে স্ক্রিপ্টটি কাজ করার জন্য সেই প্লাগইনটির ক্ষণস্থায়ী আনসেট এবং রিসেট যুক্ত করার চেষ্টা করা হবে, তবে সেট না করা এবং পুনরায় সেট করার ক্ষেত্রে একটি বিলম্ব রয়েছে বলে এটি ধারণা হিসাবে ত্যাগ করা যেতে পারে। আপনি যদি স্ক্রিপ্টটি সমস্ত উইন্ডো দিয়ে কাজ করতে চান তবে unity-tweak-toolউইন্ডো ম্যানেজার বিকল্পগুলির অধীনে উইন্ডো স্ন্যাপিং ইনস্টল এবং আনসেট করুন।


আশ্চর্যজনক কিভাবে এই মত একটি ডেডিকেটেড উত্তর শুধুমাত্র 2-3 upvotes পায় ...
সম্পর্কে ছিমছাম বাদামে পূর্ণ

3

নন-কম্পিজ ভিত্তিক ডেস্কটপ পরিবেশ (এক্সএফসিই, এলএক্সডিইডি, জিনোম, কেডিএ ...)

আপনি এর সমন্বয় wmctrlএবং এটি ব্যবহার করতে পারেন xdotool। প্রথমে নিশ্চিত হয়ে নিন যে এই দুটি ইউটিলিটি ইনস্টল করা আছে:

sudo apt-get install xdotool wmctrl

নির্ভরতা সন্তুষ্ট হয়ে আপনি বর্তমান ডেস্কটপের সমস্ত উইন্ডো অন্য একটিতে সরিয়ে নিতে নিম্নলিখিত ওয়ান-লাইনারটি ব্যবহার করতে সক্ষম হবেন:

while read i; do wmctrl -i -t 2 -r "$i"  ; done  < <(wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' '  -f1)

ব্যবহৃত কমান্ডগুলির দ্রুত ভাঙ্গন:

  • wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1

    সমস্ত উইন্ডো তালিকাবদ্ধ করুন, বর্তমান কর্মক্ষেত্রে নেই এমনগুলি ফিল্টার করুন এবং তাদের উইন্ডো আইডিটি বের করুন

  • wmctrl -i -t 2 -r "$i"

    উইন্ডো আইডি সহ উইন্ডোটিকে $iকর্মক্ষেত্র 2 এ সরান ।

  • এই while read ... do; doneসমস্তগুলি একটি সাধারণ লুপে প্যাক করা হয়েছে যা বর্তমান ডেস্কটপের সমস্ত উইন্ডোতে পুনরাবৃত্তি করে

কমিজ-ভিত্তিক ডেস্কটপ পরিবেশ (যেমন ইউনিটি)

ইউনিটির মতো ডেস্কটপ পরিবেশের জন্য সমাধান সন্ধান করা এই বিষয়টিকে জটিল করে তুলেছে যে কমিজ (ityক্যের উইন্ডো ম্যানেজার) একটি traditionalতিহ্যগত অর্থে ডেস্কটপ ব্যবহার করে না


ধন্যবাদ, ভাল লাগছে। তবে আমি ityক্য ব্যবহার করছি এবং কিছু সহজ সমাধানের জন্য আশা করছিলাম। তবে যেমনটি আপনি উল্লেখ করেছেন, for
ক্যের জন্য সমাধানটি

"উইন্ডো আইডি দিয়ে উইন্ডোটি সরান works i ওয়ার্কস্পেস 2" - এ কেবল একটি ছোট্ট মন্তব্য, ওয়ার্কস্পেস 2 " প্রথমটি শূন্য দিয়ে শুরু হওয়ার সাথে সাথে দ্বিতীয়টি নয় আসলে তৃতীয় কর্মক্ষেত্র। সুতরাং আপনার যদি মাত্র দুটি ওয়ার্কস্পেস থাকে তবে স্ক্রিপ্টটি কাজ না করে দেখায়।
মোহামাদ ফকিহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.