-
Notifications
You must be signed in to change notification settings - Fork 171
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
英語配列のキーボードで Alt + ; を入力すると 日付挿入ではなく時間挿入になる #116
Comments
英語キーボードが手元にないので再現できない……(´Д`) |
Win10ならコンパネで入力言語を追加できるはず。物理的には英語キーボードじゃなくてもOSがエミュレートしてくれます。 ぼくもまだ試せてないんですが 😢 ちょっと追記: |
日本語キーボード(設定)では [;+], [:*] の刻印がある日本語キーボードのキーに対して仮想キーコード 187, 186 に対応するコマンドが TranslateAccelerator により送られてきます。英語キーボード(設定)では同じキーに対して 186, 222 の仮想キーコードに対応するコマンドが送られてきます(ちなみに 187 は [^~] の刻印があるキーに対応する)。 国により多様性があるキーボードのキーを、Unicode で文字を扱うように 256 種類の ID(※) で識別することはできないのでしょう。※CommonSetting_KeyBind.m_VKeyToKeyNameArr[] のサイズが 256+10。 現在の取り扱いに準じた対応としては、キー割り当ての設定に「^(英語')」「@(英語`)」とあるように、ラベルを「:(英語;)」にすることかなと思います。 |
「;(英語=)」もかな。 |
実は英語版がなんかおかしいのは前々から気付いておりました。主に切り替え時の処理のことを言ってますが、翻訳が?なところも多々あります。 この先どこかで、多言語対応をもう一度考え直す時が来ると思っています。そんなに遠くない未来に。 それまでは、対応すべき既知の課題として据え置きたいというのが現段階での所感です。 |
噛み合いませんね。仮想キーコードを介するアクセアレータキーの処理により、各言語キーボードに配された物理キーを識別することができています(※日本語キーボード(物理)で英語キーボード(設定)を利用すると[変換]キーと[カタひら]キーの識別ができませんが、これはあるはずのない余分なキーがあることによる例外的状況)。そして、日本語キーボードの [;+] キーと英語キーボードの [;:] の間に仮想キーコードの共通性が期待できないというのが今回の原因。そういう期待を抱かせないために、仮想キーコードにどう紛らわしくないラベルを貼り付けるかというのが課題。UI の多言語対応とは切り離されるべきキーボードの使い分けに関する問題で、でも現在は 人的リソース以外の理由で、現状に即した対応をせずに据え置きたい理由があるとは飲み込めません。 |
すみません。どこで食い違っているのかよくわかっていません。
据え置きたい理由は人的リソースがもったいないからです。 正確な情報ではないかも知れないんですが、 考えてみてください。 コンパネから入力言語を追加して英語モードに切り替えた場合、 物理キーコードを仮想キーコードに変換する、という処理の性質上、
結局、それが本質なのかも知れません。 鍵面に「つ」と出てるなら「つ」でいいじゃん、といえばそれまで。 自分で探したものじゃないんですが、旧掲示板にこんなログがあったみたいです。
多言語対応と切り離して本件の対応を進めることを止めはしないです。 |
ちなみに僕の環境はPCはハードウェア的には日本語キーボードですがOSのシステムロケールは英語にしてます。キーボード配列とシステムロケールは別軸の概念という認識。 P.S. |
見た目(キー割り当てのラベル)の修正提案ですから当然です。 そしてそこからですけれど、UI の多言語対応はこの問題と無関係だと考えていますが勘違いでしょうか。無関係の問題を持ち出して問題を大きくしているように感じます。 先のコメントで 仮想キーコードの下に物理キーコードというものがあることを自分は認識していませんでしたけれど、berryzplus さんは物理キーコードを読んで TranslateAccelerator に渡す前に独自に仮想キーコードに変換することを目論んでいるのでしょうか。これも先の見通しのない大きな問題を持ち出して、目前の小さな問題を先送りしているように感じます。 サクラエディタは日本語キーボードにしか対応していないのではないですか? おそらく
対応策は最初に書きました。原因と解決すべき課題は1つ前に書きました。大それた考えは持っていません。(自分もちょっとだけ触れましたが)無関係な多言語対応を持ち出してストップをかけ、端緒にもついていない大きな話(物理キーコード)を持ち出したのは berryzplus さんです。これが「噛み合わないね」ということです。お互いに明後日の方向を向いて自分がそこにあると信じている問題だけを論じているんです。どちらが焦点を外しているかは知りません。 |
@ds14050 さん みんなが同じ考えで同じ方向に向かって進むのもチームの在り方の一つだと思います。 ぼくもGitHubでのやり取りには慣れていません。 結論を繰り返します。
書き方がよくないのかも知れませんが「俺がやる!」で進めていただいて大丈夫です。 ぼくは自分がいま心配していることに基づいて「いまやるべきじゃない」と書きました。 |
ぼく自身はこのやり取りに意義はあったと考えています。 @ds14050 さんのおかげで本件について理解を深めることができました。 本件の課題内容: 原因: 対策: sakura/sakura_core/func/CKeyBind.cpp Lines 92 to 111 in b03ddd7
ここで MapVirtualKey 関数を使って仮想キーコード → スキャンコードの変換を行い、アクセラレータには変換で得られたスキャンコードを渡すようにすれば現在の入力ロケールに対応したショートカットが作れるようになるはず。もちろん、起動中に入力言語が変更されたときにアクセラレータを再作成する処理の追加も必要ですが。 多言語対応とはまったく切り離して進められそうですね・・・ 😢 |
初めて話が噛み合った気がします。自分は MapVirtualKey 関数の存在を今初めて知りました。スキャンコードや物理キーコードについてもです。これが自分にとっての意義です。
これですが、卑怯と言われようとも自分はやるとは言いません。それは意欲と知識と問題意識のある人が新機能としてインプリメントするものであって、これまでのサクラエディタの延長にはなく、この Issue のスコープからも外れていると考えるからです。 報告者は「日付挿入ではなく」という表現で望む結果を示していますが、キーボード種別が区別できるようになったとして、日本語キーボードの [;+] キーと英語キーボードの [;:] キーなど、一部の記号キーをあえて同一視することにハック以上の必然性や合理性が見いだせるでしょうか(反語ではありませんが否定的に見ています)。 berryzplus さんの考える対策は、日本語キーボードと US ASCII 配列のキーボードのどちらかが使えるだけでは満足できない、典型的日本人からは外れる人達の使い勝手を改善する、根本的に正しい処理かもしれませんが、それは別の話です。 |
訂正。使い勝手が改善される対象は「典型的日本人からは外れる人達」ではありませんでした。(典型的日本人も含めて)複数種類のキーボードを切り替えて使う人達でした。 |
いつか何かの参考になるかなと置いていきます。 たとえばキーボードの切り替えによりコロンの入力方法が [:*] キー単独入力から [Shift]+[;:] の2キー入力に変わったとします。そのとき [Alt]+[:*] に割り当てられていた機能が [Alt]+[Shift]+[;:] へ割り付けられるように、仮想キーコードを変換の上アクセラレータテーブルに登録します。こういう変換です。
キートップの文字 (+[Ctrl]) (+[Alt]) で呼び出される機能が決まるため、[Alt]+[;:] や [Alt]+[Shift]+[;:] の実行結果が予測可能なものになります。 また、キー割り当て画面の「^(英語')」「@(英語`)」という、実用的ではあるがアドホックな併記が無用のものになります。しかしこれは仕様変更を意味します。 「キー割り当て」の GUI が、日本語キーボードの配列が目の前にない人にとっては使いにくいものになりますが、(^ を Shift すると何になるんだっけ?)、これまでは日本語キーボードの使用を要求していたようなものなので、一概に悪くなったとは考えていません。 |
えーと、手元に英字キーボードが無かったものでこれまで傍観してましたが、最近USキーボードを入手しましたのでこの議論に参加させていただきます。 技術的な話がずいぶんと多く交わされているように見受けられたのですが、「要件がどうあるべきか」について意識は合っていますでしょうか。 まずは要件についての合意をとり、その後に技術の話をしたいです。 現在のサクラエディタのショートカットキーの割り当て
現在のショートカットキーの割り当て根拠上述のような割り当てになっている根拠は、おそらく Microsoft Excel のショートカットキーの慣習を真似たものと想像しています。以下に Excel のショートカットキーを載せておきます。 Excel 日本語版でのショートカットキー割り当て
Excel では Ctrl との組み合わせになっているのに対して、サクラエディタでは Alt が用いられている根拠については良く分かりません。 Excel 英語版でのキーボードショートカット割り当て、、を紹介する前にまず先にUSキーボードの外観を共有しておきます。 画像を見て分かるとおり、USキーボードでは「;」と「:」が同一キーに割り当てられています。 Excel 英語版でのショートカットキー割り当て上記の話を踏まえた上で、Excel 英語版でのショートカットキーの割り当てを紹介します。
上記を踏まえての対応方針の提案提案1USキーボード利用の際には以下のようなショートカットキー挙動をとるように対応する。
提案2本題よりややスコープを広げた話になってしまいますが、そもそもこれらのショートカットキーに Alt が用いられていることに違和感があります。 やや破壊的変更が許されるのであれば、今回の話に挙がっているショートカットキーについては完全に Excel に合わせてしまいたい気持ちが強いです。
ご意見ください以上、どうでしょうか。 要件について既に暗黙的な合意がとられていたのだとしたらご容赦ください。 |
ds14050 さんのこのコメントを見る限りは「Alt + Shift + ; … 時刻」の意識を持っていることは汲み取れました、ということを追記しておきます。(それ以外の方が同じ意識を持っているかについては今の時点では自分から見ると不明) |
キー割当の要件は考え直す必要があると思っています。 やるとしたら提案1の対応になります。アクセラレータ作成は元々動的作成なので、日本語セミコロンを英語コロン+shiftに動的に再構成する処理を組込みます。でもこれは、日本語キーボードで見た時のセミコロンにshiftキーとの組み合わせを使っていたら破綻します。日英で割当が違うキーはこれだけじゃないので、他のキーでも同じ問題が起こり得ます。 対策案として書きかけたことは、この問題を多言語対応の一部として捉え総合的に仕様を見直すということです。例えば、英語レイアウトのキー割当を用意して切替できるようにすれば動的振り替えで起こる衝突を回避できます。 割当が被ったらどうするか、現在のレイアウトであり得ない組み合わせが来たらどうするか、を決めておけば動的変換の対応はすぐに着手できます。 提案2については基本同意ですが、やるなら別件として話したいです。 |
対応は分割するとしても、提案2を見据えておくかやめておくかは早めに考えておきたいです。 というのは提案2を採用する場合には、対応順序としては先にCtrl対応をしてからその次に英字キーボード対応をしたいとかんがえているからです。 |
Ctrl 対応というのが EXE 埋め込みの初期設定を変更することであれば特に意見はありません。 バージョンアップではエディタの使用に際して影響はありませんし、独自の設定を出すよりも長いものに巻かれておいたほうが覚えることが少なくて済みます。 コード上の変更点が静的データまわりに留まるので、先に Ctrl 対応をしたいという動機につながらず勘違いしているかもですが……。 提案1が実現しなければキーボード別に対応する手段がないので、提案2の Ctrl 対応はこういう結果にならざるをえません。
これだけを先にやってしまいたい理由はわかりかねます(反対はしません)。 |
EXE 埋め込みの初期設定ということで合ってます。
言葉が足りてませんでした(というかまったく説明してませんでした)が、理由は以下です。
あと、おまけの情報としては「Alt + Shift + キー」というショットカットキーをあまり見たことがなかったので実装でハマったら嫌だな、という気持ちがあり、それも Ctrl 対応を先にやりたい理由のひとつでした。ですが、そういえば VS Code のショートカットキーで Alt + Shift + F でコード整形というのがあったのでこれについては懸念としては考えなくて良いところでした。 キーボードの特性上、確か同時押下が認識できない組み合わせというのがあった記憶があり、そういう理由であまり実績の無いキー組み合わせを採用したくない気持ちがありましたが、少なくとも上に挙げたように「Alt + Shift + キー」については問題なさそうなので、まぁこの理由については「こういうことを考えていたよ」程度のメモ程度に捉えてください。 |
「Excel に合わせる」ということから Excel 英語版を除外せずに考えていましたが、それは参考情報で、Excel 日本語版が第一なんですね。それは納得できることです。自分の手元には参考画像を撮れるキーボードがありませんから。 こういう説明がありました>「キーボードの同時押しについて - forPCActionGamer Wiki*」 心配するほどのことではない気がしますし、修飾キーの組み合わせが認識できないようなキーボードは投げ捨てた方がいいでしょう。 |
説明してなかったので説明します。
この中の、
がどういうことかについて。 セミコロンに割り当てられた機能の一覧
日本語レイアウトなキーボードのセミコロンは単独で押せるキーです。
個人的には「捨てる」が一番自然な動きと考えています。 懸案の変更 [Alt + ;] → [Ctrl + ;]については定数値を書き換えるだけなので、決めの問題の認識です。 sakura/sakura_core/func/CKeyBind.cpp Lines 800 to 801 in cc8a4bd
すでに割り当てられてる機能はどうしましょ?の議論なり、変更宣言なりが必要です。 |
日本語 Shift+[:*] は *記号を生成しますので、英語キーボードの Shift+[8*] に割り当てます。Shift+コロン(:)を英語キーボードで割り当てることはできません。仮想キーコードを割り当てる対象としてそういう物理的なキーが存在しないためです。つまり最初から考える必要がない。 いかがでしょうか。 |
キー割り当てをキーボード毎に持つことを避けたい理由について書きます。
今思いついたのは以上です。 |
言語別のレイアウトはメンテが大変そうですね。 現実案として、先頭から順に変換しつつ割り当てていき、被ったりあり得なかったりしたら「捨て」がいいのかな、と。 時間があいたら作って見ます。 |
このコメントは FYI ということでよろしくお願いします。 セミコロン(;)とコロン(:)を正しく区別してください。最初から気になっていたので必ず記号を併記してきました。
これがどういう状況を指すのかがわかりません。#issuecomment-399733166 と同じことを指すのだと思いますが、それについて書いた #issuecomment-399738565 を理解してくだされば、少なくともどちらかが勘違いして間違っていることがわかります。ただ無視されたのなら悲しい。通じなかったのなら説明します。 サクラエディタのキー割り当ての設定画面を見てください。Shift を使って入力する以下の記号
この漠然とした疑問を自分も最初は持っていましたが、berryzplus さんの一番最初のコメントよりも前に解消していました。コメントする前に時間をかけて CreateAcceleratorTable のドキュメントを読み、テストプログラムを書き、実験していたのです。時間があるからできることですが。 |
リンクをクリックしても該当コメントに飛んでくれないのでどのコメントの話をしてるか分かりませんでした。ブラウザのせいかなぁ…。
|
通じていてなによりです。
ページ内リンクです。Firefox 52.8.0 では機能しています。 |
|
No description provided.
The text was updated successfully, but these errors were encountered: