অ্যাপ্লিকেশন অনুযায়ী মাউস হুইল স্ক্রোল গতি কীভাবে পরিবর্তন করবেন change


9

উপরে (কেন্দ্রীভূত) চলমান অ্যাপ্লিকেশনটির ভিত্তিতে বিভিন্ন মাউস হুইল স্ক্রোল গতি পাওয়া সম্ভব কি?

সহজ পাঠের জন্য প্রবণতার জন্য ধীর স্ক্রোল গতি এবং দ্রুত ওয়েব স্ক্রোলের জন্য আরও বেশি ব্রাউজার।


ভূমিকম্প টার্মিনাল? "মাউস স্পিড" কি কিছু আছে?
ব্রায়াম

1
@ ব্রাইয়াম আমার ধারণা ওপি কেবল উদাহরণ হিসাবে এগুলি বেছে নিয়েছে। আবেদনের নামটি অপ্রাসঙ্গিক, তবে গুরুত্বপূর্ণ অংশটি হ'ল স্বেচ্ছাসেবী অ্যাপ্লিকেশন অনুযায়ী স্ক্রোলিং গতির পরিবর্তন
সের্গেই কলডিয়াজহনি

@ সার্জ কীভাবে অ্যাপ্লিকেশনগুলি মাউস হুইল ইভেন্টগুলি ব্যাখ্যা করে তা অত্যন্ত প্রাসঙ্গিক। অর্থাত। ফায়ারফক্স একটি বোতাম 5 টি ব্যাখ্যা করে (কীভাবে xorg আমার মাউসটিকে স্ক্রোলটি নীচে দেখায়) "তিনটি লাইন নিচে মসৃণভাবে সরানো হবে" হিসাবে একইভাবে অন্যান্য অ্যাপ্লিকেশনগুলি অন্যান্য মানদণ্ড অনুসরণ করতে পারে তবে সাধারণটি 3 টি লাইন এবং এটি জাস্টার দ্বারা নিয়ন্ত্রিত হয় না।
ব্রায়াম

উত্তর:


8

ভূমিকা

ব্যবহারকারী-সংজ্ঞায়িত উইন্ডোতে ফোকাস থাকলে নিম্নলিখিত স্ক্রিপ্টটি dynamic_mouse_speed.py মাউস পয়েন্টার এবং / অথবা স্ক্রোল গতিটি হওয়া উচিত তা নির্দিষ্ট করে।

গুরুত্বপূর্ণ : স্ক্রিপ্টের imwheelস্ক্রোলিং গতি বাড়াতে প্রোগ্রামটির প্রয়োজন এটি মাধ্যমে ইনস্টল করুনsudo apt-get install imwheel

ব্যবহার

-hপতাকা দ্বারা প্রদর্শিত হিসাবে :

usage: dynamic_mouse_speed.py [-h] [-q] [-p POINTER] [-s SCROLL] [-v]

Sets mouse pointer and scroll speed per window

optional arguments:
  -h, --help            show this help message and exit
  -q, --quiet           Blocks GUI dialogs.
  -p POINTER, --pointer POINTER
                        mouse pointer speed,floating point number from -1 to 1
  -s SCROLL, --scroll SCROLL
                        mouse scroll speed,integer value , -10 to 10
                        recommended
  -v, --verbose         prints debugging information on command line

স্ক্রিপ্টটি ব্যবহারকারীদের মাউস ক্লিকের সাহায্যে উইন্ডোটি ট্র্যাক করতে চায় তা নির্বাচন করতে দেয়। মাউস পয়েন্টারটি ক্রসে পরিণত হবে এবং ব্যবহারকারীরা তাদের পছন্দ মতো একটি উইন্ডো নির্বাচন করতে পারে।

python3 dynamic_mouse_speed.pyএকা চালানো কেবল পপআপ ডায়ালগ দেখায় এবং নিজে থেকে কিছুই করে না।

চলমান python3 dynamic_mouse_speed.py -s 5স্ক্রোলের গতি বৃদ্ধি করে, যখন python3 dynamic_mouse_speed.py -s -5স্ক্রোলের গতি কমায়। python3 dynamic_mouse_speed.py -p -0.9পয়েন্টারের গতি হ্রাস পায়, যখন python3 dynamic_mouse_speed.py -p 0.9পয়েন্টারের গতি বৃদ্ধি পায়। -sএবং -pবিকল্পগুলি মিশ্রিত করা যেতে পারে। -vকমান্ড লাইনে ডিবাগিং তথ্য সরবরাহ করে।

সূত্র

গিটহাবের টুকরো টুকরো হিসাবে উপলব্ধ

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Author: Sergiy Kolodyazhnyy
Date:  August 2nd, 2016
Written for: https://askubuntu.com/q/806212/295286
Tested on Ubuntu 16.04 LTS

usage: dynamic_mouse_speed.py [-h] [-q] [-p POINTER] [-s SCROLL] [-v]

Sets mouse pointer and scroll speed per window

optional arguments:
  -h, --help            show this help message and exit
  -q, --quiet           Blocks GUI dialogs.
  -p POINTER, --pointer POINTER
                        mouse pointer speed,floating point number from -1 to 1
  -s SCROLL, --scroll SCROLL
                        mouse scroll speed,integer value , -10 to 10
                        recommended
  -v, --verbose         prints debugging information on command line


"""
from __future__ import print_function
import gi
gi.require_version('Gdk', '3.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gdk, Gtk,Gio
import time
import subprocess
import sys
import os
import argparse


def run_cmd(cmdlist):
    """ Reusable function for running shell commands"""
    try:
        stdout = subprocess.check_output(cmdlist)
    except subprocess.CalledProcessError:
        print(">>> subprocess:",cmdlist)
        sys.exit(1)
    else:
        if stdout:
            return stdout



def get_user_window():
    """Select two windows via mouse. 
       Returns integer value of window's id"""
    window_id = None
    while not window_id:
        for line in run_cmd(['xwininfo', '-int']).decode().split('\n'):
            if 'Window id:' in line:
                window_id = line.split()[3]
    return int(window_id)

def gsettings_get(schema,path,key):
    """Get value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.get_value(key)

def gsettings_set(schema,path,key,value):
    """Set value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.set_double(key,value)

def parse_args():
    """ Parse command line arguments"""
    arg_parser = argparse.ArgumentParser(
                 description="""Sets mouse pointer and scroll """ + 
                             """speed per window """)
    arg_parser.add_argument(
                '-q','--quiet', action='store_true',
                help='Blocks GUI dialogs.',
                required=False)

    arg_parser.add_argument(
                '-p','--pointer',action='store',
                type=float, help=' mouse pointer speed,' + 
                'floating point number from -1 to 1', required=False)

    arg_parser.add_argument(
                '-s','--scroll',action='store',
                type=int, help=' mouse scroll speed,' + 
                'integer value , -10 to 10 recommended', required=False)

    arg_parser.add_argument(
                '-v','--verbose', action='store_true',
                help=' prints debugging information on command line',
                required=False)
    return arg_parser.parse_args()

def get_mouse_id():
    """ returns id of the mouse as understood by
        xinput command. This works only with one
        mouse attatched to the system"""
    devs = run_cmd( ['xinput','list','--id-only']   ).decode().strip()
    for dev_id in devs.split('\n'):
        props = run_cmd( [ 'xinput','list-props', dev_id  ]   ).decode()
        if "Evdev Scrolling Distance" in props:
            return dev_id


def write_rcfile(scroll_speed):
    """ Writes out user-defined scroll speed
        to ~/.imwheelrc file. Necessary for
        speed increase"""

    number = str(scroll_speed)
    user_home = os.path.expanduser('~')
    with open( os.path.join(user_home,".imwheelrc") ,'w'  ) as rcfile:
        rcfile.write( '".*"\n' )
        rcfile.write("None, Up, Button4, " + number + "\n"   )   
        rcfile.write("None, Down, Button5, " + number + "\n")
        rcfile.write("Control_L, Up,   Control_L|Button4 \n" +
                     "Control_L, Down, Control_L|Button5 \n" +
                     "Shift_L,   Up,   Shift_L|Button4 \n" +
                     "Shift_L,   Down, Shift_L|Button5 \n" )



def set_configs(mouse_speed,scroll_speed,mouse_id):
    """ sets user-defined values
        when the desired window is in focus"""
    if mouse_speed:
        gsettings_set('org.gnome.desktop.peripherals.mouse',None, 'speed', mouse_speed)

    if scroll_speed:
       if scroll_speed > 0:
           subprocess.call(['killall','imwheel'])
           # Is it better to write config here
           # or in main ?
           write_rcfile(scroll_speed)
           subprocess.call(['imwheel'])
       else:
           prop="Evdev Scrolling Distance"
           scroll_speed = str(abs(scroll_speed))
           run_cmd(['xinput','set-prop',mouse_id,prop,scroll_speed,'1','1']) 



def set_defaults(mouse_speed,scroll_speed,mouse_id):
    """ restore values , when user-defined window
        looses focus"""
    if mouse_speed:
        gsettings_set('org.gnome.desktop.peripherals.mouse', None, 
                      'speed', mouse_speed)

    if scroll_speed:
        if scroll_speed > 0:
           subprocess.call(['killall','imwheel'])
        if scroll_speed < 0:
           prop="Evdev Scrolling Distance"
           run_cmd(['xinput','set-prop',mouse_id,prop,'1','1','1'])


def main():
    """Entry point for when program is executed directly"""
    args = parse_args()

    # Get a default configs
    # gsettings returns GVariant, but
    # setting same schema and key requires 
    # floating point number
    screen = Gdk.Screen.get_default()
    default_pointer_speed = gsettings_get('org.gnome.desktop.peripherals.mouse', 
                                          None, 
                                          'speed')
    default_pointer_speed = float(str(default_pointer_speed))


    # Ask user for values , or check if those are provided via command line
    if not args.quiet:
       text='--text="Select window to track"'
       mouse_speed = run_cmd(['zenity','--info',text])

    user_window = get_user_window() 

    scroll_speed = args.scroll    
    pointer_speed = args.pointer
    mouse_id = get_mouse_id()

    if pointer_speed: 
        if pointer_speed > 1 or pointer_speed < -1:

           run_cmd(['zenity','--error',
                    '--text="Value out of range:' + 
                    str(pointer_speed) + '"'])
           sys.exit(1)

    # ensure that we will raise the user selected window
    # and activate all the preferences 
    flag = True
    for window in screen.get_window_stack():
        if user_window == window.get_xid():
            window.focus(time.time())
            window.get_update_area()
    try:
        while True:
            time.sleep(0.25) # Necessary for script to catch active window
            if  screen.get_active_window().get_xid() == user_window:
                if flag:
                    set_configs(pointer_speed,scroll_speed,mouse_id) 
                    flag=False

            else:
               if not flag:
                  set_defaults(default_pointer_speed, scroll_speed,mouse_id)
                  flag = True

            if args.verbose: 
                print('ACTIVE WINDOW:',str(screen.get_active_window().get_xid()))
                print('MOUSE_SPEED:', str(gsettings_get(
                                          'org.gnome.desktop.peripherals.mouse',
                                           None, 'speed')))
                print('Mouse ID:',str(mouse_id))
                print("----------------------")
    except:
        print(">>> Exiting main, resetting values")
        set_defaults(default_pointer_speed,scroll_speed,mouse_id)

if __name__ == "__main__":
    main()

মন্তব্য

  • স্ক্রিপ্টের একাধিক উদাহরণ প্রতিটি পৃথক উইন্ডোতে গতি নির্ধারণের অনুমতি দেয়।
  • কমান্ড লাইন থেকে চলার সময়, পপআপ ডায়ালগগুলি নিম্নলিখিত বার্তাটি উত্পন্ন করে: Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.এগুলি এড়ানো যায়।
  • পরামর্শ করুন আমি কীভাবে হাত দিয়ে ইউনিটিতে নতুন লঞ্চার আইটেমগুলি সম্পাদনা / তৈরি করতে পারি? এই স্ক্রিপ্টটির জন্য একটি লঞ্চার বা ডেস্কটপ শর্টকাট তৈরির জন্য, যদি আপনি ডাবল-ক্লিকের মাধ্যমে এটি চালু করতে চান
  • সহজেই অ্যাক্সেসের জন্য এই স্ক্রিপ্টটিকে একটি কীবোর্ড শর্টকাটে লিঙ্ক করতে, কীওয়ার্ড শর্টকাট যুক্ত করতে পরামর্শ করুন?
  • স্ক্রিপ্ট চলার সময় কেবলমাত্র একটি মাউস ব্যবহার করার পরামর্শ দেওয়া হয় , যেহেতু এটি Evdev Scrolling Distanceসম্পত্তি হিসাবে পাওয়া যায় এমন প্রথম ডিভাইসে কাজ করে
  • একাধিক উইন্ডো নিয়ন্ত্রণ করতে একাধিক উদাহরণ শুরু করা যেতে পারে, তবে কার্য সম্পাদনের স্বার্থে এটি প্রস্তাবিত নয়

আশ্চর্যজনক উত্তর। যদি সম্ভব হয় তবে আমি আপনাকে 50 টি রেপ পুরষ্কার দেব।

4
@ লুচোনাচো আপনি যদি চান তবে আপনি সর্বদা প্রশ্নটির উপর অনুদানের প্রস্তাব দিতে পারেন, তবে প্রশ্ন পোস্ট হওয়ার পরে এটি কেবল 2 দিন পরে পাওয়া যাবে :)
সের্গি কোলোডিয়াজহনি

2
প্রশ্নটি স্ক্রোলের গতি পরিবর্তন সম্পর্কে জিজ্ঞাসা করে। দেখে মনে হচ্ছে না এটি এই স্ক্রিপ্টটি যা করে, তবে এটি এটির সাথে খাপ খাইয়ে নিতে পারে। আসলে উইন্ডোর উপর নির্ভর করে যে গতিতে মাউস কার্সারটি গতিবেগ পরিবর্তন করা সম্ভবত এমনভাবে আচরণ করবে যাতে বেশিরভাগ ব্যবহারকারী অপ্রত্যাশিত বলে মনে করেন। আরও বেশি তাই যখন গতি পরিবর্তনগুলি দেরি হওয়ার সাথে ঘটে।
ক্যাস্পারড

@ ক্যাস্পারড প্রকৃতপক্ষে, প্রশ্নের শিরোনামটি কিছুটা বিভ্রান্তিকর ছিল এবং স্ক্রিপ্ট স্ক্রোলের গতির চেয়ে পয়েন্টার গতি বদলেছিল। তবে এটি কোনও বড় সমস্যা নয় এবং সত্যই আমি স্ক্রোলটির গতি অন্তর্ভুক্ত করতে স্ক্রিপ্টটি মানিয়ে নিতে পারি। তবে এর জন্য imwheelপ্যাকেজ ইনস্টল করা দরকার যা এটি আরও জটিল করে তুলবে। আমি আমার উত্তর আপডেট করার পরে আমি আপনাকে জানাব। ব্যবহারকারীর আচরণ অপ্রত্যাশিত সন্ধানের বিষয়ে আপনি যা বলেছেন তা সম্পর্কে, আমি দেখতে পাচ্ছি না এটি কীভাবে অনাকাঙ্ক্ষিত। আপনি আরও ব্যাখ্যা করতে পারেন?
সের্গেই কোলোডিয়াজনি

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