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개의 좋아요

네, +1

일부 키보드 레이아웃에서 단축키가 작동하지 않으면 정말 짜증나죠.

예를 들어, 대부분의 앱에서 Ctrl+Ы가 Ctrl+S처럼 작동하고, Discourse에서도 Ctrl+:ru: А가 Ctrl+F처럼 작동합니다. 하지만 k, j 같은 다른 단축키들은 러시아어 레이아웃에서는 여기에서 작동하지 않아요.

1개의 좋아요

이 문제를 수정하는 PR을 환영합니다. 팀에 러시아어 키보드 레이아웃을 사용하는 사람이 없거든요.

GMail은 여기서 예상대로 작동하나요?

2개의 좋아요

네, 유튜브도 작동합니다.

테스트하기 쉬울 것입니다. 운영체제(OS)에 다른 레이아웃을 추가하고 평소처럼 같은 키를 누르면 됩니다. 또한 모든 OS에는 가상/온스크린 키보드가 포함되어 있습니다.


첫 번째 게시물에서 제안된 우회 방법에 대해, 모든 비라틴어 레이아웃의 문자 대신 키 코드를 사용하는 것이 더 나을 수 있습니다. 제 이해로는 모든 곳에서 키 코드가 동일하기 때문입니다.

4개의 좋아요