昨天太早發文章,這裡其實有一個粗略的api參考,
我都不知道xlib有這麼多鼠標
我猜全世界只有我跟xlib開發者知道,但他們大概也忘了
所以全世界只有我知道XD
我發現Xephyr不知道為什麼拿不到我的輸入
from Xlib import display,X,XK,xobject,Xcursorfont
dpy=display.Display()
screen=dpy.screen()
root=screen.root
#註冊事件
screen.root.grab_key(dpy.keysym_to_keycode(XK.string_to_keysym("q")),X.Mod4Mask,1,X.GrabModeAsync, X.GrabModeAsync)
screen.root.grab_key(dpy.keysym_to_keycode(XK.string_to_keysym("r")),X.Mod4Mask,1,X.GrabModeAsync, X.GrabModeAsync)
font = dpy.open_font('cursor') # 開啟 cursor 字型
cursor = font.create_glyph_cursor(
font, # mask 用同一個 font
Xcursorfont.gumby, # 游標形狀(source_char)https://xorg.freedesktop.org/archive/current/doc/libX11/libX11/libX11.html#x_font_cursors
#Xcursorfont.left_ptr,
Xcursorfont.gumby+1, # mask_char(通常是 +1)
(0, 0, 0), # 前景色 RGB(黑色)
(65535, 65535, 65535) # 背景色 RGB(白色)
)
root.change_attributes(cursor=cursor)
q_code=dpy.keysym_to_keycode(XK.string_to_keysym("q"))
r_code=dpy.keysym_to_keycode(XK.string_to_keysym("r"))
while True:
event=dpy.next_event()
if event.type==X.KeyPress and event.child: #!= X.NONE:
if event.detail==q_code:
print(f"kill client{event.child.get_wm_name()}")
event.child.kill_client()
#event.child是滑鼠底下的視窗
if event.detail==r_code:
print(f"moving window{event.child.get_wm_name()}")
event.child.configure(x=100,y=100)
#configure(x,y,w,h)
dpy.flush()
不管怎麼按都沒有印出訊息也沒有動作,除了super+q很詭異,有時候我沒寫super+q關視窗的部分super+q還是可以把xephyr裡面的xlogo關掉,我也沒有啟動其他WM,反正就是很詭異,甚至tinywm.py也不知道為什麼都不能操作,我num lock也沒開,這debug非常痛苦,如果今天沒處理好我明天會煩一整天直到放學才能繼續,我先發文不然我晚一點就會因為太痛苦而懶得發,我有點想放棄不是因為鐵人賽而是繼續做這個東西,太煩了,但我不能放棄,至少要等鐵人賽完賽再放棄,要是我真的做成功了那我真的就是一個技術提升很多的「鐵人」了,今天就先抱怨到這