কীভাবে বর্তমান স্ক্রিনটি (বা উইন্ডো) হাইলাইট করবেন?


11

আমি কর্মক্ষেত্রে দুটি স্ক্রিন সেটআপ ব্যবহার করছি এবং এটি সাধারণত এটির ব্যথার চেয়ে আরও বেশি সহায়তা করে, এতে আমার কিছু সমস্যা রয়েছে।

এর মধ্যে একটি হ'ল পিছনের ফোকাস নিয়ে সমস্যা - কখনও কখনও আমি ভুল স্ক্রিনে টাইপ করতে ভুল করি (ফোকাসটি আমার কার্সারটিকে অনুসরণ করছে, তবে আপনি যখন কোনও ভিড়ের মধ্যে কাজ করেন তখন অন্য স্ক্রিনে কার্সার রয়েছে তা লক্ষ্য করা সহজ নয়))। এটি খুব বিরক্তিকর হয় যখন টাইপ করার পরিবর্তে আমি প্রচুর ক্রিয়াকলাপ সৃষ্টি করি (থান্ডারবার্ডে এক-কী-শর্টকাট)।

অ্যাক্টিভ স্ক্রিন বা উইন্ডোকে আরও ভালভাবে হাইলাইট করার কোনও উপায় আছে (উদাহরণস্বরূপ সহজেই দৃশ্যমান সীমানা ব্যবহার করা - এমনকি সর্বোচ্চ উইন্ডোগুলির জন্যও)?

সম্পাদনা করুন:

আমি মনে করি উইন্ডো ফোকাস পেলে দুর্দান্ত সমাধানটি এক ধরণের সংক্ষিপ্ত অ্যানিমেশন হবে।


কোন ডিই? জিনোম-শেল আপনি ব্যবহার করতে পারেন extensions.gnome.org/extension/891/windows-blur-effects
Rmano

1
@ সাইমন ityক্য ট্যাগটি ট্যাগ করুন:
জ্যাকব ভিলিজ

1
@ জ্যাকবভিলিজম উফ --- সত্য মন্তব্যটি রাখবেন,
গুগল করা

উত্তর:


13

ফোকাসযুক্ত স্ক্রিনটি হাইলাইট করুন (বা ফোকাস পরিবর্তনে গা dim় ফ্ল্যাশ, আরও নীচে EDIT দেখুন)

পাশাপাশি-দ্বৈত মনিটর সেটআপে (বাম-ডান), নীচের স্ক্রিপ্টটি ফোকাসযুক্ত উইন্ডোটি দিয়ে মনিটরের উজ্জ্বলতাটিকে "স্বাভাবিক" (100%) তে সেট করবে, অন্য একটিটি 60০% করে দেওয়া হবে।

যদি ফোকাস পরিবর্তন হয় তবে উজ্জ্বলতা ফোকাসটি অনুসরণ করবে:

ডান স্ক্রিনে (একটি উইন্ডো) ফোকাস করুন এখানে চিত্র বর্ণনা লিখুন

বাম স্ক্রিনে (একটি উইন্ডো) ফোকাস করুন এখানে চিত্র বর্ণনা লিখুন

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

#!/usr/bin/env python3
"""
In a side-by-side dual monitor setup (left-right), the script below will set
the brightness of the monitor with the focussed window to "normal" (100%),
while other one is dimmed to 60%. If the focus changes, the brightness will
follow the focus
"""
import subprocess
import time

def get_wposition():
    # get the position of the currently frontmost window
    try:
        w_data = subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()
        frontmost = subprocess.check_output(["xprop", "-root", "_NET_ACTIVE_WINDOW"]).decode("utf-8").split()[-1].strip()
        z = 10-len(frontmost); frontmost = frontmost[:2]+z*"0"+frontmost[2:]
        return [int(l.split()[2]) for l in w_data if frontmost in l][0]
    except subprocess.CalledProcessError:
        pass

def get_onscreen():
    # get the size of the desktop, the names of both screens and the x-resolution of the left screen
    resdata = subprocess.check_output(["xrandr"]).decode("utf-8")
    if resdata.count(" connected") == 2:
        resdata = resdata.splitlines()
        r = resdata[0].split(); span = int(r[r.index("current")+1])
        screens = [l for l in resdata if " connected" in l]
        lr = [[(l.split()[0], int([s.split("x")[0] for s in l.split() if "+0+0" in s][0])) for l in screens if "+0+0" in l][0],
               [l.split()[0] for l in screens if not "+0+0" in l][0]]
        return [span, lr]
    else:
        print("no second screen seems to be connected")

def scr_position(span, limit, pos):
    # determine if the frontmost window is on the left- or right screen
    if limit < pos < span:
        return [right_scr, left_scr]
    else:
        return [left_scr, right_scr]

def highlight(scr1, scr2):
    # highlight the "active" window, dim the other one
    action1 = "xrandr", "--output", scr1, "--brightness", "1.0"
    action2 = "xrandr", "--output", scr2, "--brightness", "0.6"
    for action in [action1, action2]:
        subprocess.Popen(action)

# determine the screen setup
screendata = get_onscreen()
left_scr = screendata[1][0][0]; right_scr = screendata[1][1]
limit = screendata[1][0][1]; span = screendata[0]

# set initial highlight
oncurrent1 = scr_position(span, limit, get_wposition())
highlight(oncurrent1[0], oncurrent1[1])

while True:
    time.sleep(0.5)
    pos = get_wposition()
    # bypass possible incidental failures of the wmctrl command
    if pos != None:
        oncurrent2 = scr_position(span, limit, pos)
        # only set highlight if there is a change in active window
        if oncurrent2 != oncurrent1:
            highlight(oncurrent1[1], oncurrent1[0])
        oncurrent1 = oncurrent2

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

  1. স্ক্রিপ্টটির প্রয়োজন wmctrl:

    sudo apt-get install wmctrl
  2. একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এটি সংরক্ষণ করুন highlight_focus.py

  3. কমান্ড দ্বারা এটি পরীক্ষা করুন:

    python3 /path/to/highlight_focus.py

    দ্বিতীয় মনিটর সংযুক্ত হওয়ার সাথে সাথে , স্ক্রিপ্টটি প্রত্যাশার মতো কাজ করে কিনা পরীক্ষা করুন।

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

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

মন্তব্য

  • সম্পদের উপর স্ক্রিপ্টটি অত্যন্ত কম। "জ্বালানী বাঁচাতে", স্ক্রিন সেটআপ; রেজোলিউশন, স্প্যান সাইজ ইত্যাদি স্ক্রিপ্ট শুরুর সময় একবারই পঠিত হয় (লুপের অন্তর্ভুক্ত নয়)। এর থেকে বোঝা যায় যে আপনি দ্বিতীয় মনিটরের সাথে সংযোগ / সংযোগ বিচ্ছিন্ন হলে আপনাকে স্ক্রিপ্টটি পুনরায় চালু করতে হবে।

  • আপনি যদি এটি স্টার্টআপ অ্যাপ্লিকেশনগুলিতে যুক্ত করেন তবে এর অর্থ মনিটর কনফিগারেশনের পরিবর্তনের পরে আপনাকে লগ আউট / আউট করতে হবে।

  • যদি আপনি ডিমেড স্ক্রিনের জন্য আরও একটি উজ্জ্বলতা শতাংশ পছন্দ করেন তবে লাইনের মানটি পরিবর্তন করুন:

    action2 = "xrandr", "--output", scr2, "--brightness", "0.6"

মানটি 0,0(কালো পর্দা) এবং 1.0(100%) এর মধ্যে হতে পারে ।

ব্যাখ্যা

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

স্ক্রিপ্ট শুরু করার সময় এটি নির্ধারণ করে:

  • উভয় পর্দার বিস্তৃত রেজোলিউশন
  • বাম পর্দার এক্স-রেজোলিউশন
  • উভয় পর্দার নাম

তারপরে, একটি লুপে (একবারে প্রতি সেকেন্ডে), এটি:

  • কমান্ডগুলি সহ সক্রিয় উইন্ডোর অবস্থান পরীক্ষা করে:

    • wmctrl -lG (উইন্ডোগুলির তালিকা এবং তাদের অবস্থানগুলি পেতে)
    • xprop -root _NET_ACTIVE_WINDOW (সামনেরতম উইন্ডোর আইডি পেতে)

যদি উইন্ডোটির (x-) অবস্থানটি বেশি হয় তবে বাম স্ক্রিনের এক্স-রেজোলিউশন, উইন্ডোটি দৃশ্যত ডান স্ক্রিনে থাকবে, যদি না এটি বড় হয় তবে দুটি স্ক্রিনের প্রশস্ত আকার (তারপরে এটি ওয়ার্কস্পেসে থাকবে) অধিকার). অতএব:

if limit < pos < span:

উইন্ডোটি ডান স্ক্রিনে রয়েছে কিনা তা নির্ধারণ করে (যেখানে limitবাম স্ক্রিনের এক্স-রেজো রয়েছে, posএটি উইন্ডোর এক্স-অবস্থান এবং spanউভয় পর্দার সম্মিলিত এক্স-রেস)।

তাহলে সেখানে (বাম পর্দা বা ডান পর্দায়) frontmost উইন্ডোর অবস্থান পরিবর্তন হয়, স্ক্রিপ্টের সাথে উভয় পর্দা উজ্জ্বলতা সেট করে xrandrকমান্ড প্রয়োগ করুন:

xrandr --output <screen_name> --brightness <value>

সম্পাদনা

স্থায়ী ম্লান "অপ্রকাশিত" স্ক্রিনের পরিবর্তে ফোকাসযুক্ত স্ক্রিনটি ধীরে ধীরে ফ্ল্যাশ করুন

একটি মন্তব্যে এবং আড্ডায় অনুরোধ করা হয়েছে, স্ক্রিপ্টের এমন একটি সংস্করণের নীচে যা পরিবর্তে নতুন ফোকাস করা স্ক্রিনটিতে একটি স্বল্প আবছা ফ্ল্যাশ দেয়:

#!/usr/bin/env python3
"""
In a side-by-side dual monitor setup (left-right), the script below will give
a short dim- flash on the newly focussed screen if the focussed screen changes
"""

import subprocess
import time

def get_wposition():
    # get the position of the currently frontmost window
    try:
        w_data = subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()
        frontmost = subprocess.check_output(["xprop", "-root", "_NET_ACTIVE_WINDOW"]).decode("utf-8").split()[-1].strip()
        z = 10-len(frontmost); frontmost = frontmost[:2]+z*"0"+frontmost[2:]
        return [int(l.split()[2]) for l in w_data if frontmost in l][0]
    except subprocess.CalledProcessError:
        pass

def get_onscreen():
    # get the size of the desktop, the names of both screens and the x-resolution of the left screen
    resdata = subprocess.check_output(["xrandr"]).decode("utf-8")
    if resdata.count(" connected") == 2:
        resdata = resdata.splitlines()
        r = resdata[0].split(); span = int(r[r.index("current")+1])
        screens = [l for l in resdata if " connected" in l]
        lr = [[(l.split()[0], int([s.split("x")[0] for s in l.split() if "+0+0" in s][0])) for l in screens if "+0+0" in l][0],
               [l.split()[0] for l in screens if not "+0+0" in l][0]]
        return [span, lr]
    else:
        print("no second screen seems to be connected")

def scr_position(span, limit, pos):
    # determine if the frontmost window is on the left- or right screen
    if limit < pos < span:
        return [right_scr, left_scr]
    else:
        return [left_scr, right_scr]

def highlight(scr1):
    # highlight the "active" window, dim the other one
    subprocess.Popen([ "xrandr", "--output", scr1, "--brightness", "0.3"])
    time.sleep(0.1)
    subprocess.Popen([ "xrandr", "--output", scr1, "--brightness", "1.0"])

# determine the screen setup
screendata = get_onscreen()
left_scr = screendata[1][0][0]; right_scr = screendata[1][1]
limit = screendata[1][0][1]; span = screendata[0]

# set initial highlight
oncurrent1 = []

while True:
    time.sleep(0.5)
    pos = get_wposition()
    # bypass possible incidental failures of the wmctrl command
    if pos != None:
        oncurrent2 = scr_position(span, limit, pos)
        # only set highlight if there is a change in active window
        if oncurrent2 != oncurrent1:
            highlight(oncurrent2[0])
        oncurrent1 = oncurrent2

+1 টি। আমি সবসময় আপনার উত্তর জ্যাকব পছন্দ। চমৎকার কাজ.
পার্টো

এটি কাজ limit < pos < spanকরার limit <= pos < spanজন্য আমাকে পরিবর্তন করতে হয়েছিল। যাইহোক এটি সত্যিই দুর্দান্ত। তবে আমি নিশ্চিত না যে আমি এটি এইভাবে কাজ করতে চাই (অন্য পর্দাটি ম্লান করে দিচ্ছি)। যখন সক্রিয় স্ক্রিন পরিবর্তন হয় তখন আমি একক উজ্জ্বল 'ডাল' তৈরি করতে এটি পরিবর্তন করার চেষ্টা করব।
কর্ডা

আমি প্রস্থান হ্যান্ডলারটিও যুক্ত করেছি, এটি স্ক্রিনের উজ্জ্বলতাটিকে স্বাভাবিক মানের সাথে পুনরায় সেট করে। (সুতরাং যখন আমি পরীক্ষার সময় স্ক্রিপ্টটি মেরে ফেলেছি তখন এটি ম্লান হয়ে থাকবে না)। আমার এখানে এটি যুক্ত করা উচিত কিনা তা নিশ্চিত নয় - আমি অজগরের মধ্যে খুব বেশি নই, তাই আমি এটি সঠিকভাবে
সম্পাদন

আমি আপনার উত্তরটি সম্পাদনা করে এটিকে যুক্ত করেছি।
কর্ডা

1
পুনঃটুইট আপনি রক করুন
ধিয়ায়

1

আমি আরও একটি সমাধান খুঁজে পেয়েছি, যা আমি প্রথম জায়গায় যা চেয়েছিলাম তার চেয়ে কিছুটা আলাদা, তবে এটি খুব ভাল কাজ করে।

  1. ইনস্টল করুন compizconfig-settings-manager compiz-plugins
  2. সিসিএসএম চালান
  3. ইন Effectsঅধ্যায় সক্ষম Animationsপ্লাগইন
  4. ইন Focus Animationসম্পাদনা করতে এবং নির্বাচন আকাঙ্ক্ষিত অ্যানিমেশান।

কেবল তরঙ্গ প্রভাব কাজ করেছে ... সুতরাং আপনি যদি এটি পছন্দ না করেন তবে আপনার মুখটি আমার মতোই দু: খিত হবে।


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