আমি যদি প্রয়োজন হয় তবে আমি কীভাবে স্বয়ংক্রিয়ভাবে ওয়ার্কস্পেস যুক্ত করতে পারি?


16

ধরুন আমি ৪ টি ওয়ার্কস্পেস ব্যবহার করছি এবং ঘটনাক্রমে আমার আরও বেশি প্রয়োজন আছে, কোনও স্বয়ংক্রিয় প্রক্রিয়া আছে কি না যদি অসম্ভব হয় তবে ঘটনাক্রমে আরও বেশি ওয়ার্কস্পেস যুক্ত করার সহজ উপায় (ইনস্টল করার পরিবর্তে Ubuntu tweakইত্যাদি ইত্যাদি)।



@ জ্যাকবভিলিজম ইমগুর. com/ ল্যাডওয়াইজিজিবি উত্সাহিত এবং স্বীকৃত, সত্যিই দুর্দান্ত উত্তরের জন্য ধন্যবাদ
কর্নেল_প্যানিক

সম্পর্কিত: এই পুরানো পোস্টটি "কীভাবে স্বয়ংক্রিয়ভাবে আরও বেশি ওয়ার্কস্পেস তৈরি করা / অপসারণ করা যায়" তে জিজ্ঞাসা করেছিল? দুটি পৃথক উত্তর সহ। তারপরে আবার, পুরানো উত্তরগুলি এখানে নতুন উত্তরগুলির সাথে তুলনা করার সময় কম সন্তুষ্ট।
ক্লিয়ারকিমুরা

উত্তর:


14

স্বয়ংক্রিয়ভাবে ওয়ার্কস্পেসের সংখ্যা নির্ধারণ করুন; আপনার প্রয়োজনের উপর নির্ভর করে কলাম এবং সারিগুলি যুক্ত করুন এবং সরান

একটি (এর) ব্যাকআউন্ড স্ক্রিপ্টের একটি সংস্করণের নীচে যা যদি আপনি আপনার কর্মপরিসর-ম্যাট্রিক্সের শেষ কলাম বা সারিটিতে প্রবেশ করেন তবে স্বয়ংক্রিয়ভাবে ওয়ার্কস্পেস যুক্ত হবে।

এটা এভাবে কাজ করে:

  1. আপনি যদি শেষ কলাম বা সারিটিতে পৌঁছান, অতিরিক্ত ভিউপোর্টগুলি যুক্ত করা হয়:

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

  2. যদি আপনার কর্মক্ষেত্রগুলি 5-10 সেকেন্ডের জন্য অব্যবহৃত থাকে এবং এতে কোনও উইন্ডো না থাকে, অতিরিক্ত কর্মক্ষেত্রগুলি আবার সরানো হবে। তবে আপনি সর্বদা নীচে একটি অতিরিক্ত সারি রাখবেন এবং আপনার বর্তমান ভিউপোর্টের ডানদিকে একটি অতিরিক্ত কলাম রাখবেন:

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

এই পান্ডুলিপি:

#!/usr/bin/env python3
import subprocess
import time
import math

# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10

def set_workspaces(size, axis):
    subprocess.Popen([
        "dconf", "write", "/org/compiz/profiles/unity/plugins/core/"+axis,
                str(size)
                ])

def get_res():
    resdata = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    curr = resdata.index("current")
    return (int(resdata[curr+1]), int(resdata[curr+3].replace(",", "")))

def wspace():
    try:
        sp = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
        return ([int(n) for n in sp[3].split("x")],
                [int(n) for n in sp[5].split(",")])

    except subprocess.CalledProcessError:
        pass


def clean_up(curr_col, curr_row):
    try:
        w_list = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        xpos = max([math.ceil((int(w[2])+span[1][0])/res[0]) for w in w_list])
        min_x = max(xpos, curr_col+1, hsize)
        if xpos >= hsize:
            set_workspaces(min_x, "hsize")
        else:
            set_workspaces(min_x, "hsize")
        ypos = max([math.ceil((int(w[3])+span[1][1])/res[1]) for w in w_list])
        min_y = max(ypos, curr_row+1, vsize)
        if ypos >= vsize:
            set_workspaces(min_y, "vsize")
        else:
            set_workspaces(min_y, "vsize")
    except subprocess.CalledProcessError:
        pass

res = get_res()
t = 0

while True:
    span = wspace()
    if span != None:
        cols = int(span[0][0]/res[0]); rows = int(span[0][1]/res[1])
        currcol = int((span[1][0]+res[0])/res[0])
        if all([currcol == cols, cols*rows < max_ws]):
            set_workspaces(cols+1, "hsize")
        currrow = int((span[1][1]+res[1])/res[1])
        if all([currrow == rows, cols*rows < max_ws]):
            set_workspaces(rows+1, "vsize")
        if t == 10:
            clean_up(currcol, currrow)
            t = 0
        else:
            t = t+1
        time.sleep(1)

কিভাবে ব্যবহার করে

  1. নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন add_space.py
  2. স্ক্রিপ্টের শিরোনাম বিভাগে, আপনি যদি অন্যান্য সেটিংস পছন্দ করেন তবে লাইনগুলি সম্পাদনা করুন (সর্বাধিক ওয়ার্কস্পেসের সংখ্যা, ডিফল্ট ম্যাট্রিক্স যেমন 2x2):

    # --- set default workspaces below (horizontally, vertically)
    hsize = 2
    vsize = 2
    # --- set the maximum number of workspaces below
    max_ws = 10
    
  3. কমান্ড দ্বারা এটি পরীক্ষা করুন:

    python3 /path/to/add_space.py
    
  4. যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে আপনার প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে যুক্ত করুন: ড্যাশ> স্টার্টআপ অ্যাপ্লিকেশন> কমান্ডটি যুক্ত করুন:

    /bin/bash -c "sleep 15 &&  python3 /path/to/add_space.py`
    

বিঃদ্রঃ

সর্বদা হিসাবে, স্ক্রিপ্টটি অত্যন্ত "রসে কম", এবং আপনার প্রসেসরে কোনও লক্ষণীয় বোঝা যুক্ত করে না।

ব্যাখ্যা

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

প্রয়োজনীয় কর্মক্ষেত্র (উদাহরণ কলাম) গণনা কিভাবে

wmctrl -dদেখায় এর ফলাফল :

0  * DG: 3360x2100  VP: 1680,1050  WA: 65,24 1615x1026  N/A

আউটপুটে, VP: 1680,1050আমাদের কোথায় স্প্যানিং ওয়ার্কস্পেসে রয়েছে তা (সমস্ত ভিউপোর্টের ম্যাট্রিক্স) তথ্য দেয়। এই তথ্যটি কেবলমাত্র তখনই কার্যকর যদি আমাদের কাছেও পর্দার রেজোলিউশন থাকে, যেমন উদাহরণস্বরূপ 1680দুটি প্রস্থ (সম্ভাব্য, তবে এখনও) বা এক বারের স্ক্রিন হতে পারে।
ভাগ্যক্রমে, আমরা কমান্ড থেকে পর্দার রেজোলিউশন পার্স করতে পারি xrandr

তারপরে যদি আমরা জানতে পারি যে স্ক্রিনটির এক্স-আকারটি রয়েছে 1680এবং আমরা বর্তমানে চলছে VP: 1680,1050, আমরা জানি যে আমরা ওয়ার্কস্পেসের ম্যাট্রিক্সের দ্বিতীয় কলামে আছি । যেহেতু আমরা মোট ম্যাট্রিক্সের আকারও জানি ( DG: 3360x2100এটিও আউটপুট থেকে wmctrl -d), তাই আমরা জানি বর্তমান ম্যাট্রিক্সে দুটি কলাম (3360/1680) অন্তর্ভুক্ত রয়েছে এবং আমরা "শেষ" একটিতে আছি।

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

স্ক্রিপ্টটি কমান্ডের মাধ্যমে ম্যাট্রিক্সে একটি কলাম যুক্ত করার জন্য একটি নির্দেশ পাঠাবে:

dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>

এটাই নীতি।

কর্মক্ষেত্রগুলি সরানোর জন্য কীভাবে গণনা করবেন (উদাহরণস্বরূপ কলাম)

প্রতি 10 সেকেন্ডে একবার, স্ক্রিপ্টটি বর্তমানে খোলা সমস্ত উইন্ডো তালিকা সহ কমান্ডটি চালায়:

wmctrl -lG

এটি আমাদের উইন্ডোটির অবস্থান সম্পর্কিত তথ্য দেয় যেমন:

0x04604837  0 3425 24   1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit

আউটপুটে, 3425উইন্ডোটির এক্স-অবস্থান। এই চিত্রটি যদিও বর্তমান ওয়ার্কস্পেসের সাথে সম্পর্কিত (বাম দিক)। ওয়ার্কস্পেস-ম্যাট্রিক্সে উইন্ডোটির (এক্স-ওয়াইজ) পরম অবস্থানটি জানতে, আমাদের বর্তমান ভিউপোর্ট তথ্যের প্রথম সংখ্যা (যেমন VP: 1680,1050, আউটপুট থেকে wmctrl -d) যুক্ত করতে হবে।
যাইহোক, সরলতার কারণে ধরে নেওয়া যাক আমরা ভিউপোর্ট 1,1(টপলফিট ভিউপোর্ট) এ রয়েছি, সুতরাং উইন্ডোটির আপেক্ষিক অবস্থানটি তার পরম অবস্থানের সমান

যেহেতু পর্দার রেজোলিউশনটি রয়েছে 1680, আমরা জানি উইন্ডোটি কলামে রয়েছে 3425/1680, বৃত্তাকার হয়ে গেছে, কারণ এর মধ্যে সমস্ত কিছুই 3360 and 5040ম্যাট্রিক্সের একই কলামে রয়েছে (রেজোলিউশনের 3 থেকে 4 বারের মধ্যে)। সঠিক গণনার জন্য আমরা ব্যবহার করি math.ceil()( python)

যেহেতু স্ক্রিপ্ট এছাড়াও নিয়ম অনুশীলন সবসময় সঠিক একটি অতিরিক্ত কর্মপরিসর আছে / নীচের আমরা কলামের সংখ্যা সেট করতে হবে সর্বোচ্চ মান:

  • বর্তমান কর্মক্ষেত্র কলাম +1
  • গত এটিতে একটি উইন্ডো সঙ্গে কলাম
  • স্ক্রিপ্টের মাথায় সেট করা কলামগুলির ডিফল্ট সংখ্যা

এবং তাই স্ক্রিপ্ট :)

সারিগুলি ঠিক একই পদ্ধতিতে পরিচালিত হয়।


1
বাহ, দুর্দান্ত উত্তর, ইতিমধ্যে upvated =)
এবি

@ এএফ ধন্যবাদ! :) এই ধরণের জিনিস আমি করতে পছন্দ করি :)
জ্যাকব ভিলিজ

2
@ কার্নেল_প্যানিক ওয়াও, ধন্যবাদ :) আমি আসলে এটির মতো পিপিএ তৈরির কথা ভাবছি: Askubuntu.com/a/608295/72216, এবং এটি: জিজ্ঞাসুবন্টু.com/a/560734/72216, শেষ পর্যন্ত (ভবিষ্যতে) তিনটিই একটি "ওয়ার্কস্পেস_টুলস" অ্যাপ্লিকেশনটিতে মার্জ করা হচ্ছে যেখানে সেগুলি বিকল্প হিসাবে বা সে জাতীয় কিছু হিসাবে সেট করা যেতে পারে :)।
জ্যাকব Vlijm

1
@ জ্যাকবভিজিম আমি ব্রেভিটিজনিত কারণে পুরানো উত্তরটি এখান থেকে মুছে ফেলব: আগ্রহীদের জন্য এটি সম্পাদনার ইতিহাসে এখনও দৃশ্যমান হবে ...
ফ্যাবি

1
আপনাকে স্বাগতম ... আপনার চ্যাট রুম এবং টক্স থেকে প্রায়শই ড্রপ করা উচিত! : পি
ফ্যাবি

6

প্রযুক্তিগতভাবে, কর্মক্ষেত্রগুলি পুনরায় আকার দেওয়ার জন্য কোনও শর্টকাট নেই তবে আপনি সাধারণ স্ক্রিপ্টটি বেলো ব্যবহার করতে পারেন এবং এটি একটি শর্টকাটে আবদ্ধ করতে পারেন।

  1. স্ক্রিপ্টটি নিচু করে নিন, এটি .local/share/applicationsফোল্ডারে বা যেখানে আপনি পছন্দ করুন সেখানে সংরক্ষণ করুন ।
  2. স্ক্রিপ্টটি কার্যকর হয়ে গেছে কিনা তা নিশ্চিত করুন chmod 755 /path/to/script
  3. এটি সিস্টেম সেটিংস -> কীবোর্ড -> শর্টকাটগুলি -> কাস্টম শর্টকাটগুলিতে একটি শর্টকাটে বাঁধুন

উদাহরণস্বরূপ, আমার এই সেটআপটি রয়েছে:

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

স্ক্রিপ্টটি আবদ্ধ ShiftCtrlAltI। কিন্তু CtrlAltIকাজ করতে পারে। আমি স্ক্রিপ্টের পুরো পথ দিই, যা

/home/xieerqi/resize-workspaces.sh

এটি এখানে দেখতে কেমন হবে তা এখানে:

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

লিপি

#!/bin/bash
# Author : Serg Kolo
# Date: Sept 19, 2015
# Purpose: simple script to resize 
# unity workspaces
# Written for: http://askubuntu.com/q/676046/295286

HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
NEWSIZE=$(zenity --entry --text="Current desktop set-up $HEIGHT x $WIDTH. Enter new setup in HEIGHTxWIDTH format"  --width=250 | tr 'x' ' ' )

ARRAY=( $NEWSIZE )
[ -z ${ARRAY[1]}  ] && exit
    gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize ${ARRAY[0]}
    gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize ${ARRAY[1]}

ব্যবহারের জন্য খুব সহজ, সেটআপ করা খুব সহজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.