Suckless-Terminal

st 終端不尊重我的快捷方式設置

  • September 16, 2019

我安裝了剪貼板更新檔,並在我的config.h

#define MODKEY Mod1Mask
#define TERMMOD (Mod1Mask|ShiftMask)

{ ShiftMask,            XK_Insert,      clippaste,      {.i =  0} },
{ TERMMOD,               XK_c,           clipcopy,       {.i =  0} },
{ TERMMOD,               XK_v,           clippaste,      {.i =  0} },
{ MODKEY,               XK_p,           selpaste,       {.i =  0} },

有趣的是Shift+Insert,中鍵點擊滑鼠讓我從剪貼板粘貼,但使用TERMMODand MODKEYfrom above 的組合不能。TERMMOD使用和MODKEY(例如放大/縮小、列印螢幕、滾動)的其他快捷方式起作用。我嘗試使用其他組合,Ctrl+Shift+c/v但沒有樂趣。相同的組合適用於 xterm、urxvt 和 alacritty(我還沒有詳盡地測試過其他模擬器)。

任何人都可以闡明一下嗎?

source的預設鍵綁定中st,綁定使用XK_V(注意大寫)。

   { TERMMOD,              XK_C,           clipcopy,       {.i =  0} },
   { TERMMOD,              XK_V,           clippaste,      {.i =  0} },
   { TERMMOD,              XK_Y,           selpaste,       {.i =  0} },

嘗試將您的小寫更改XK_v回那個(同時保持您的新值TERMMOD)。

解釋

XK_vXK_V在 X11 包含文件中定義為 0x76 和 0x56 keysymdef.h。它們被認為是不同的按鍵。您可以使用該xev工具進行測試:

沒有Shift

KeyRelease event, serial 47, synthetic NO, window 0x4c00001,
   root 0x4cf, subw 0x0, time 433723403, (134,121), root:(1235,171),
   state 0x0, keycode 55 (keysym 0x76, v), same_screen YES,
   XLookupString gives 1 bytes: (76) "v"
   XmbLookupString gives 1 bytes: (76) "v"
   XFilterEvent returns: False

按住Shift,相同的keycode結果不同keysym

KeyPress event, serial 47, synthetic NO, window 0x4c00001,
   root 0x4cf, subw 0x0, time 433724571, (134,121), root:(1235,171),
   state 0x1, keycode 55 (keysym 0x56, V), same_screen YES,
   XLookupString gives 1 bytes: (56) "V"
   XmbLookupString gives 1 bytes: (56) "V"
   XFilterEvent returns: False

當您XK_vTERMMOD, 和TERMMODcontains一起使用時ShiftMask,您是在告訴st您要在v收到小寫字母時粘貼Shift。但是當你持有 時Shift,X 伺服器會發送一個大寫的V鍵。這不是st要找的東西,所以它什麼也不做。

引用自:https://unix.stackexchange.com/questions/542056