Use keyboard shortcuts, regardless of the keyboard layout

Good afternoon!

To use keyboard shortcuts to the user with different from the Latin keyboard layout, must switch it first. It is not too convenient.

Maybe it makes sense to add bindings to the file app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 for the keys that relevant to Latin keys?

Here is implementation for users with a Cyrillic keyboard:

'№':               {handler: 'goToPost', anonymous: true},
'\\':              {handler: 'toggleSearch', anonymous: true},
'+':               {handler: 'toggleHamburgerMenu', anonymous: true},
',':               {handler: 'showHelpModal', anonymous: true},
'ю':               {click: '.alert.alert-info.clickable', anonymous: true}, // show incoming/updated topics
'и':               {handler: 'toggleBookmark'},
'с':               {handler: 'createTopic'},
'ctrl+а':          {handler: 'showPageSearch', anonymous: true},
'command+а':       {handler: 'showPageSearch', anonymous: true},
'ctrl+з':          {handler: 'printTopic', anonymous: true},
'command+з':       {handler: 'printTopic', anonymous: true},
'в':               {postAction: 'deletePost'},
'у':               {postAction: 'editPost'},
'end':             {handler: 'goToLastPost', anonymous: true},
'command+down':    {handler: 'goToLastPost', anonymous: true},
'а':               {handler: 'toggleBookmarkTopic'},
'п р':             {path: '/', anonymous: true},
'п д':             {path: '/latest', anonymous: true},
'п т':             {path: '/new'},
'п г':             {path: '/unread'},
'п с':             {path: '/categories', anonymous: true},
'п е':             {path: '/top', anonymous: true},
'п и':             {path: '/bookmarks'},
'п з':             {path: '/my/activity'},
'п ь':             {path: '/my/messages'},
'home':            {handler: 'goToFirstPost', anonymous: true},
'command+up':      {handler: 'goToFirstPost', anonymous: true},
'о':               {handler: 'selectDown', anonymous: true},
'л':               {handler: 'selectUp', anonymous: true},
'д':               {click: '.topic-post.selected button.toggle-like'},
'ь ь':             {handler: 'setTrackingToMuted'}, // mark topic as muted
'ь к':             {handler: 'setTrackingToRegular'}, // mark topic as regular
'ь е':             {handler: 'setTrackingToTracking'}, // mark topic as tracking
'ь ц':             {handler: 'setTrackingToWatching'}, // mark topic as watching
'щ':         		 {click: '.topic-list tr.selected a.title', anonymous: true}, // open selected topic
'з':               {handler: 'showCurrentUser'},
'й':               {handler: 'quoteReply'},
'к':               {postAction: 'replyToPost'},
'ы':               {click: '.topic-post.selected a.post-date', anonymous: true}, // share post
'shift+о':         {handler: 'nextSection', anonymous: true},
'shift+л':         {handler: 'prevSection', anonymous: true},
'shift+з':         {handler: 'pinUnpinTopic'},
'shift+к':         {handler: 'replyToTopic'},
'shift+ы':         {click: '#topic-footer-buttons button.share', anonymous: true}, // share topic
'shift+я shift+я': {handler: 'logout'},
'е':               {postAction: 'replyAsNewTopic'},
'г':               {handler: 'goBack', anonymous: true},
'ч к':             {click: '#dismiss-new,#dismiss-new-top,#dismiss-posts,#dismiss-posts-top'}, // dismiss new/posts
'ч е':             {click: '#dismiss-topics,#dismiss-topics-top'} // dismiss topics
4 „Gefällt mir“

My concern here is around the overlapping letters like a and e.

Perhaps a site setting to switch this for communities that use Cyrillic? Which locales do we have now that use this layout?

3 „Gefällt mir“

a and а might look the same, but are different characters: a а

Same with e and е. I expect users of Cyrillic keyboards will get that immediately.

5 „Gefällt mir“

Here are the Cyrillic-Latin keyboard:

I mean here that if at the moment I have Cyrillic layout, then i should switch it (Shift+Alt) to Latin for Discourse keyboard shortcuts using.

I propose to add additional bindings to resolve this issue, for example:

  • for share: 's,ы': {click: '.topic-post.selected a.post-date', anonymous: true}
  • for likes: 'l,д': {click: '.topic-post.selected button.toggle-like'}
    etc. There is no overlapping.
1 „Gefällt mir“

Ja, +1

Es ist nervig, wenn die Tastenkürzel in manchen Belegungen nicht funktionieren.

z. B. funktioniert Strg+Ы in den meisten Apps wie Strg+S, und sogar auf Discourse funktioniert Strg+:ru: А wie Strg+F. Andere Kürzel wie k und j funktionieren hier jedoch im russischen Layout nicht.

1 „Gefällt mir“

Ich bin offen für einen PR, der dies behebt. Im Team haben wir niemanden mit einer russischen Tastaturbelegung.

Funktioniert Gmail hier wie erwartet?

2 „Gefällt mir“

Ja, und auch YouTube.

Es sollte einfach zu testen sein: Du kannst einfach ein weiteres Layout in deinem Betriebssystem hinzufügen und dieselben Tasten drücken, wie du es normalerweise tust. Außerdem sind in allen Betriebssystemen virtuelle Bildschirmtastaturen enthalten.


Bezüglich der im ersten Beitrag vorgeschlagenen Umgehungslösung: Wäre es nicht besser, die Tastencodes anstelle der Buchstaben jedes nicht-lateinischen Layouts zu verwenden? Soweit ich weiß, sind diese überall gleich.

3 „Gefällt mir“