ฉันชอบ Hot Corners จริงๆ :-)
เป็นไปได้ไหมที่จะเรียกใช้คำสั่งที่กำหนดเองบนมุมที่ร้อนแรงดังแสดงด้านล่าง?
ฉันชอบ Hot Corners จริงๆ :-)
เป็นไปได้ไหมที่จะเรียกใช้คำสั่งที่กำหนดเองบนมุมที่ร้อนแรงดังแสดงด้านล่าง?
คำตอบ:
ติดตั้งตัวจัดการการตั้งค่า CompizConfig (CCSM) ทำงานใน terminal:
sudo apt-get install compizconfig-settings-manager
เปิด CCSM
ป้อนคำสั่งที่คุณต้องการในหนึ่งในช่อง เช่น:
ไปที่แท็บ "การผูกขอบ"
คลิก "ไม่มี" และตั้งค่ามุมร้อนที่ต้องการ (หรือขอบ) ซึ่งสอดคล้องกับคำสั่งที่คุณเพิ่งตั้งค่า
เลื่อนเมาส์ไปที่มุม
ตอนนี้คำสั่งของคุณจะถูกเรียกใช้!
ยืนยันว่าทำงานกับ 14.04
หากคุณกำลังใช้ Unity และติดตั้ง ccsm แล้วคำตอบของ wjandrea คือคำตอบของคุณแน่นอน หากไม่มีหรือใช้กับ distros อื่นทางเลือกน้ำหนักเบาอาจมีประโยชน์
ด้วยสคริปต์ด้านล่างนี้คุณสามารถตั้งค่าคำสั่งใดก็ได้โดยเฉพาะสำหรับฮอตคอร์ของคุณ
ตัวอย่างฉันทำการตั้งค่าต่อไปนี้:
แน่นอนคุณสามารถทำให้คำสั่งเรียกใช้สคริปต์ภายนอก
นอกจากนี้คุณสามารถกำหนดขนาดของมุมที่ร้อนในบรรทัด:
cornersize = 10
เพียงแค่เปลี่ยนค่า (พิกเซล) สคริปต์จะกำหนดพื้นที่ (สี่เหลี่ยม) เพื่อเรียกใช้คำสั่งของคุณ:
#!/usr/bin/env python3
import subprocess
import time
cornersize = 20
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
match1 = None
while True:
time.sleep(1)
xy = get_pos()
x = xy[0]; y = xy[1]
test = [
[x < cornersize, y < cornersize],
[x > res[0]-cornersize, y < cornersize],
[x < cornersize, y > res[1]-cornersize],
[x > res[0]-cornersize, y > res[1]-cornersize],
]
match2 = [i for i, p in enumerate(test) if all(p)]
if match2 != match1:
if match2:
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
สคริปต์ต้องการ xdotool
sudo apt install xdotool
hotcorners2.py
ในส่วนหัวของสคริปต์ให้ตั้งค่าคำสั่งของคุณ (คำนึงถึงคำพูด)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(ต่อมาบนซ้าย / ขวา, ล่างซ้าย / ขวา)
ทดสอบ - รันสคริปต์:
python3 /path/to/hotcorners2.py
หากทำงานได้ดีให้เพิ่มในแอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม เพิ่มคำสั่ง:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
หากเราใช้การคำนวณขั้นสูงอีกเล็กน้อยเราสามารถใช้รัศมีแทนพื้นที่สี่เหลี่ยมเพื่อเรียกใช้คำสั่ง (ขอบคุณ @pythagoras เก่าที่ดี):
ความแตกต่างเล็กน้อย แต่เพื่อความสนุก:
#!/usr/bin/env python3
import subprocess
import math
import time
# set distance (hotcorner sensitivity)
radius = 20
# top-left, top-right, bottom-left, bottom-right
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]
match1 = None
while True:
time.sleep(1)
pos = get_pos()
# get the current difference from the mousepointer to each of the corner (radius)
diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
for c in corners]
# see if any of the corners is "approached" within the radius
match2 = [diff.index(n) for n in diff if n < radius]
# if so, and the corresponding command is not set to None, run it.
if all([match2 != match1, match2]):
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
สวยมากเหมือนกัน ตั้งค่าคำสั่งของคุณและรัศมีเพื่อเรียกใช้ในส่วนหัวของสคริปต์
คำตอบของ wjandrea เป็นคำตอบ ที่เหมาะสมที่สุดสำหรับคนที่ใช้ Ubuntu หรือ Ubuntu Kylin ที่เป็นค่าเริ่มต้น (หรือมี compiz เป็นเครื่องมือจัดการดิสเพลย์) ดังนั้นมันจึงทำให้ upvote และความเคารพของฉัน คำตอบที่ให้ไว้ด้านล่างสามารถใช้กับ Unity ได้เช่นกัน แต่อาจจะซ้ำซ้อนเล็กน้อย อย่างไรก็ตามในสภาพแวดล้อมเดสก์ท็อปที่ไม่มีคอมแพคเราสามารถใช้ตัวบ่งชี้ที่แสดงด้านล่าง ฉันได้ทดสอบสั้น ๆ ใน Lubuntu 16.04 VM ดังนั้นฉันรู้ว่ามันทำงานได้ที่นั่นและทำให้มันเข้ากันได้กับ Kylin 14.04 เช่นกัน สำหรับเดสก์ท็อป GNOME และ MATE คุณจะต้องได้รับการสนับสนุนสำหรับ AppIndicators ที่เปิดใช้งานก่อนเพื่อที่จะใช้ตัวบ่งชี้ใด ๆ
ฉันได้ติดตั้งแล้วindicator-edger
ซึ่งอนุญาตให้เรียกใช้คำสั่งที่ผู้ใช้กำหนดโดยอิงจากตำแหน่งเมาส์ได้ทุกที่ตามขอบ 4 ของหน้าจอ ฉบับดั้งเดิมเสร็จภายในหนึ่งวันในเวลาประมาณ 7 ชั่วโมงจึงค่อนข้างเรียบง่าย แต่ทำงานได้
ตัวบ่งชี้จะถูกควบคุมผ่าน~/.edger-commands.json
ไฟล์อย่างชัดเจนในjson
รูปแบบ ผู้ใช้สามารถเขียนด้วยตนเองหรือตั้งค่าผ่านตัวDEFINE COMMANDS
เลือกของตัวบ่งชี้ ตัวเลือกเปิดใช้งาน / ปิดใช้งานจะถูกจดจำและเขียนโดยอัตโนมัติไปยังไฟล์เพื่อความสะดวกของผู้ใช้ ไฟล์การกำหนดค่าตัวอย่างจะเป็นเช่นนั้น:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
บันทึก"left"
รายการในไฟล์ ขอบนั่นคือล้าง แต่เนื่องจากไวยากรณ์มันต้องมีสตริงที่ว่างเปล่ามีคำพูดเช่นjson
""
เมื่อตัวบ่งชี้ตรวจพบว่าผู้ใช้วางเมาส์ไว้ที่ขอบใด ๆ (ด้วยระยะขอบ ~ 3 พิกเซล) ตัวบ่งชี้จะส่งการแจ้งเตือนฟองและเรียกใช้คำสั่งที่เหมาะสม (ถ้ากำหนด) การเปิดใช้งานทริกเกอร์จะไม่ทำซ้ำเว้นแต่ว่าผู้ใช้เลื่อนเมาส์ออกจากขอบ
ดังที่คุณเห็นจากภาพด้านบนตัวบ่งชี้ยังมีการดีบักเอาต์พุตในบรรทัดคำสั่ง หากคุณพบข้อบกพร่องใด ๆ รู้สึกฟรีเพื่อเรียกใช้งานจากสถานีพบว่ามีอะไรผิดพลาดเกิดขึ้นและส่งรายงานข้อผิดพลาดที่เหมาะสมในประเด็นที่หน้าของโครงการ GitHub
ขณะนี้ยังไม่มีการรองรับมุม (เฉพาะขอบ) และมันถูกสร้างขึ้นสำหรับการตั้งค่าหนึ่งจอภาพ (เห็นได้ชัดว่าไม่สามารถครอบคลุมฐานทั้งหมดได้ภายใน 7 ชั่วโมงของการสร้าง) แต่คุณลักษณะเหล่านั้นอาจมีในที่สุดในอนาคต
รหัสที่มาที่มีอยู่ในโครงการGitHubหน้าหรือผ่านทางLaunchpad ทำการติดตั้งผ่านคำสั่งต่อไปนี้ในเทอร์มินัล:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger