Phím tắt / phím tắt tùy chỉnh để mở / đưa ra phía trước một ứng dụng


11

Tôi không tưởng tượng điều này được tích hợp vào hệ thống, nhưng liệu có thể thực hiện nó mà không gặp quá nhiều rắc rối?

Giả sử tôi mở một chương trình cụ thể bằng một phím nóng và khi tôi nhấn lại phím nóng đó, cửa sổ chương trình được đưa ra phía trước.

Tôi muốn làm điều này trên Ubuntu 9.04.

Có lẽ với D-Bus? Có chuyên gia nào không?

Cập nhật : Đây là những gì tôi đã kết thúc trong trường hợp đó là sự giúp đỡ cho ai đó:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Chắc chắn nó có thể được đơn giản hóa, nhưng tôi không phải là bashwiz. Ngoài ra, để ví dụ của tôi hoạt động, tôi đã tạo một hồ sơ tùy chỉnh trong Terminal áp dụng một tiêu đề duy nhất cho cửa sổ để có thể tìm thấy nó sau này. Khả năng là vô tận!


1
Đối với tác vụ đơn giản này, phương thức của jtb hoạt động tốt hơn, vì đôi khi xdotools ném lỗi X và wmctrl nhanh hơn.
Ivan

Câu trả lời:


10

Các wmctrlchương trình được chỉ là những gì bạn đang tìm kiếm ( sudo apt-get install wmctrl). Bạn có thể sử dụng wmctrl -a "AppTitle"lệnh để đưa ứng dụng ra phía trước. wmctrl -lsẽ liệt kê tất cả các cửa sổ có sẵn, vì vậy thật dễ dàng để viết một kịch bản shell kiểm tra xem chương trình của bạn có đang chạy hay không và khởi chạy nó hoặc đưa nó ra phía trước. Sau đó, bạn có thể chỉ cần liên kết nó với một phím tắt.

Đầu tiên lưu tập lệnh sau ở đâu đó, tôi sẽ sử dụng /home/jtb/code/bringToFront. Phải có hai đối số, đầu tiên là những gì bạn sẽ nhập vào thiết bị đầu cuối để khởi chạy chương trình, thứ hai là một chuỗi con của tiêu đề của cửa sổ chương trình. Nếu không có chuỗi duy nhất liên tục trong tiêu đề thì bạn sẽ cần phải làm thêm một chút để tìm cửa sổ của chương trình.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Với tập lệnh trong thư mục hiện tại của bạn, hãy chạy chmod +x bringToFrontđể làm cho tập lệnh có thể thực thi được. Sau đó hãy chắc chắn rằng nó hoạt động; để khởi chạy / tập trung firefox bạn có thể chạy ./bringToFront firefox "Mozilla Firefox".

  2. Bây giờ chúng ta cần liên kết một phím tắt. Chạy gconf-editorvà điều hướng cấu trúc thư mục sang trái /apps/metacity/keybinding_commands.

  3. Nhấp đúp chuột vào cái đầu tiên commandvới một giá trị trống, có thể command_1. Gõ đường dẫn đầy đủ đến các kịch bản và cung cấp hai tham số, ví dụ /home/jtb/code/bringToFront firefox Firefox.

  4. Từ bảng bên trái, chọn global_keybindings, thư mục tiếp theo lên. Tìm runmục phù hợp với lệnh bạn vừa xác định, có thể run_command_1. Nhấp đúp chuột vào nó và gõ phím tắt bạn muốn sử dụng. Đặt các sửa đổi trong dấu ngoặc góc, ví dụ <Ctrl><Alt>F.

Bây giờ Control+ Alt+ Fsẽ đưa cửa sổ firefox của bạn ra phía trước hoặc khởi chạy nó nếu nó chưa chạy.


Vâng, tôi đã phát hiện ra điều đó một vài phút trước đây, nhưng tôi đã đi với xdotool. Cảm ơn!
Ivan

Tôi quên đề cập đến việc tôi cũng đã sử dụng các phím tắt và lệnh toàn cầu trong gconf để hoàn thành hiệu ứng (bảng điều khiển Quake của một người nghèo!).
Ivan

À, vâng, tôi đã không sử dụng xdotool cho mình nhưng có vẻ như nó sẽ giúp bạn linh hoạt hơn. Điểm hay về gconf. Vì điều đó không rõ ràng nên tôi cũng có thể chỉnh sửa câu trả lời để bao gồm thêm chi tiết cho bất kỳ ai khác muốn làm điều này.
jtb

Bảng điều khiển Quake của Poort Man? Ý bạn là như Tilda? Freshmeat.net/projects/tilda
uy tín

Có, tôi cũng sử dụng Tilda, nhưng tôi làm việc cho một số dự án trong tuần và với mỗi dự án tôi luôn mở ba hoặc bốn tab, do đó, nhanh chóng chuyển sang bảng điều khiển của dự án ("không gian làm việc") mà không làm lộn xộn Tilda rất hữu ích cho tôi.
Ivan

3

Đây là một cách khác để làm điều đó với xdotools. Quá trình bật lên được nhận ra bởi dòng lệnh được ban hành để chạy nó (không cần tệp pid hoặc tiêu đề cửa sổ duy nhất).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi


0

Câu trả lời được đăng bởi jtb trước đó là tuyệt vời nhưng đôi khi bạn muốn khớp các tiêu đề chính xác (ví dụ: bạn muốn mở "GitKraken" nhưng tiêu đề trình duyệt của bạn "GitKraken vs CLI" cũng phù hợp với truy vấn).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Vì vậy, bây giờ bạn có thể gọi tập lệnh bringToFront của mình như sau:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>

0

Giải pháp này không được tham số hóa, nhưng tôi đã sử dụng nó để tập trung hoặc khởi động máy tính gnome.

Tùy chọn -R tìm thấy cửa sổ hoặc thất bại, nếu tìm thấy nó được chuyển đến màn hình hiện tại, được nâng lên và tập trung. Máy tính gnome đặt tên cửa sổ của nó với tên Máy tính , nó có thể dễ dàng được tham số hóa, nhưng tôi chưa bao giờ thấy cần phải làm như vậy. Tôi có nó ánh xạ tới Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi
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.