Nếu bạn muốn liên kết chỉ một vài chuỗi có dạng Super + x, Super + c, Super + v với các chuỗi khác như Ctrl + x, Ctrl + c, Ctrl + v, ví dụ như (như OP mong muốn) Các chuỗi Super-key cụ thể thường sẽ ánh xạ để cắt và dán mà không ảnh hưởng đến bất kỳ việc sử dụng nào khác của Super key trên hệ thống của bạn, có thể chỉ sử dụng tiện ích mở rộng XKB. Quy trình dưới đây phác thảo các bước và đưa ra hai ví dụ khác nhau về các chi tiết cho hai thiết lập bàn phím bắt đầu khác nhau; hy vọng rằng sẽ cung cấp đủ thông tin để thích ứng với hệ thống của bạn. Nó giả định rằng bạn cảm thấy thoải mái với việc tạo và chỉnh sửa các tệp trên hệ thống của mình, bao gồm các tệp ở các vị trí hệ thống như thế nào /usr/share/X11/xkb
.
Quyết định nơi bạn muốn cây cấu hình XKB của bạn cư trú. Đầu tiên tìm hệ thống một. Nó thường là trong / usr / share / X11 / xkb, và tôi không chắc chắn làm thế nào để tìm thấy nó nếu nó không ở đó; bạn chỉ có thể tìm kiếm hệ thống của bạn cho các thư mục có tên "xkb". Dù sao đi nữa, khi bạn đã tìm thấy nó, bạn có thể sửa đổi hệ thống tại chỗ hoặc bạn có thể sử dụng bất kỳ thư mục nào bạn chọn. Ưu điểm của việc sử dụng thư mục hệ thống là bạn có thể dễ dàng gọi ra các thay đổi của mình hơn, nhưng nhược điểm là các bản cập nhật hệ thống trong tương lai có thể ghi đè lên các thay đổi của bạn (bạn đã được cảnh báo). Trong mọi trường hợp, tất cả các tên tệp được đề cập sau đây đều liên quan đến thư mục này, mà tôi sẽ đề cập đến khi cần là $ XKBLOCAL $ và tất cả các lệnh đều cho rằng đó là thư mục hiện tại của bạn.
Xác định "loại" XKB của khóa nào các khóa x, c, v hiện tại. Cách dễ nhất để làm điều này là thông qua lệnh xkbcomp -a $DISPLAY - | grep -C 6 c,
(lưu ý dấu phẩy được cố ý đưa vào mẫu). Trong thiết lập ví dụ đầu tiên của tôi, điều này tạo ra:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
trong khi đó trong thiết lập ví dụ khác của tôi, nó tạo ra
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
Kết quả cuối cùng là trong ví dụ đầu tiên, các khóa có liên quan thuộc loại "ALPHABETIC" trong khi trong ví dụ thứ hai, chúng thuộc loại "FOUR_LEVEL". Tùy thuộc vào thiết lập bàn phím của bạn, bạn có thể thấy rằng chúng thuộc một số loại khác hoàn toàn. Trong phần tiếp theo, loại sẽ được gọi là $ TYPE $, mà bạn phải thay thế bằng chuỗi ALPHABETIC thực tế hoặc bất cứ điều gì trong các lệnh bên dưới.
Tìm định nghĩa của $ TYPE $ và sao chép nó vào một tệp mới trong thư mục $ XKBLOCAL $ / type. Đây là một lệnh thực hiện điều đó : xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Tên của tệp "cutpaste" mà tôi chọn là tùy ý, sử dụng bất kỳ tên nào bạn thích, nhưng lưu ý bạn sẽ phải tham khảo tệp này một cách nhất quán trong các bước sau. Trong thiết lập đầu tiên, tập tin này nhận được nội dung
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
và trong ví dụ khác, nó nhận được nội dung
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Chỉnh sửa các loại tệp / cutpaste để thực hiện hai điều: thêm một lời mở đầu và postamble làm cho nó trở thành một mệnh đề XKB thích hợp, và thay đổi tên loại và định nghĩa loại để thêm một cấp do trình sửa đổi tạo ra tương ứng với Super. Bạn nên kiểm tra xem công cụ sửa đổi đó là gì trên hệ thống của bạn, có khả năng Mod4 như được sử dụng dưới đây. Các sửa đổi cần thiết phải được thể hiện rõ ràng từ hai phiên bản cuối cùng của loại / cutpaste, cụ thể là:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
và
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Sao chép các định nghĩa ký hiệu khóa được xuất ra bởi grep trong bước thứ hai vào biểu tượng / biểu tượng tệp mới thứ hai, và thêm phần mở đầu và postamble tương tự, và sửa đổi các định nghĩa để sử dụng các loại mới và thêm hành động vào định nghĩa để xử lý khóa mong muốn được sản xuất bởi các phiên bản Super. Kết quả của điều này trong hai ví dụ của chúng tôi là:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
và
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Lưu ý rằng trong ví dụ thứ hai, tôi đã vắt kiệt một số khoảng trắng (không đáng kể) để giữ độ dài dòng dưới một chút kiểm soát.
Tìm tên của bộ quy tắc mà XKB hiện đang sử dụng. Điều đó thật dễ dàng, nó được hiển thị trong kết quả của setxkbmap -query
. Trong trường hợp của tôi, đó là "evdev".
Sao chép phiên bản hệ thống của quy tắc / evdev (hoặc bất kể tên bộ quy tắc của bạn là gì) vào $ XKBLOCAL $ / quy tắc / evdev và thêm quy tắc chỉ vào các tùy chọn chúng tôi đã tạo. Bạn có hai lựa chọn ở đây: bạn có thể sao chép tất cả evdev hoặc chỉ các phần đề cập đến kiểu bàn phím, bố cục, biến thể và (các) tùy chọn mà bạn đang thực sự sử dụng. Tất nhiên, nếu bạn đang sửa đổi các tệp hệ thống tại chỗ, bạn không cần thực hiện bất kỳ sao chép nào, chỉ cần chỉnh sửa.
Trong trường hợp này, những gì được thêm vào là giống hệt nhau bất kể thiết lập bàn phím ban đầu, vì vậy chỉ có một ví dụ. Bạn tìm phần của tệp quy tắc bắt đầu bằng ! option = symbols
và thêm một dòng cutpaste:super = +cutpaste
vào phần đó và bạn cũng tìm thấy phần của tệp quy tắc bắt đầu ! option = types
và một dòng cutpaste:super = +cutpaste
cho phần đó.
Sao chép phiên bản hệ thống của evdev.lst và thêm một dòng cho tùy chọn mới của bạn. Lưu ý rằng tên của tệp này chỉ đơn giản tương ứng với tên của tệp quy tắc có thêm .lst. Như trong bước trước, bạn có thể sao chép toàn bộ tệp hoặc chỉ phần được tham chiếu bởi mô hình, bố cục, biến thể và (các) tùy chọn bạn đang sử dụng. Bạn chỉ cần tìm phần của tệp này bắt đầu bằng ! option
và thêm một dòng như thế này: cutpaste:super Add super equivalents of cut and paste operations
vào phần đó.
OK, bây giờ tất cả các tập tin cấu hình được đưa ra. Nếu bạn đã sửa đổi các tệp hệ thống, bây giờ bạn có thể gọi tùy chọn mới của mình với setxkbmap -option cutpaste:super
. Mặt khác, nếu không, bạn phải cho setxkbmap biết thư mục $ XKBLOCAL $ của bạn ở đâu. Tệ hơn nữa, máy chủ không biết thư mục đó ở đâu, và setxkbmap không (hoặc có lẽ không thể, vì cuối cùng máy chủ có thể đang chạy trên một máy khác) nói với nó. Vì vậy, bạn phải chuyển đầu ra của setxkbmap sang xkbcomp, đồng thời cho biết lệnh đó có thư mục $ XKBLOCAL của bạn. Dòng lệnh đầy đủ là do đó setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Hy vọng rằng điều này có ích / quan tâm đến ai đó, vì tài liệu / tài liệu tham khảo XKB dứt khoát tốt là khan hiếm. Một tài liệu tham khảo rất hữu ích là http://madduck.net/docs/extending-xkb/ .