Nhấp chuột duy nhất


11

Có thể có một lần bấm vào biểu tượng dock kích hoạt phơi sáng theo mặc định?

Nếu bạn có một cửa sổ duy nhất mở trong ubfox thì nó không kích hoạt phơi sáng nhưng nếu bạn có nhiều cửa sổ mở thì nó sẽ hoạt động. Điều này gây ra sự cố khi tôi cố gắng sử dụng phơi sáng trên một số cửa sổ khác nhau trong Ubuntu.

nhập mô tả hình ảnh ở đây


1
Bạn có thể thêm một liên kết đến những gì phơi bày cho câu hỏi của bạn?
Bruni

vì vậy, nói cách khác, bạn muốn có chế độ xem như vậy ngay cả khi chỉ có một cửa sổ của ứng dụng đó mở?
Sergiy Kolodyazhnyy

@LiamWilliam là nó phơi bày hay quy mô?
Anwar

1
@LiamWilliam không, thật không may, tôi đã không tìm thấy bất cứ điều gì có liên quan cho đến nay :(
Sergiy Kolodyazhnyy

1
@LiamWilliam Tôi chỉ tìm thấy tùy chọn "lây lan" thông qua phím tắt, nhưng cửa sổ của bạn phải được tập trung để làm điều đó. Tôi chưa tìm thấy cách nào thông qua nhấp chuột
Sergiy Kolodyazhnyy

Câu trả lời:


6

Nội dung:

  1. Tổng quat
  2. Nguồn kịch bản
  3. Ghi chú bổ sung

1. Sơ lượt

Như đã đề cập trong các nhận xét, chức năng này rõ ràng đã bị xóa kể từ ngày 12.04 và bây giờ nhấp vào biểu tượng trình khởi chạy thu nhỏ cửa sổ (rõ ràng là một tính năng được yêu cầu cao, từ những gì tôi có thể thấy trong các tìm kiếm trực tuyến của mình). Tuy nhiên, tồn tại một bàn phím để bật expo cho một cửa sổ duy nhất, đó là Super+ Ctrl+ W. Biết rằng, nếu chúng ta có thể phát hiện nhấp vào trình khởi chạy hoặc vị trí của con trỏ khi cửa sổ được nâng lên, thì chúng ta có thể mô phỏng triển lãm cửa sổ duy nhất đó thông qua phím tắt đó. Kịch bản dưới đây thực hiện chính xác điều đó.

Điều này có nghĩa là được lưu dưới dạng /usr/bin/single_click_expo.pytệp và được thêm vào Ứng dụng khởi động

nhập mô tả hình ảnh ở đây

2. Nguồn kịch bản

Cũng có sẵn trên GitHub

#!/usr/bin/env python3

# Author: Serg Kolo
# Date: Sept 28, 2016
# Purpose: activates
# Depends: python3-gi
#          xdotool
# Written for: http://askubuntu.com/q/651188/295286

# just in case user runs this with python 2
from __future__ import print_function
import gi
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk,Gio
import sys
import dbus
import subprocess

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 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 get_launcher_object(screen):

    # Unity allows launcher to be on multiple
    # monitors, so we need to account for all 
    # window objects of the launcher
    launchers = []

    for window in screen.get_window_stack():
        xid = window.get_xid()
        command = ['xprop','-notype',
                   'WM_NAME','-id',str(xid)
        ]
        xprop = run_cmd(command).decode()
        title = xprop.replace("WM_NAME =","")
        if title.strip()  == '"unity-launcher"':
           launchers.append(window)
           #return window
    return launchers

def get_dbus(bus_type,obj,path,interface,method,arg):
    # Reusable function for accessing dbus
    # This basically works the same as 
    # dbus-send or qdbus. Just give it
    # all the info, and it will spit out output
    if bus_type == "session":
        bus = dbus.SessionBus() 
    if bus_type == "system":
        bus = dbus.SystemBus()
    proxy = bus.get_object(obj,path)
    method = proxy.get_dbus_method(method,interface)
    if arg:
        return method(arg)
    else:
        return method() 


def main():


    previous_xid = int()
    screen = Gdk.Screen.get_default()

    while True:

        current_xid = screen.get_active_window().get_xid()
        if  int(current_xid) == previous_xid:
            continue
        previous_xid = int(current_xid)
        icon_size = gsettings_get(
                        'org.compiz.unityshell',
                        '/org/compiz/profiles/unity/plugins/unityshell/',
                        'icon-size')
        icon_size = int(str(icon_size))
        position = str(gsettings_get(
                       'com.canonical.Unity.Launcher',
                       None,
                       'launcher-position'))
        screen = Gdk.Screen.get_default()
        launcher_objs = get_launcher_object(screen)

        # for faster processing,figure out which launcher is used
        # first before running xdotool command. We also need
        # to account for different launcher positions (available since 16.04)
        pointer_on_launcher = None
        for launcher in launcher_objs:
            if 'Left' in position and  \
               abs(launcher.get_pointer().x) <= icon_size:
                  pointer_on_launcher = True
            elif 'Bottom' in position and \
               abs(launcher.get_pointer().y) <= icon_size:
                  pointer_on_launcher = True
            else:
               continue


        active_xid = int(screen.get_active_window().get_xid())

        application = get_dbus('session',
                               'org.ayatana.bamf',
                               '/org/ayatana/bamf/matcher',
                               'org.ayatana.bamf.matcher',
                               'ApplicationForXid',
                               active_xid)

        # Apparently desktop window returns empty application
        # we need to account for that as well
        if application:
            xids = list(get_dbus('session',
                            'org.ayatana.bamf',
                            application,
                            'org.ayatana.bamf.application',
                            'Xids',None))

        if pointer_on_launcher and\
           len(xids) == 1:
               run_cmd(['xdotool','key','Ctrl+Super+W'])


if __name__ == '__main__':
    main()

3. Ghi chú bổ sung

  • Có thể nên ánh xạ lại phím tắt sang thứ khác Super+ Ctrl+ W, vì trong expo Ctrl+ Wtrong Expo tương ứng với lệnh "đóng cửa sổ". Vấn đề tiềm ẩn ở đây là việc chuyển đổi thường xuyên có thể gây ra đóng cửa sổ. Kịch bản sẽ phải được điều chỉnh cho phù hợp.

GHI CHÚ:

Các kịch bản dựa trên xdotooltiện ích. Bạn phải cài đặt nó. Không có xdotoolnó sẽ không hoạt động, vì xdotoolđược sử dụng để mô phỏng nhấn phím. Cài đặt nó quasudo apt-get install xdotool


Tôi nhận đượcNo module named gi
William

@LiamWilliam Có lẽ bạn cần cài đặt python3-gigói. Lạ, vì nó giống như một mô-đun chuẩn và đi kèm với Ubuntu theo mặc định.
Sergiy Kolodyazhnyy


Bạn đang dùng phiên bản nào của Ubuntu?
William

@LiamWilliam 16.04 LTS, nhưng python3-gicũng được mặc định là 14.04 LTS. Tôi không biết về các phiên bản trước
Sergiy Kolodyazhnyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.