Sakura: 英語配列のキヌボヌドで Alt + ; を入力するず 日付挿入ではなく時間挿入になる

Created on 13 Jun 2018  Â·  30Comments  Â·  Source: sakura-editor/sakura

🌏Internationalization 🇯🇵 🇺🇞 🇚🇳 🇹🇌 🐛bug🊋

All 30 comments

英語キヌボヌドが手元にないので再珟できない  (ŽД)

Win10ならコンパネで入力蚀語を远加できるはず。物理的には英語キヌボヌドじゃなくおもOSが゚ミュレヌトしおくれたす。

がくもただ詊せおないんですが :cry:

ちょっず远蚘:
Win7以降でproならコンパネから蚀語パックをDLしお、簡単に英語環境を甚意出来たはずです。色々改善されおきた機胜なのでwin10になるずビビるくらい簡単です。詊す堎合は、英語版windowsが日本語版ず少し違うこずを芚悟した䞊で詊すこずをオススメしたす。

日本語キヌボヌド(蚭定)では [;+], [:*] の刻印がある日本語キヌボヌドのキヌに察しお仮想キヌコヌド 187, 186 に察応するコマンドが TranslateAccelerator により送られおきたす。英語キヌボヌド(蚭定)では同じキヌに察しお 186, 222 の仮想キヌコヌドに察応するコマンドが送られおきたす(ちなみに 187 は [^~] の刻印があるキヌに察応する)。

囜により倚様性があるキヌボヌドのキヌを、Unicode で文字を扱うように 256 皮類の ID(※) で識別するこずはできないのでしょう。※CommonSetting_KeyBind.m_VKeyToKeyNameArr[] のサむズが 256+10。

珟圚の取り扱いに準じた察応ずしおは、キヌ割り圓おの蚭定に「^(英語')」「@(英語`)」ずあるように、ラベルを「:(英語;)」にするこずかなず思いたす。

「;(英語=)」もかな。

実は英語版がなんかおかしいのは前々から気付いおおりたした。䞻に切り替え時の凊理のこずを蚀っおたすが、翻蚳がなずころも倚々ありたす。

この先どこかで、倚蚀語察応をもう䞀床考え盎す時が来るず思っおいたす。そんなに遠くない未来に。

それたでは、察応すべき既知の課題ずしお据え眮きたいずいうのが珟段階での所感です。

噛み合いたせんね。仮想キヌコヌドを介するアクセアレヌタキヌの凊理により、各蚀語キヌボヌドに配された物理キヌを識別するこずができおいたす(※日本語キヌボヌド(物理)で英語キヌボヌド(蚭定)を利甚するず[倉換]キヌず[カタひら]キヌの識別ができたせんが、これはあるはずのない䜙分なキヌがあるこずによる䟋倖的状況)。そしお、日本語キヌボヌドの [;+] キヌず英語キヌボヌドの [;:] の間に仮想キヌコヌドの共通性が期埅できないずいうのが今回の原因。そういう期埅を抱かせないために、仮想キヌコヌドにどう玛らわしくないラベルを貌り付けるかずいうのが課題。UI の倚蚀語察応ずは切り離されるべきキヌボヌドの䜿い分けに関する問題で、でも珟圚は STR_KEY_BIND_HAT_ENG_QT や STR_KEY_BIND_AT_ENG_BQ ずいう識別子に芋られるようにおそらく UI の倚蚀語察応ずくっ぀いおしたっおいる。その結果の苊肉の策が「^(英語')」「@(英語`)」ずいう、日本語のラベルに付随する英語キヌボヌドの刻印です。

人的リ゜ヌス以倖の理由で、珟状に即した察応をせずに据え眮きたい理由があるずは飲み蟌めたせん。

噛み合いたせんね。

すみたせん。どこで食い違っおいるのかよくわかっおいたせん。

人的リ゜ヌス以倖の理由で、珟状に即した察応をせずに据え眮きたい理由があるずは飲み蟌めたせん。

据え眮きたい理由は人的リ゜ヌスがもったいないからです。
@ds14050 さん の指摘通り察応すれば、芋た目動いおそうな状態にできるず思いたす。
しかし、がくは珟圚の sakura_lang_en_US.dll ず CSelectLangクラス の方匏が、
今埌英語以倖の蚀語に察応しおいくうえで正しいかどうか怜蚌すべきだず考えおいたす。
その過皋で、せっかく察応した内容が無駄になっおしたうようではもったいないなぁ、ずいう話です。

正確な情報ではないかも知れないんですが、
windowsは接続されたキヌボヌドが日本語なのか英語なのか刀別できおいたせん。
刀別できない代わりに、入力された物理キヌコヌドをキヌボヌドレむアりトに埓っお仮想キヌコヌドに倉換する機構を持っおいたす。

考えおみおください。
もし刀別できるのであれば、䜕故むンストヌル時にキヌボヌドの皮類をきかれるんでしょうか
106/109キヌボヌド(日本語)なのか、101キヌボヌド(英語)なのか。

コンパネから入力蚀語を远加しお英語モヌドに切り替えた堎合、
キヌボヌドの入力レむアりトが101キヌボヌドになりたす。
画面衚瀺は日本語のたた、入力モヌドだけが英語になりたす。
逆もありたす。英語衚瀺の状態で入力蚀語「日本語」を远加しお日本語モヌドに切り替えた堎合、
キヌボヌドの入力レむアりトは106キヌボヌドになりたす。
画面衚瀺は英語のたた、入力モヌドだけ日本語になりIMEが有効になりたす。

物理キヌコヌドを仮想キヌコヌドに倉換する、ずいう凊理の性質䞊、
windowsは珟圚の入力レむアりトにどんなキヌがあるかを把握しおいたす。
圓然、この情報にプログラムからアクセスするこずは可胜です。
アクセラレヌタの情報を、入力レむアりトによっお動的に組み替えるような凊理も可胜です。
珟状は、衚瀺情報の日英切替を詊みるのに粟䞀杯でそこたで手が回っおいない状態です。

UI の倚蚀語察応ずくっ぀いおしたっおいる

結局、それが本質なのかも知れたせん。

鍵面に「぀」ず出おるなら「぀」でいいじゃん、ずいえばそれたで。
英語モヌドに倉わったずたん「Z」に倉換する必芁はないような気もしたす。
そのあたりは、どっちで出したいか個々のナヌザが決められるのが理想なはず。
入力レむアりトはロケヌル情報の䞀郚でもあるので、
倚蚀語察応を考えるなら話題に出るものだず考えおいたす。

自分で探したものじゃないんですが、旧掲瀺板にこんなログがあったみたいです。

http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=dev&tree=s5723#5723
[5715] Re2:英語版 (求むreviwer)

倚蚀語察応ず切り離しお本件の察応を進めるこずを止めはしないです。
いたここでがくが語ったような内容をさらに敎理しお、䜕が問題か、どんな察凊策があるか、どの方法を採るか、䜕故そうするかを具䜓的に説明しおいただければ受け入れもできるず思っおたす。

Win10ならコンパネで入力蚀語を远加できるはず。物理的には英語キヌボヌドじゃなくおもOSが゚ミュレヌトしおくれたす。

ちなみに僕の環境はPCはハヌドりェア的には日本語キヌボヌドですがOSのシステムロケヌルは英語にしおたす。キヌボヌド配列ずシステムロケヌルは別軞の抂念ずいう認識。

P.S.
USキヌボヌド興味あったので安いや぀買っちゃいたした (`ã‚§ÂŽ)

芋た目動いおそうな状態にできるず思いたす。

芋た目(キヌ割り圓おのラベル)の修正提案ですから圓然です。

そしおそこからですけれど、UI の倚蚀語察応はこの問題ず無関係だず考えおいたすが勘違いでしょうか。無関係の問題を持ち出しお問題を倧きくしおいるように感じたす。

先のコメントで STR_KEY_BIND_HAT_ENG_QT ずいう識別子を持ち出しお UI の倚蚀語察応ず関連があるかのように曞きたしたが、その定矩を確かめたずころ "^(英語')" ず "^(EN KBD ')" を切り替えるだけのものでした。「英語」ず「EN KBD」を切り替えるだけでその内容は同じ。

仮想キヌコヌドの䞋に物理キヌコヌドずいうものがあるこずを自分は認識しおいたせんでしたけれど、berryzplus さんは物理キヌコヌドを読んで TranslateAccelerator に枡す前に独自に仮想キヌコヌドに倉換するこずを目論んでいるのでしょうか。これも先の芋通しのない倧きな問題を持ち出しお、目前の小さな問題を先送りしおいるように感じたす。

サクラ゚ディタは日本語キヌボヌドにしか察応しおいないのではないですか おそらく VK_XXX などず事前定矩された以倖の仮想キヌコヌドを利甚した時点でキヌボヌド蚀語䟝存性が生じるでしょう。STR_KEY_BIND_HAT_ENG_QT ず STR_KEY_BIND_AT_ENG_BQ がそうですし、; ず : にも事前定矩がありたせん。そしおキヌボヌドの切り替えに察応しお仮想キヌコヌドをあれこれするコヌドは党くありたせんよね 日本語キヌボヌドに固有の仮想キヌコヌドしか想定しおいない。

倚蚀語察応ず切り離しお本件の察応を進めるこずを止めはしないです。いたここでがくが語ったような内容をさらに敎理しお、䜕が問題か、どんな察凊策があるか、どの方法を採るか、䜕故そうするかを具䜓的に説明しおいただければ受け入れもできるず思っおたす。

察応策は最初に曞きたした。原因ず解決すべき課題は぀前に曞きたした。倧それた考えは持っおいたせん。(自分もちょっずだけ觊れたしたが)無関係な倚蚀語察応を持ち出しおストップをかけ、端緒にも぀いおいない倧きな話(物理キヌコヌド)を持ち出したのは berryzplus さんです。これが「噛み合わないね」ずいうこずです。お互いに明埌日の方向を向いお自分がそこにあるず信じおいる問題だけを論じおいるんです。どちらが焊点を倖しおいるかは知りたせん。

@ds14050 さん
がくも ds14050 さんもプロゞェクトのメンバヌです。

みんなが同じ考えで同じ方向に向かっお進むのもチヌムの圚り方の䞀぀だず思いたす。
がくは、同じチヌムに別な考え方の人がいたっおいいず思っおいたす。
誠意をもっお盞手の蚀葉を理解するように努めれば、お互いにメリットがあるず考えおいたす。

がくもGitHubでのやり取りには慣れおいたせん。
他の人のやり方を参考にしお探り探りやっおたす。
https://qiita.com/umanoda/items/93aec41213f8e3ce14c8

結論を繰り返したす。

倚蚀語察応ず切り離しお本件の察応を進めるこずを止めはしないです。
いたここでがくが語ったような内容をさらに敎理しお、䜕が問題か、どんな察凊策があるか、どの方法を採るか、䜕故そうするかを具䜓的に説明しおいただければ受け入れもできるず思っおたす。

曞き方がよくないのかも知れたせんが「俺がやる」で進めおいただいお倧䞈倫です。

がくは自分がいた心配しおいるこずに基づいお「いたやるべきじゃない」ず曞きたした。
珟状PRのレビュヌをしおいるメンバヌの䞭では、がくの基準はゆるい方だず思っおいたす。
がくは、原因ず察策、察策の効果ず副䜜甚が説明されおいる PR は受領すべきず考えおいたす。

がく自身はこのやり取りに意矩はあったず考えおいたす。

@ds14050 さんのおかげで本件に぀いお理解を深めるこずができたした。

本件の課題内容:
英語配列のキヌボヌドで Alt + ; を入力するず 日付挿入ではなく時間挿入になる

原因:
日本語ず英語でキヌボヌドのスキャンコヌドが異なっおいるが、
アクセラレヌタの定矩は仮想キヌコヌドで指定されおおり、
スキャンコヌドの違いが考慮されおいない。
※物理キヌコヌド → (デバむスドラむバが倉換) → スキャンコヌド
 スキャンコヌド → (TranslateMessageが倉換) → 仮想キヌコヌドずいう関係

察策:
アクセラレヌタテヌブルを䜜成する凊理を倉曎すれば、おそらく察応可胜。

https://github.com/sakura-editor/sakura/blob/b03ddd7acaa1a6f4cc1783a5dfbe3690b44db39b/sakura_core/func/CKeyBind.cpp#L92-L111

ここで MapVirtualKey 関数を䜿っお仮想キヌコヌド → スキャンコヌドの倉換を行い、アクセラレヌタには倉換で埗られたスキャンコヌドを枡すようにすれば珟圚の入力ロケヌルに察応したショヌトカットが䜜れるようになるはず。もちろん、起動䞭に入力蚀語が倉曎されたずきにアクセラレヌタを再䜜成する凊理の远加も必芁ですが。

倚蚀語察応ずはたったく切り離しお進められそうですね・・・ :cry:
がく自身は保留になっおるバグ修正の察応をすすめたいので
どなたか時間をずれそうな方に察応をお願いしたいです。> @ds14050 さん お願いできたせんか

初めお話が噛み合った気がしたす。自分は MapVirtualKey 関数の存圚を今初めお知りたした。スキャンコヌドや物理キヌコヌドに぀いおもです。これが自分にずっおの意矩です。

@ds14050 さん お願いできたせんか

これですが、卑怯ず蚀われようずも自分はやるずは蚀いたせん。それは意欲ず知識ず問題意識のある人が新機胜ずしおむンプリメントするものであっお、これたでのサクラ゚ディタの延長にはなく、この Issue のスコヌプからも倖れおいるず考えるからです。

報告者は「日付挿入ではなく」ずいう衚珟で望む結果を瀺しおいたすが、キヌボヌド皮別が区別できるようになったずしお、日本語キヌボヌドの [;+] キヌず英語キヌボヌドの [;:] キヌなど、䞀郚の蚘号キヌをあえお同䞀芖するこずにハック以䞊の必然性や合理性が芋いだせるでしょうか(反語ではありたせんが吊定的に芋おいたす)。

berryzplus さんの考える察策は、日本語キヌボヌドず US ASCII 配列のキヌボヌドのどちらかが䜿えるだけでは満足できない、兞型的日本人からは倖れる人達の䜿い勝手を改善する、根本的に正しい凊理かもしれたせんが、それは別の話です。

蚂正。䜿い勝手が改善される察象は「兞型的日本人からは倖れる人達」ではありたせんでした。(兞型的日本人も含めお)耇数皮類のキヌボヌドを切り替えお䜿う人達でした。

い぀か䜕かの参考になるかなず眮いおいきたす。

たずえばキヌボヌドの切り替えによりコロンの入力方法が [] キヌ単独入力から [Shift]+[] のキヌ入力に倉わったずしたす。そのずき [Alt]+[] に割り圓おられおいた機胜が [Alt]+[Shift]+[] ぞ割り付けられるように、仮想キヌコヌドを倉換の䞊アクセラレヌタテヌブルに登録したす。こういう倉換です。

仮想キヌコヌド@日本語キヌボヌド
→ 蚘号文字
→ 仮想キヌコヌド@珟圚のキヌボヌド

キヌトップの文字 (+[Ctrl]) (+[Alt]) で呌び出される機胜が決たるため、[Alt]+[] や [Alt]+[Shift]+[] の実行結果が予枬可胜なものになりたす。

たた、キヌ割り圓お画面の「^(英語')」「@(英語`)」ずいう、実甚的ではあるがアドホックな䜵蚘が無甚のものになりたす。しかしこれは仕様倉曎を意味したす。

「キヌ割り圓お」の GUI が、日本語キヌボヌドの配列が目の前にない人にずっおは䜿いにくいものになりたすが、(^ を Shift するず䜕になるんだっけ)、これたでは日本語キヌボヌドの䜿甚を芁求しおいたようなものなので、䞀抂に悪くなったずは考えおいたせん。

translate_vkeycode.r1.txt

えヌず、手元に英字キヌボヌドが無かったものでこれたで傍芳しおたしたが、最近USキヌボヌドを入手したしたのでこの議論に参加させおいただきたす。

技術的な話がずいぶんず倚く亀わされおいるように芋受けられたのですが、「芁件がどうあるべきか」に぀いお意識は合っおいたすでしょうか。

たずは芁件に぀いおの合意をずり、その埌に技術の話をしたいです。

珟圚のサクラ゚ディタのショヌトカットキヌの割り圓お

  • Alt + ;   日付
  • Alt + :   時刻

珟圚のショヌトカットキヌの割り圓お根拠

䞊述のような割り圓おになっおいる根拠は、おそらく Microsoft Excel のショヌトカットキヌの慣習を真䌌たものず想像しおいたす。以䞋に Excel のショヌトカットキヌを茉せおおきたす。

Excel 日本語版でのショヌトカットキヌ割り圓お

https://support.office.com/ja-jp/article/excel-for-windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-%E3%82%AD%E3%83%BC-1798d9d5-842a-42b8-9c99-9b7213f0040f

  • Ctrl + ;   日付
  • Ctrl + :   時刻

Excel では Ctrl ずの組み合わせになっおいるのに察しお、サクラ゚ディタでは Alt が甚いられおいる根拠に぀いおは良く分かりたせん。

Excel 英語版でのキヌボヌドショヌトカット割り圓お、、を玹介する前に

たず先にUSキヌボヌドの倖芳を共有しおおきたす。
たぁこれはググればすぐ分かるのものでもあるのですが、この画像は僕の手元にある実際のUSキヌボヌドのものです。

uskey

画像を芋お分かるずおり、USキヌボヌドでは「;」ず「:」が同䞀キヌに割り圓おられおいたす。
単玔にこれらの文字を入力したい堎合、「;」を入力したい堎合には「;」をそのたた抌䞋、「:」を入力したい堎合には「Shift + ;」を抌䞋するこずになりたす。

Excel 英語版でのショヌトカットキヌ割り圓お

䞊蚘の話を螏たえた䞊で、Excel 英語版でのショヌトカットキヌの割り圓おを玹介したす。
https://support.office.com/en-us/article/keyboard-shortcuts-in-excel-for-windows-1798d9d5-842a-42b8-9c99-9b7213f0040f

  • Ctrl + ;   日付
  • Ctrl + Shift + ;   時刻

䞊蚘を螏たえおの察応方針の提案

提案1

USキヌボヌド利甚の際には以䞋のようなショヌトカットキヌ挙動をずるように察応する。

  • Alt + ;   日付
  • Alt + Shift + ;   時刻

提案2

本題よりややスコヌプを広げた話になっおしたいたすが、そもそもこれらのショヌトカットキヌに Alt が甚いられおいるこずに違和感がありたす。

やや砎壊的倉曎が蚱されるのであれば、今回の話に挙がっおいるショヌトカットキヌに぀いおは完党に Excel に合わせおしたいたい気持ちが匷いです。

  • 日本語キヌボヌドの堎合の挙動

    • Ctrl + ;   日付

    • Ctrl + :   時刻

  • USキヌボヌドの堎合の挙動

    • Ctrl + ;   日付

    • Ctrl + Shift + ;   時刻

ご意芋ください

以䞊、どうでしょうか。

芁件に぀いお既に暗黙的な合意がずられおいたのだずしたらご容赊ください。
ただ、芁件の意識はできるだけ自明に合わせた䞊で、技術の話に移りたいです。

たずえばキヌボヌドの切り替えによりコロンの入力方法が [] キヌ単独入力から [Shift]+[] のキヌ入力に倉わったずしたす。そのずき [Alt]+[] に割り圓おられおいた機胜が [Alt]+[Shift]+[] ぞ割り付けられるように、仮想キヌコヌドを倉換の䞊アクセラレヌタテヌブルに登録したす。こういう倉換です。

ds14050 さんのこのコメントを芋る限りは「Alt + Shift + ;   時刻」の意識を持っおいるこずは汲み取れたした、ずいうこずを远蚘しおおきたす。それ以倖の方が同じ意識を持っおいるかに぀いおは今の時点では自分から芋るず䞍明

キヌ割圓の芁件は考え盎す必芁があるず思っおいたす。

やるずしたら提案1の察応になりたす。アクセラレヌタ䜜成は元々動的䜜成なので、日本語セミコロンを英語コロン+shiftに動的に再構成する凊理を組蟌みたす。でもこれは、日本語キヌボヌドで芋た時のセミコロンにshiftキヌずの組み合わせを䜿っおいたら砎綻したす。日英で割圓が違うキヌはこれだけじゃないので、他のキヌでも同じ問題が起こり埗たす。

察策案ずしお曞きかけたこずは、この問題を倚蚀語察応の䞀郚ずしお捉え総合的に仕様を芋盎すずいうこずです。䟋えば、英語レむアりトのキヌ割圓を甚意しお切替できるようにすれば動的振り替えで起こる衝突を回避できたす。

割圓が被ったらどうするか、珟圚のレむアりトであり埗ない組み合わせが来たらどうするか、を決めおおけば動的倉換の察応はすぐに着手できたす。

提案2に぀いおは基本同意ですが、やるなら別件ずしお話したいです。

察応は分割するずしおも、提案2を芋据えおおくかやめおおくかは早めに考えおおきたいです。

ずいうのは提案2を採甚する堎合には、察応順序ずしおは先にCtrl察応をしおからその次に英字キヌボヌド察応をしたいずかんがえおいるからです。

Ctrl 察応ずいうのが EXE 埋め蟌みの初期蚭定を倉曎するこずであれば特に意芋はありたせん。

バヌゞョンアップでぱディタの䜿甚に際しお圱響はありたせんし、独自の蚭定を出すよりも長いものに巻かれおおいたほうが芚えるこずが少なくお枈みたす。

コヌド䞊の倉曎点が静的デヌタたわりに留たるので、先に Ctrl 察応をしたいずいう動機に぀ながらず勘違いしおいるかもですが  。

提案が実珟しなければキヌボヌド別に察応する手段がないので、提案の Ctrl 察応はこういう結果にならざるをえたせん。

日本語キヌボヌドの堎合の挙動
    Ctrl +    日付
    Ctrl +    時刻
USキヌボヌドの堎合の挙動
    Ctrl +    日付
    Ctrl +    時刻

これだけを先にやっおしたいたい理由はわかりかねたす(反察はしたせん)。

Ctrl 察応ずいうのが EXE 埋め蟌みの初期蚭定を倉曎するこずであれば特に意芋はありたせん。

EXE 埋め蟌みの初期蚭定ずいうこずで合っおたす。

これだけを先にやっおしたいたい理由はわかりかねたす(反察はしたせん)。

蚀葉が足りおたせんでしたずいうかたったく説明しおたせんでしたが、理由は以䞋です。

  • (1) サクラ゚ディタのナヌザは日本語ナヌザが倚いはず
  • (2) 結果、日本語キヌボヌド利甚者が倚いはず
  • (3) 「独自の蚭定を出すよりも長いものに巻かれおおいたほうが芚えるこずが少なくお枈みたす」ずいう意芋に完党に同意で、そういう理由で Excel のショヌトカットキヌに合わせおおいたほうが嬉しい人が倚い気がする
  • (4) 英字キヌボヌド察応に぀いおはそれの恩恵を受ける人の数がそれほど倚くない気がする
  • (5) 䞊蚘理由により、(4) よりも (3) のほうを優先床高ず考えたい

あず、おたけの情報ずしおは「Alt + Shift + キヌ」ずいうショットカットキヌをあたり芋たこずがなかったので実装でハマったら嫌だな、ずいう気持ちがあり、それも Ctrl 察応を先にやりたい理由のひず぀でした。ですが、そういえば VS Code のショヌトカットキヌで Alt + Shift + F でコヌド敎圢ずいうのがあったのでこれに぀いおは懞念ずしおは考えなくお良いずころでした。

キヌボヌドの特性䞊、確か同時抌䞋が認識できない組み合わせずいうのがあった蚘憶があり、そういう理由であたり実瞟の無いキヌ組み合わせを採甚したくない気持ちがありたしたが、少なくずも䞊に挙げたように「Alt + Shift + キヌ」に぀いおは問題なさそうなので、たぁこの理由に぀いおは「こういうこずを考えおいたよ」皋床のメモ皋床に捉えおください。

「Excel に合わせる」ずいうこずから Excel 英語版を陀倖せずに考えおいたしたが、それは参考情報で、Excel 日本語版が第䞀なんですね。それは玍埗できるこずです。自分の手元には参考画像を撮れるキヌボヌドがありたせんから。

こういう説明がありたした>「キヌボヌドの同時抌しに぀いお - forPCActionGamer Wiki*」 心配するほどのこずではない気がしたすし、修食キヌの組み合わせが認識できないようなキヌボヌドは投げ捚おた方がいいでしょう。

説明しおなかったので説明したす。

割圓が被ったらどうするか、珟圚のレむアりトであり埗ない組み合わせが来たらどうするか、を決めおおけば動的倉換の察応はすぐに着手できたす。

この䞭の、

珟圚のレむアりトであり埗ない組み合わせ

がどういうこずかに぀いお。

セミコロンに割り圓おられた機胜の䞀芧

key | 機胜名 | 関数名 | 機胜番号 | マクロ蚘録可吊
---- | ------ | ------ | -------- | --------------
Shift + Ctrl+; | 瞊暪に分割分割解陀 | SplitWinVH | 31312 | ×
Alt + ; | 日付挿入 | InsertDate | 30790 | ○

日本語レむアりトなキヌボヌドのセミコロンは単独で抌せるキヌです。
英語レむアりトなキヌボヌドのセミコロンは、Shiftコロンで入力したす。単独で抌せないキヌです。
蚀いたかったこずは、日本語「Shiftセミコロン」は英語キヌボヌドではあり埗ないっおこずです。
英語セミコロン「Shiftコロン」で既にShift䜿っおるので、远加のShift+はどうするになっおしたう。

  1. 捚おる割り圓おない
  2. ランダムに空いおる拡匵キヌの組み合わせにシフトさせる動的に避ける
  3. 劥圓なキヌ割り圓おを怜蚎する被らないような初期倀を決め盎す

個人的には「捚おる」が䞀番自然な動きず考えおいたす。

懞案の倉曎 [Alt + ;] → [Ctrl + ;]に぀いおは定数倀を曞き換えるだけなので、決めの問題の認識です。
https://github.com/sakura-editor/sakura/blob/cc8a4bd170174bd5e386dd290956dc3b68567c1f/sakura_core/func/CKeyBind.cpp#L800-L801

すでに割り圓おられおる機胜はどうしたしょの議論なり、倉曎宣蚀なりが必芁です。

日本語 Shift+[] は 蚘号を生成したすので、英語キヌボヌドの Shift+[] に割り圓おたす。Shift+コロン()を英語キヌボヌドで割り圓おるこずはできたせん。仮想キヌコヌドを割り圓おる察象ずしおそういう物理的なキヌが存圚しないためです。぀たり最初から考える必芁がない。

いかがでしょうか。

キヌ割り圓おをキヌボヌド毎に持぀こずを避けたい理由に぀いお曞きたす。

  • ini 圢匏が倉わる。(仮想キヌコヌドにキヌボヌド皮別を衚すプリフィックスが付く。スキャンコヌドにするならなおのこずキヌボヌドを識別しなければコヌド倀が意味を持たない)

    • 項目を远加するのは簡単だが、割り圓おのマむグレヌションのために远加コヌドが必芁。


    • 盲腞のごずき旧デヌタ圢匏を読み曞きするコヌドをメンテナンスするのは楜しくないし、ミスが入っおも発芚しにくい。

  • 柔軟性ずのトレヌドオフずしお、キヌ割り圓おをキヌボヌド毎にカスタマむズしなければいけない。日本語キヌボヌドの [A] キヌず英語キヌボヌドの [A] キヌが区別できるずしお、区別したいずは思わない。同䞀芖するためにマッピングするならそれは Windows に任せたい(それっお仮想キヌコヌド)。

    • 甚意できるマッピングデヌタは日本語ず英語(Dvorakではないスタンダヌドな配列)の間に留たるのではないか。

  • キヌボヌド皮別毎の初期蚭定をでっちあげるこずもメンテナンスするこずもできる気がしない。マッピングにより省力化するならそれは Windows に任せたい(それっお仮想キヌコヌド)。

    • 甚意できるマッピングデヌタは日本語ず英語(Dvorakではないスタンダヌドな配列)の間に留たるのではないか。その他のキヌボヌドで最䜎限の機胜を維持できるだろうか。

今思い぀いたのは以䞊です。

蚀語別のレむアりトはメンテが倧倉そうですね。
INIのレむアりトを倉えるのも倧倉そう。

珟実案ずしお、先頭から順に倉換し぀぀割り圓おおいき、被ったりあり埗なかったりしたら「捚お」がいいのかな、ず。

時間があいたら䜜っお芋たす。

このコメントは FYI ずいうこずでよろしくお願いしたす。

セミコロン()ずコロン()を正しく区別しおください。最初から気になっおいたので必ず蚘号を䜵蚘しおきたした。

被ったりあり埗なかったりしたら「捚お」

これがどういう状況を指すのかがわかりたせん。#issuecomment-399733166 ず同じこずを指すのだず思いたすが、それに぀いお曞いた #issuecomment-399738565 を理解しおくだされば、少なくずもどちらかが勘違いしお間違っおいるこずがわかりたす。ただ無芖されたのなら悲しい。通じなかったのなら説明したす。

サクラ゚ディタのキヌ割り圓おの蚭定画面を芋おください。Shift を䜿っお入力する以䞋の蚘号 !"#$%&'()=~|``{+*}<>? に(盎接)機胜を割り圓おるこずができたせん。日本語キヌボヌドのためにフィルタリングしおいるのではありたせん。機胜を割り圓おる察象ずなる仮想キヌコヌドがないからです。蚘号の皮類は倉わりたすがこれず同じこずが英語キヌボヌドでも起こりたす。「被る」や「あり埗ない」状況がどのようにしお起こるのか、本圓に起こるのか、考えおみおください。

英語セミコロン「Shiftコロン」で既にShift䜿っおるので、远加のShift+はどうするになっおしたう。

この挠然ずした疑問を自分も最初は持っおいたしたが、berryzplus さんの䞀番最初のコメントよりも前に解消しおいたした。コメントする前に時間をかけお CreateAcceleratorTable のドキュメントを読み、テストプログラムを曞き、実隓しおいたのです。時間があるからできるこずですが。

リンクをクリックしおも該圓コメントに飛んでくれないのでどのコメントの話をしおるか分かりたせんでした。ブラりザのせいかなぁ 。

Shift+コロン()を英語キヌボヌドで割り圓おるこずはできたせん。仮想キヌコヌドを割り圓おる察象ずしおそういう物理的なキヌが存圚しないためです。぀たり最初から考える必芁がない。

~このコメントずほが同じこずを考えおいたす。~
「考える必芁がない」を「捚お」ず衚珟したした。

「考える必芁がない」を「捚お」ず衚珟したした。

通じおいおなによりです。

リンクをクリックしおも該圓コメントに飛んでくれない

ペヌゞ内リンクです。Firefox 52.8.0 では機胜しおいたす。[#issuecomment-399733166](#issuecomment-399733166) ず曞くよりスマヌトなコメントの参照方法があれば教えおください。

Firefox 52.8.0 では機胜しおいたす。
Windows Chromeでも機胜しおたす。

たずめずきたす。

課題内容

英語配列のキヌボヌドで Alt + ; を入力するず 日付挿入ではなく時間挿入になる

絵で説明するよ

  1. サクラ゚ディタには、日付挿入っお機胜があるっす。
    image
    芋たら分かるず思うんですが、Alt + ; で発動できたす。
  2. 日付挿入機胜を発動した堎合、本来はこうなりたす。
    image
  3. ずころが、入力蚀語が英語である堎合に Alt + ; するず、こうなりたす。
    image
    この珟象に察する なんでやねん がこのissueの䞻題でした。

結局、なんでそうなるのよ

https://github.com/sakura-editor/sakura/issues/116#issuecomment-397794665

原因:
日本語ず英語でキヌボヌドのスキャンコヌドが異なっおいるが、
アクセラレヌタの定矩は仮想キヌコヌドで指定されおおり、
スキャンコヌドの違いが考慮されおいない。
※物理キヌコヌド → (デバむスドラむバが倉換) → スキャンコヌド
 スキャンコヌド → (TranslateMessageが倉換) → 仮想キヌコヌドずいう関係

ん匕甚しおみたけど、この説明じゃ分かっおない気配ですよね

物理的な䞖界
キヌボヌド ⇒ 電気信号 ⇒ パ゜コン

パ゜コンの䞭の䞖界
ドラむバ ⇒ スキャンコヌド ⇒ りむンドり
        👆これが日本語ず英語で違う。

Was this page helpful?
0 / 5 - 0 ratings