يتيح لك xcape استخدام مفتاح التعديل كمفتاح آخر عند الضغط عليه وتحريره من تلقاء نفسه. لاحظ أنه أبطأ قليلاً من الضغط على المفتاح الأصلي، لأن حدث الضغط لا يحدث حتى يتم تحرير المفتاح. السلوك الافتراضي هو إنشاء مفتاح Escape عند الضغط على Left Control وتحريره من تلقاء نفسه. (إذا كنت لا تفهم سبب رغبة أي شخص في ذلك، أعتقد أن Vim ليس محرر النصوص المفضل لديك؛)
قم أولاً بتثبيت تبعيات التطوير. على الأنظمة المستندة إلى Debian (بما في ذلك Ubuntu وLinux Mint)، قم بتشغيل:
$ sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev
على الأنظمة المعتمدة على فيدورا، قم بتشغيل:
$ sudo dnf install git gcc make pkgconfig libX11-devel libXtst-devel libXi-devel
ثم قم بتشغيل:
$ git clone https://github.com/alols/xcape.git
$ cd xcape
$ make
$ sudo make install
$ xcape [-d] [-f] [-t <timeout ms>] [-e <map-expression>]
-d
وضع التصحيح. لا شوكة في الخلفية. طباعة معلومات التصحيح.
-f
الوضع الأمامي. لا شوكة في الخلفية.
-t <timeout ms>
إذا احتفظت بمفتاح لفترة أطول من هذه المهلة، فلن يقوم xcape بإنشاء حدث رئيسي. الافتراضي هو 500 مللي ثانية.
-e <map-expression>
يحتوي التعبير على القواعد النحوية 'ModKey=Key[|OtherKey][;NextExpression]'
تم العثور على قائمة أسماء المفاتيح في ملف الرأس X11/keysymdef.h
(قم بإزالة البادئة XK_
). لاحظ أنه نظرًا للقيود المفروضة على X11، يجب تحديد المفاتيح المتغيرة كمفتاح Shift متبوعًا بالمفتاح الذي سيتم الضغط عليه بدلاً من الاسم الفعلي للحرف. على سبيل المثال، لإنشاء "{" يمكن استخدام التعبير 'ModKey=Shift_L|bracketleft'
(بافتراض أن لديك مفتاح يحتوي على "{" أعلى "[").
يمكنك أيضًا تحديد المفاتيح بالنظام العشري (البادئة #
) أو الثماني ( #0
) أو السداسي العشري ( #0x
). سيتم تفسيرها على أنها رموز مفاتيح ما لم يتم العثور على اسم المفتاح المقابل.
سيؤدي ذلك إلى جعل Left Shift ينشئ Escape عند الضغط عليه وتحريره من تلقاء نفسه، بينما يقوم Left Control بإنشاء مجموعة Ctrl-O عند الضغط عليه وتحريره من تلقاء نفسه.
xcape -e 'Shift_L=Escape;Control_L=Control_L|O'
بالاشتراك مع xmodmap، من الممكن جعل المفتاح العادي يعمل كمعدل إضافي. قم أولاً بتعيين مفتاح المُعدِّل باستخدام xmodmap، ثم عد المُعدِّل إلى المفتاح باستخدام xcape. ومع ذلك، فإن هذا له العديد من القيود: لن يعمل المفتاح كالمعتاد حتى يتم تحريره، وعلى وجه الخصوص، قد يعمل كمعدِّل عن غير قصد إذا كتبت بسرعة كبيرة. هذا ليس خطأ في xcape، ولكنه نتيجة لا مفر منها لاستخدام هاتين الأداتين معًا بهذه الطريقة. على سبيل المثال، يمكننا جعل شريط المسافة يعمل كمفتاح ctrl إضافي عند الضغط عليه (على غرار Space2ctrl) مع التسلسل التالي من الأوامر.
# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"
# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"
# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"
إذا كنت معتادًا على إعادة تعيين رموز المفاتيح إلى أنظمة المفاتيح (على سبيل المثال، باستخدام xmodmap)، فهناك مشكلتان قد تواجههما.
ستحتاج إلى إعادة تشغيل xcape بعد كل مرة تقوم فيها بتعديل التعيين من رموز المفاتيح إلى أنظمة المفاتيح (على سبيل المثال، باستخدام xmodmap)، وإلا سيظل xcape يستخدم التعيين القديم.
يجب أن يحتوي المفتاح الذي ترغب في إرساله على رمز مفتاح محدد. على سبيل المثال، مع التعيين الافتراضي Control_L=Escape
، لا تزال بحاجة إلى مفتاح هروب محدد في تعيين xmodmap الخاص بك. (يمكنني التغلب على هذا باستخدام 255، الذي لا تستطيع لوحة المفاتيح إرساله).
ابحث عن أحدث إصدار على https://github.com/alols/xcape
يمكن الوصول إلى المؤلف على Albin dot olsson على gmail dot com