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 إعجابات

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 إعجابات

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 إعجابات

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)

أجل، أوافق تماماً

من المزعج عندما لا تعمل الاختصارات في بعض تخطيطات لوحة المفاتيح.

مثلاً، يعمل Ctrl+Ы كـ Ctrl+S في معظم التطبيقات، وحتى على Discourse يعمل Ctrl+:ru: А كـ Ctrl+F. لكن اختصارات أخرى مثل k وj لا تعمل هنا عند استخدام تخطيط اللغة الروسية.

إعجاب واحد (1)

أنا منفتح على قبول طلب سحب (PR) يصحح هذه المشكلة، حيث لا يتوفر لدينا أي شخص على فريقنا يستخدم لوحة مفاتيح باللغة الروسية.

هل يعمل Gmail كما هو متوقع هنا؟

إعجابَين (2)

نعم، ويوتيوب أيضًا.

يجب أن يكون الاختبار سهلاً، يمكنك ببساطة إضافة تخطيط آخر في نظام التشغيل الخاص بك والضغط على المفاتيح نفسها التي تضغط عليها عادةً. كما أن هناك لوحات مفاتيح افتراضية/على الشاشة مدمجة في جميع أنظمة التشغيل.


بشأن الحل البديل المقترح في المنشور الأول، ربما يكون من الأفضل استخدام أكواد المفاتيح بدلاً من أحرف كل تخطيط غير لاتيني؟ كما أفهم الأمر، فهي متطابقة في كل مكان.

3 إعجابات