Як в Linux я можу зіставити SHIFT_L / SHIFT_R, якщо натиснути без додаткової клавіші?


13

Сьогодні я знайшов цю дуже приємну статтю Стівена Лоша, в якій він представляє пару підвищення продуктивності відображення клавіатури. Серед них динамічне відображення лівої та правої клавіш зсуву.

Ідея

Якщо натиснути Shift_L або Shift_R без додаткової клавіші, вони відображаються відповідно до '(' і ')', інакше вони функціонують як зазвичай.

Проблема

Він усе це робить під OSX. Я намагаюся цього досягти і під Linux. Для цього немає простого способу, оскільки, наскільки я розумію, ви не можете використовувати xmodmap для налаштування однієї клавіші для Shift_L поодинці, а іншої для Shift, коли використовується як модифікаційний ключ.

Я трохи погуглився і знайшов людей, які намагаються зробити те саме під Windows, що, мабуть, можливо за допомогою AutoHotKey, але я не зміг знайти нічого для Linux.

Чи є спосіб вирішити це в Linux?


Я не пробував цього, але це може допомогти askubuntu.com/q/24916/11352
Мансуро

2
Це майже дублює на це питання . =)
теїка казура

Відповіді:


4

Оце Так! Коментар користувача теїка казура до оригінального питання є цілком правильним - це не лише те, що це фактично дублікат цього іншого питання , але відповідь, надана там ("використовувати xcape "), вирішує цю проблему!

Після клонування репортажу xcape і компіляції (спочатку мені довелося встановити libXtst-devel на свій ящик Fedora), я зміг отримати точну запитувану поведінку за допомогою наступної команди:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Після загальнодоступного тестування, здається, він працює надзвичайно добре. Приємно!

Інші параметри

Якщо ви використовуєте клавішу Shift як модифікатор миші (тобто якщо ви коли-небудь щось клацніть), напевно, вам захочеться включити опцію таймауту xcape і знайти зручне значення тайм-ауту, щоб соло клавіші Shift натискали в поєднанні з мишею don не створювати помилкових дужок. З xcape README:

-t <timeout ms>

Якщо утримувати ключ довше, ніж цей час очікування, xcape не генерує ключову подію. За замовчуванням - 500 мс.

Таким чином, включивши -tпрапор із значенням тайм-аута, який працює для вас, ви все одно зможете натискати клавішею миші, поки ви утримуєте Shift принаймні timeout ms мілісекунд.

(Знову ж таки, признаю теїку казуру за вказівку іншого питання, а також на don_crissti за оригінальну відповідь.)


Одна з проблем цього методу полягає в тому, що я досить часто натискаю [Shift] + [LMouse], щоб вибрати текст у редакторах. Цікаво, що Sublime Text також використовує [Ctrl] + [LMouse], тому питання про перезапис [Ctrl] також викликає проблеми.
AnnanFay

@Annan Ви експериментували з налаштуванням режиму очікування xcape? З README: " -t <timeout ms>Якщо ви тримаєте клавішу довше, ніж цей час очікування, xcape не генерує ключову подію. За замовчуванням 500 мс." ... Якщо xcape не втручається у події відключення модифікатора (я не можу пригадати), це не дозволяє генерувати помилкові натискання клавіш, при цьому все ж дозволяючи використовувати його як модифікатор вибору миші, якщо ви тримаєте його досить довго .
FeRD

@Annan Це чудово чути, я оновив свою відповідь, щоб запропонувати використання -tпрапора!
FeRD

1

Це цікавий виклик, і я погоджуюся з тим, що xinput, здається, не ідеально підходить. Я провів деякий час, обмінюючись здібностями xmodmap, і настільки розчаровуюче наблизився до досягнення того, що ти хочеш зробити ..., не маючи насправді доїхати туди.

Використовуючи xmodmap, можна призначити батьківський ліворуч як зміщений клавішний символ на клавіші зсуву ліворуч:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

які сорти працюють, принаймні, під час тестування на моїй коробці Fedora 17, але не задовільно. Я виявив, що при такому картографуванні клавіша перемикання все ще функціонувала нормально і не створювала помилкових паронів, але (розчаровуючи) вона також не створювала надійних лівих паронів. З будь-якої причини ключ не здається надійно модифікувати себе , що порушує його зміщене призначення ... спочатку. З будь-якої причини, натискання лівої зміни кілька разів поспіль, в кінцевому підсумку призведе до того, що вона почне виробляти ліві парени, але лише після четвертої чи п’ятої преси.

Одне поведінку я зробив повідомлення, однак, що ви могли б бути в змозі працювати з як «досить близько» аналог: я виявив , що після відображення parenleft і parenright на Shift_L і Shift_R, я міг надійно ввести дужки шляхом «прокатки» по обидві клавіші зсуву - іншими словами, за допомогою цього відображення:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

Якщо натиснути Shift_L, а потім Shift_R, то випустити обидва, виведе право-батьківське або ліве-батьківське в іншому напрямку. (Звичайно, батьківські відображення можна було змінити; я не міг повністю визначити, який спосіб відчував себе більш "природним".)

Це було так близько, як я прийшов до досягнення точної поведінки, яку ви шукаєте; не здається, що це можливо, використовуючи лише xmodmap.

Я був напівпереконаний, що це просто неможливо, період, але тоді я зрозумів, що є принаймні одна клавіша, яка функціонує саме так, як ви описуєте: клавіша Super ("Windows"). Під Gnome Shell це клавіша модифікатора (mod4), яка створює інший ефект (спрацьовуючи Огляд), коли натискається окремо. Тож, принаймні теоретично, можливо здійснити бажане перевантаження клавіш таким же чином.

... Але я абсолютно не маю уявлення, як це було б зробити, або наскільки інвазивно було б зануритися в необхідну обробку кожного разу, коли ви натискаєте клавішу Shift. :-)


0

можливо, подивіться xbindkeys, щоб змінити відображення ключів або просто знайти хороший плагін кодування для vim чи gedit або все, що ви хочете використовувати або кодувати свій власний.

інструменти для зміни ключових карт /programming/6812/mapping-my-custom-keys-in-debian

можливо, http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-14.html

і написати сценарій для його включення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.