中点『・』の単語区切りでの扱い
-
Kuroさん
サポートお疲れ様です。先日Twitterでちら見せしていたJavaScript V8対応検討中な話題、import文とか使えるのかなとちょっと期待を寄せています。行頭・行末移動マクロのように、選択範囲を拡張するか否かの true/false を切り替えるためだけにほぼ同じマクロファイルを2つ用意して設定するような場面では嬉しいかもですね!
さて本題ですが、中点『・』の単語区切りでの扱いについての要望を上げにきてみました。
Meryではおそらく、ひらがな、半角カタカナ、全角カタカナ、漢字の連なりで単語の範囲となり、その他の記号類は単語の区切り文字として扱われていると思います。
ただ、全角中点・ (U+30FB) がカタカナの分類になってしまっているのか、カタカナと隣接しているとCtrl + Left/Rightのような単語区切りによる動きのときに中点を含めて単語として認識されてしまうようです。文脈として名詞同士の並列関係を示すときに中点を使うことは多いので、単語区切りにおいて中点は記号類としての取り扱いにしてはいかがでしょうか?
ざっくりと調べるために、思いつくまま以下の記号を用意し、各記号間にひらがな・半角カタカナ・全角カタカナ・漢字を置いて単語の認識範囲を調べましたが、全角中点・ (U+30FB) のみが全角カタカナとして単語として扱われてしまうようでした。
ちなみに半角中点 ・ (U+FF65) は想定通り記号類として区切り文字として扱われました。!@#$%^&*()-_=+[]{}\|;:'",.<>/?・!@#$%^&*()-_=+[]{}\|;:'",.<>/?・←↑→↓⇒⇔○●◎◉⦿◐◑◒◓□■△▲▽▼▷▶◁◀•◦×◇◆❖☆★〓¶§※*†‡∴〽♠♤♣♧♥♡♦♢
| yuko | 返信 -
念のためバージョンも。使用しているのは Mery ver 3.4.0 です。
| yuko | 返信 -
> サポートお疲れ様です。
ありがとうございます。最近はお問合せも少なくて、新機能の開発に時間を割り当てられてます😆
> 先日Twitterでちら見せしていたJavaScript V8対応検討中な話題、import文とか使えるのかなとちょっと期待を寄せています。
おーん、import は無理っぽいですね。秀丸さんや EmEditor さんの実装を参考にさせていただいたのですが、「ほんとにこんなのでええんか?」と心配になるような実装ではあります。
というのも、マクロを実行すると裏で WebView2 (Edge) が起動して、Edge にマクロを投げて実行してもらってエディター側がクライアントとして操作されて、終わったら Edge を Kill する、みたいな…。
Win32 アプリから V8 エンジンを使うにはこの方法か、独自にビルドした V8 エンジンを搭載するしかなさそうですから、秀丸さんに続けーって感じで EmEditor さんも乗っかったのかなと想像してますが…😅
そういう仕様なのでとりあえず V8 エンジンが動くよーっていうだけで、裏で Edge の起動と終了が発生してるのでめっちゃ遅いし、非同期なので不安定という問題を抱えてます。
一応、import は使えなくても #include で markdown-it.min.js を読み込んでマークダウンの結果を HTML で出力とかはできたので少しは遊べそうかも?
> 文脈として名詞同士の並列関係を示すときに中点を使うことは多いので、単語区切りにおいて中点は記号類としての取り扱いにしてはいかがでしょうか?
確認しました。Windows 11 のメモ帳だと中点は記号扱いになってるっぽいですね。ちょうど起動してたもので、秀丸さんと EmEditor さんでも試してみたら、中点は記号扱いになってるっぽかったです。
検討してみますね。
| Kuro | 返信 -
> そういう仕様なのでとりあえず V8 エンジンが動くよーっていうだけで、裏で Edge の起動と終了が発生してるのでめっちゃ遅いし、非同期なので不安定という問題を抱えてます。
おーん、なかなか実用厳しそうですね…🙄
ドンッと一度バッチ的に読み書きするマクロならともかく、EnterとかHome/Endとか、実行頻度が高く細かい動きのカスタマイズに使うマクロとは何やら相性が悪そうです。> 確認しました。Windows 11 のメモ帳だと中点は記号扱いになってるっぽいですね。ちょうど起動してたもので、秀丸さんと EmEditor さんでも試してみたら、中点は記号扱いになってるっぽかったです。
> 検討してみますね。ありがとうございます!
| yuko | 返信 -
V8対応万歳。
これでようやくMath.pow()から解放されてべき乗演算子(**)が使える。
と思ったけどなんか構文エラーが出る。ダメなのかな。outputbar.writeln(2**3);
> 行頭・行末移動マクロのように、選択範囲を拡張するか否かの true/false を切り替えるためだけにほぼ同じマクロファイルを2つ用意して設定するような場面では嬉しいかもですね!
マクロ内で、マクロ名(window.ScriptName)で動作を切り替えるようにしておいて、シンボリックリンクでファイル名を変えればいけますよ。
スペース←→タブの変換マクロで、2タブとか4タブとかを名前で切り替えて同じマクロ使ってます。Meryの機能でも変換コマンドありますけど、エディタの設定で決め打ちなので、拾ってきたコードがスペースで2タブとか3タブとかだったりすると面倒だったから。
名前中のfrom/toとタブ数で動作切り替え。
| 村人 | 返信 -
> outputbar.writeln(2**3);
V8 JavaScript エンジンを使用する場合、window オブジェクトに属するプロパティやメソッドは大文字と小文字が区別されるので、outputbar の部分を以下のようにしてみてください。
// キャメルケース outputBar.writeln(2**3);
または、
// パスカルケース OutputBar.writeln(2**3);
上記のような感じで、キャメルケースかパスカルケースの記法に対応しています。
ちなみに、window オブジェクトに属するプロパティとメソッドは以下のとおりです。
clipboardData, editor, editors, outputBar, redraw, scriptFullName, scriptName, scrollX, scrollY, shell, status, tag, addUndo, alert, beginUndoGroup, close, confirm, createPopupMenu, endUndoGroup, print, prompt, quit, sleep
それ以外は大文字と小文字は区別されません。
outputBar.WRITELN(2**3); // OK
outputBar.wRiTeLn(2**3); // OK
…が、JavaScript ではキャメルケースが推奨されているようです。
| Kuro | 返信 -
ごめんなさい。Mery最新版をダウンロードした後インストールするの忘れてました。
誠に申し訳ございません。寝ぼけていたようです。で、インストールしたのですが、今度はWebView2ランタイムをインストールしてくださいのダイアログが出て実行できませんでした。
ランタイムはすでに入っています。Win10も最新の状態です。念のためランタイム(MicrosoftEdgeWebview2Setup.exe)を落としてきて入れようとしても「すでに入ってます」となります。
Tablacus Explorerではずいぶん前からWebView2モードで動かしていますし、「アプリと機能」にも表示されています。
TE64 23.1.31 Microsoft Windows 10 Home 64 ビット 22H2 (10.0.19045) WebView2/109.0.1518.78 JS/Chakra.dll ja 96 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz Windows Defender
「アプリと機能」
Microsoft Edge WebView2 Runtime 109.0.1518.78| 村人 | 返信 -
うーん、謎ですね。
インストールは、インストーラー (MerySetup-x64-3.4.2.exe) を使われたのでしょうか?
もし、ZIP 版をお使いで Mery.exe を上書きしただけ、とかであれば必要なライブラリが導入されてない可能性があります。
今回から WebView2 コントロールに必要な DLL (WebView2Loader.dll) が同梱されるようになっているので、Mery.exe と同じフォルダーに WebView2Loader.dll が正しくインストールされているかどうかご確認いただけますでしょうか?
| Kuro | 返信 -
むむっ…。ポータブル版だと動作しないっぽいかも?
| Kuro | 返信 -
> うーん、謎ですね。
>
> インストールは、インストーラー (MerySetup-x64-3.4.2.exe) を使われたのでしょうか?インストーラー版ですが、「MerySetup-x64-3.4.1.exe」です。
いま「MerySetup-x64-3.4.2.exe」を落としてきて入れ直しても同様でした。> 今回から WebView2 コントロールに必要な DLL (WebView2Loader.dll) が同梱されるようになっているので、Mery.exe と同じフォルダーに WebView2Loader.dll が正しくインストールされているかどうかご確認いただけますでしょうか?
Tablacusでもそうだったので入ってるのは確認してます。
AppData\Roaming\Mery\WebView2Loader.dllで、一度アンインストールして入れなおしたら動きました。
AppData\Local\Programs\Mery\
こっちに入ってないとダメっぽい?| 村人 | 返信 -
変更ログのほう確認しました。了解です。
| 村人 | 返信 -
ご確認ありがとうございます。
> AppData\Local\Programs\Mery\
> こっちに入ってないとダメっぽい?そうですね。DLL はパスがとおってればどこでも OK なアプリもありますが、Mery はセキュリティを考慮して Mery.exe と同じフォルダーからしか DLL を読み込まないようにしているのでそのためだと思います。
> AppData\Roaming\Mery\WebView2Loader.dll
なぜそっちにインストールされてしまったのか…。
考えられる理由として、昔からの Mery ユーザーさんの場合、2019年まではインストーラーが Roaming のほうになっていたので、それからずっと上書きインストールされている場合ですね。
2020年からはインストーラーを Local のほうに仕様変更してますので、その関係かもしれないです。
それから、Ver 3.4.2 のポータブル版だと WebView2 コントロールがうまく動作しないことを確認したので Ver 3.4.3 で修正しておきましたが、こちらは本件とは関係なさそうな気もしますね。
| Kuro | 返信 -
> そうですね。DLL はパスがとおってればどこでも OK なアプリもありますが、Mery はセキュリティを考慮して Mery.exe と同じフォルダーからしか DLL を読み込まないようにしているのでそのためだと思います。
>
> > AppData\Roaming\Mery\WebView2Loader.dll
>
> なぜそっちにインストールされてしまったのか…。言葉足らずでした。
Mery.exeと同じフォルダに入っていて、どちらもRoamingの方でした。
なので更新ログに書かれていたことが原因だったのだと思います。
整理してしまったので確認できなくなりましたが。> 考えられる理由として、昔からの Mery ユーザーさんの場合、2019年まではインストーラーが Roaming のほうになっていたので、それからずっと上書きインストールされている場合ですね。
多分これですね。せっかくなので、一度アンインストール後に両方のMeryフォルダごと削除して再インストールして整理し直しました。
どうやってもワークスペースが復活しなくて諦めて再構築しました。
| 村人 | 返信 -
なるほど…、そういうことでしたか。
原因がわかりました。
Roaming に Mery がインストールされている場合、Mery.exe と設定ファイル (Mery.ini など) が同じフォルダーに配置されることになり、実質、ポータブル版と同じフォルダー構造になるので、今回の「ポータブル版だとダメ」な問題に該当したのだと思います。
> どうやってもワークスペースが復活しなくて諦めて再構築しました。
オウフ、お手数をおかけしました。大切なデータが失われてなければ良いのですが… 恐らく Ver 3.4.3 は大丈夫だと思います。
ご報告いただけて助かりました、ありがとうございます!
| Kuro | 返信