ปุ่มลัด / ทางลัดที่กำหนดเองเพื่อเปิด / นำหน้าแอป


11

ฉันไม่คิดว่ามันจะถูกสร้างขึ้นในระบบ แต่เป็นไปได้ไหมที่จะทำโดยไม่ต้องยุ่งยากมากเกินไป?

สมมติว่าฉันเปิดโปรแกรมเฉพาะด้วยปุ่มลัดและเมื่อฉันกดปุ่มลัดนั้นอีกครั้งหน้าต่างโปรแกรมจะปรากฏขึ้นด้านหน้า

ฉันต้องการทำสิ่งนี้บน Ubuntu 9.04

อาจจะด้วย D-Bus? ผู้เชี่ยวชาญใด ๆ

อัปเดต : นี่คือสิ่งที่ฉันได้รับในกรณีที่มีคนช่วย:

#!/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

แน่นอนว่ามันสามารถทำให้ง่ายขึ้นได้ แต่ฉันไม่ได้bashฉลาด นอกจากนี้เพื่อเป็นตัวอย่างในการทำงานฉันได้สร้างโปรไฟล์ที่กำหนดเองใน Terminal ที่ใช้ชื่อเฉพาะกับหน้าต่างเพื่อให้สามารถพบได้ในภายหลัง ความเป็นไปได้ไม่มีที่สิ้นสุด!


1
สำหรับภารกิจง่าย ๆ วิธีการของ jtb นั้นใช้งานได้ดีกว่าเนื่องจากบางครั้ง xdotools ส่งข้อผิดพลาด X และ wmctrl เร็วขึ้น
อีวาน

คำตอบ:


10

wmctrlโปรแกรมเป็นเพียงสิ่งที่คุณกำลังมองหา ( sudo apt-get install wmctrl) คุณสามารถใช้wmctrl -a "AppTitle"คำสั่งเพื่อนำแอปไปไว้ด้านหน้า wmctrl -lจะแสดงรายการ windows ที่มีอยู่ทั้งหมดดังนั้นควรเขียนเชลล์สคริปต์ที่ตรวจสอบว่าโปรแกรมของคุณกำลังทำงานอยู่หรือไม่และเปิดใช้งานหรือนำมาไว้ด้านหน้า จากนั้นคุณสามารถผูกกับแป้นพิมพ์ลัด

/home/jtb/code/bringToFrontบันทึกครั้งแรกบางสคริปต์ต่อไปนี้ผมจะใช้ ใช้สองอาร์กิวเมนต์แรกคือสิ่งที่คุณจะพิมพ์ที่ terminal เพื่อเปิดโปรแกรมที่สองคือ substring ของชื่อหน้าต่างของโปรแกรม หากไม่มีสตริงที่ไม่ซ้ำกันคงที่ในชื่อแล้วคุณจะต้องทำงานอีกเล็กน้อยเพื่อหาหน้าต่างของโปรแกรม

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. ด้วยสคริปต์ในไดเรกทอรีปัจจุบันของคุณให้เรียกใช้chmod +x bringToFrontเพื่อให้สคริปต์ทำงานได้ จากนั้นตรวจสอบให้แน่ใจว่ามันใช้งานได้; ที่จะเปิดตัว / เน้น Firefox ./bringToFront firefox "Mozilla Firefox"ที่คุณสามารถเรียกใช้

  2. ตอนนี้เราต้องผูกคีย์ลัด เรียกใช้และนำทางโครงสร้างโฟลเดอร์ไปทางซ้ายเพื่อgconf-editor/apps/metacity/keybinding_commands

  3. ดับเบิลคลิกที่แรกที่มีค่าว่างเปล่าอาจจะcommand พิมพ์เส้นทางแบบเต็มไปยังสคริปต์และให้สองพารามิเตอร์เช่นcommand_1/home/jtb/code/bringToFront firefox Firefox

  4. จากพาเนลด้านซ้ายให้เลือกglobal_keybindingsโฟลเดอร์ถัดไปขึ้น ค้นหารายการที่ตรงกับคำสั่งที่คุณเพียงแค่กำหนดไว้อาจจะrun run_command_1คลิกสองครั้งและพิมพ์แป้นพิมพ์ลัดที่คุณต้องการใช้ <Ctrl><Alt>Fใส่การปรับเปลี่ยนในวงเล็บมุมเช่น

ตอนนี้Control+ Alt+ Fจะนำหน้าต่าง firefox ของคุณไปไว้ข้างหน้าหรือเปิดใช้หากไม่ได้ทำงานอยู่


ใช่ฉันรู้เรื่องนี้เมื่อสองสามนาทีก่อน แต่ฉันไปกับ xdotool ขอบคุณ!
Ivan

ฉันลืมที่จะพูดถึงฉันยังใช้ทางลัดและคำสั่งทั่วโลกใน gconf เพื่อให้บรรลุผลอย่างเต็มที่ (คอนโซล Quake ของคนจน!)
Ivan

ใช่ฉันไม่ได้ใช้ xdotool แต่ดูเหมือนว่ามันจะให้ความยืดหยุ่นมากกว่านี้ จุดดีเกี่ยวกับ gconf ตั้งแต่ที่ค่อนข้างไม่ชัดเจนฉันก็อาจแก้ไขคำตอบเพื่อรวมรายละเอียดเพิ่มเติมสำหรับคนอื่นที่ต้องการทำเช่นนี้
jtb

คอนโซล Quake ของ Poort Man? คุณหมายถึงชอบ Tilda? freshmeat.net/projects/tilda
prestomation

ใช่ฉันใช้ Tilda ด้วยเช่นกัน แต่ฉันทำงานหลายโครงการตลอดสัปดาห์และสำหรับแต่ละแท็บฉันเปิดแท็บสามหรือสี่แท็บเสมอดังนั้นการสลับไปที่คอนโซลของโครงการ ("พื้นที่ทำงาน") อย่างรวดเร็วโดยไม่เกะกะ Tilda มีประโยชน์มากสำหรับฉัน
Ivan

3

xdotoolsนี่คือวิธีที่จะทำมันได้อีกด้วย กระบวนการในการป็อปอัพนั้นได้รับการยอมรับโดยบรรทัดคำสั่งที่ออกให้เรียกใช้ (ไม่จำเป็นต้องมีไฟล์ pid หรือชื่อหน้าต่างเฉพาะ)

#!/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

ขอบคุณสำหรับสิ่งนั้น ฉันใช้เวอร์ชันที่แก้ไขแล้วเพื่อสร้างสคริปต์ทางลัดของหน้าต่างซึ่งรองรับการขี่จักรยานผ่านหลาย ๆ กรณี ถ้าคุณสนใจ:

http://somanov.wordpress.com/2009/12/02/window-shortcuts-for-linux-desktops/

ไชโย :)


0

คำตอบที่โพสต์โดยjtbก่อนหน้านั้นยอดเยี่ยม แต่บางครั้งคุณต้องการจับคู่ชื่อที่แน่นอน (เช่นคุณต้องการเปิด "GitKraken" แต่ชื่อของเบราว์เซอร์ของคุณ "GitKraken vs CLI" นั้นตรงกับคำค้นหาด้วย)

#!/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

ดังนั้นตอนนี้คุณสามารถเรียกสคริปต์ bringToFront ของคุณดังนี้:

#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

วิธีการแก้ปัญหานี้ไม่ได้กำหนดพารามิเตอร์ แต่ฉันใช้เพื่อทำให้โฟกัสได้หรือเริ่มโปรแกรมคำนวณของ gnome

อ็อพชัน -R ค้นหาหน้าต่างหรือล้มเหลวหากพบว่าถูกย้ายไปยังเดสก์ท็อปปัจจุบันยกและกำหนดโฟกัส ชื่อเครื่องคิดเลขของ gnome เป็นหน้าต่างที่มีชื่อเครื่องคิดเลขมันสามารถกำหนดพารามิเตอร์ได้ง่าย แต่ฉันไม่เคยพบว่าจำเป็นต้องทำเช่นนั้น 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

0

ฉันมีปัญหาเดียวกันและเนื่องจากฉันไม่พบวิธีแก้ปัญหาสิ่งทอสำหรับทำชุดเสื้อผ้าฉันทำอย่างใดอย่างหนึ่ง:

https://hyperkeys.xureilab.com

https://github.com/xurei/hyperkeys

คุณสามารถปักหมุดหน้าต่างด้วยทางลัดที่คุณกำหนด ฉันใช้ SHIFT + ALT + [QWER] เป็นการส่วนตัวและ ALT + [QWER] เพื่อนำมาไว้ด้านหน้า คุณไม่สามารถเปิดแอปได้หากยังไม่ได้เปิด

นี่เป็นเครื่องมือโอเพ่นซอร์ส linux-first นอกจากนี้ยังมีรุ่น Windows

หวังว่ามันจะช่วย! ฉันกำลังมองหาข้อเสนอแนะดังนั้นหากคุณมีคำถามใด ๆ สร้างปัญหา ;-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.