編集モードに応じたテーマ変更

  1. Kuroさん、先日はお世話になりました。
    今回は、編集モードに応じてテーマを変更する方法について伺います。

    最近プログラミングに興味が湧いたのでMQLの本を2冊読んでちまちまと勉強しています(トレードがやってみたいので^^;)。本を見ながらMeryでコードを書いているのですが、ちょっと困ったことがございます。

    普段、日本語の文章作成を行う時はもちろん全角文字で書いています。それに対してコードを書く時は半角英数です。コードの中に全角文字を入力したら注意が働くように全角文字の色を赤とか黄色にして試しているのですが、このテーマ設定ですと、日本語の文章を書くときに文章全体が赤とか黄色になってしまいます。

    そこで、Meryフォルダを複製し(フォルダを2つ用意し)、片方はコード用のテーマ設定にしておいて、もう片方は文章作成用のテーマ設定にしています。で、どちらか1つを起動して使っています。ただ、時々失敗して、コード用のMeryを起動してあるのを忘れて文章作成用のMeryを起動してしまい、コード用のテーマ設定で起動しているMeryの上で画面が開いてしまいます。

    そこで、質問です、編集モードに応じてテーマを切り替える機能のようなものはございますか?(私の場合は、TextとMQLしか使っていませんが^^;)

    お忙しいところ、申し訳ありませんが、ご回答いただけましたら幸いです。

    <以下、余談です>
    Zenモードとタイプライタースクロールには大変お世話になっています

    Zenモードは心静かに文章に集中して書けるのでとても良いです(ありがとうございます)。

    そして、タイプライタースクロールは、コードを書く時には使いませんが、日本語の文章を書く時にいつも使っています。カーソル行が画面の下方に行った時に、わざわざ画面中央まで文章をスクロールして作業を再開するという手間が無いのでありがたいです。

    前回も申し上げましたが、Meryは本当に便利です。
    心から感謝申し上げますm(_ _)m。

     |  くま  |  返信
  2. 横から失礼します

    > 普段、日本語の文章作成を行う時はもちろん全角文字で書いています。それに対してコードを書く時は半角英数です。コードの中に全角文字を入力したら注意が働くように全角文字の色を赤とか黄色にして試しているのですが、このテーマ設定ですと、日本語の文章を書くときに文章全体が赤とか黄色になってしまいます。

    編集モードごとにテーマを変更する方法はいまのところありませんが、編集モードの設定だけでもある程度フォローできるんじゃないかとおもいます。
    「全角文字」全般を定義するのはめんどうですが、「ascii文字(半角)以外」をすべて色つきに変えてしまっても大丈夫なようでしたらわりと簡単に対応できます。

    「MQL」モードのプロパティで「強調文字列」に以下のものを追加します。

    [^\s!-~]

    ※オプション項目は「正規表現」のみを ON に

    番号をクリックすると強調文字色を変更できます。
    色変えしたくない文字がほかにもあるようでしたら角カッコの中の ^\s!-~ のうしろ部分に追加してみてください。
    e.g. ローマ数字とギリシア文字、キリル文字のアルファベット「も」除外するなら

    [^\s!-~Ⅰ-ⅿα-ωΑ-ΩА-я]

    また、編集モードでなく「マーカー」の設定で同様の正規表現を指定することもできます。
    対象にする範囲が広すぎるためあまりメリットはありませんが、マーカーバーから ON/OFF 切り替えや検索が簡単にできるので、ふだんの入力/編集中は OFF にしておいて、確認/校正のときだけ ON にすれば、正規表現で動作が重くなるのを回避できます。 :)

    余談ですが、ゼロ 0 とオー O、イチ 1 アイ I と エル l と バーチカルバー | の区別や、「全角空白の誤入力」などにもマーカーや編集モードによる強調表示を利用できますよ。 :D
    https://www.haijin-boys.com/discussions/3655#discussion-3981

     |  sukemaru  |  返信
  3. >> くま さん

    こんばんは。Mery をお試しいただきありがとうございます。

    申し訳ございませんが、編集モードごとにテーマを設定する機能はありません。

    というのも、Mery を開発した動機が、編集モードごとに細かい設定をしなくてよいテキストエディターが欲しい、というものだったからです。

    国産のテキストエディターの多くは編集モードごとに細かく色分けなどの設定ができるようになっていますが、私は面倒くさがり屋なので、編集モードごとに色などを設定するのが面倒で、ときにはがんばって設定したこともありますが、反映されてない?あ、別の編集モードの設定をいじってた!

    …のような出来事もあって、設定を一本化したシンプルなテキストエディターがあればなぁと思い、Mery を開発しました。

    そういうわけで、現在のところ編集モードごとにテーマを設定できるような機能を実装する予定はございません。

    > コードの中に全角文字を入力したら注意が働くように全角文字の色を赤とか黄色にして試している

    コードの中に全角文字が含まれている場合に目印を表示させたい、ということでしたらマーカー機能が使えるかもしれません。

    マーカー機能の基本的な使い方はこちら
    https://www.haijin-boys.com/software/mery/mery-tips#9

    マーカーの設定から [追加] ボタンをクリックし、以下の文字を追加します。

    [^ -~。-゚\t]

    で [正規表現] にチェックをいれて [OK] ボタンをクリックすると、マーカーバーに先ほど登録したものが追加されます。

    ↓ こんな感じ
    https://imgur.com/a/1OccgNW

    マーカーの有効・無効はマーカーバーの上を右クリックして、メニューから [有効] のチェックを切り替えます。

    マーカー機能を使えば、日本語の文章を編集するときはチェックをオフに、全角が含まれているかチェックしたいときはオンにするだけで、簡単に切り替えることができるかと思います。

    > Zenモードとタイプライタースクロールには大変お世話になっています

    ありがとうございます。これらの機能は私の個人的な要望でこっそり搭載したものなので、そう言っていただけると嬉しいです。

    トレード、うまくいくといいですね ^^

    >> sukemaru さん

    こんばんは。サポートのご協力ありがとうございます。

    またまたかぶってしまいました…。sukemaru さんが書いてくださった方法に同意ですが、30 分ぐらいかけて書いた内容だったので、一応、私も投稿させていただきました ^^;

    おっしゃる通り、マーカー機能を使わずとも、編集モードの強調文字を使うという方法もアリですね。むしろそちらのほうが、編集モードごとに色を変えたいというご要望には合っているかもしれません。

    全角文字のみの正規表現につきましては、私はググってヒットしたものを使わせていただきましたが、sukemaru さんの書かれているもののほうが汎用性高そうですね。

    ちなみに、Mery フォルダを複製して設定を分けて起動するときは /sp オプションを付ければ、すでに Mery が起動していても別の Mery を起動させることもできます。

     |  Kuro  |  返信
  4. マーカーに設定する場合だと、マーカーバーのボタンで検索・ジャンプすることができるわけですから

    半角ascii以外 |[^\s!-~]+

    とか

    半角ascii以外 |[^\s!-~]+(?=[\s!-~])

    のように "+" を付ければ「全角文字列のまとまり」ごとにジャンプできるかな? とおもいきや…、 "[^\s!-~]" のうしろに "+" をつけていない場合と動作が変わらないみたいでした。 :(
    ※ 先頭に "半角ascii以外 |" とつけたのは個人的な趣味です(マーカーバーのラベルが分かりやすくなるので)。 :D

    "aaaaa" 5文字だけの文書で "aa" を検索すると「4回ヒット」するのとおなじ検索メソッドということだとおもいますが、メモ帳やほかのエディタでは "aa" のヒット数が「2回だけ」(ヒットした末尾から再検索)のものも多いようですので、再検索方法を選択できるようにするというのは、いかがでしょうか?
    e.g. 最大: 2文字目から再検索 / 最小: 末尾から再検索

     |  sukemaru  |  返信
  5. sukemaruさん、こんにちは!

    > 「全角文字」全般を定義するのはめんどうですが、「ascii文字(半角)以外」をすべて色つきに変えてしまっても大丈夫なようでしたらわりと簡単に対応できます。
    >
    > 「MQL」モードのプロパティで「強調文字列」に以下のものを追加します。
    > [^\s!-~]
    > ※オプション項目は「正規表現」のみを ON に

    教えていただいた方法で、無事に全角文字だけを赤文字にして波線を付加することができました。ありがとうございます(^^)。

    それと、sukemaruさんがお書きになった正規表現の意味が知りたかったのでネット検索をしてみました。その時に見たページにあった表を元にして半角記号と半角数字を表現してみようと、以下の素人_正規表現を書いてみたのですが、合っていますでしょうか??

    <半角記号>
    [!-/:-@[-`{-~]

    <半角数字>
    [0-9]

     |  くま  |  返信
  6. Kuroさん、こんにちは!

    > というのも、Mery を開発した動機が、編集モードごとに細かい設定をしなくてよいテキストエディターが欲しい、というものだったからです。

    そういった動機を知らずに能天気な質問をしてしまい、すいませんでした(汗)。

    > 国産のテキストエディターの多くは編集モードごとに細かく色分けなどの設定ができるようになっていますが、

    他のエディタにはそういう機能があるのですね。今まで日本語の文章しか書いていなかったので知りませんでした。

    ただ、Zenモードが気に入っているのと、マクロ等の置き場が分かりやすいこと、構文ファイルや補完用ファイルの中身がシンプルで素人にも分かりやすいこと等の理由から、今のところ他のエディタを使う予定はないです(^^;。

    > マーカー機能を使えば、日本語の文章を編集するときはチェックをオフに、全角が含まれているかチェックしたいときはオンにするだけで、簡単に切り替えることができるかと思います。

    マーカー機能のご提案、ありがとうございます。今回はsukemaruさんの投稿にあった強調文字列を使わせていただきましたが、今後マーカー機能も試してみたいと思いますm(_ _)m。

    > トレード、うまくいくといいですね ^^

    ありがとうございます! 頑張ります!

    <需要あぴーる>
    「よくある質問」に『入力補完を自動で呼び出したい』という項目がございました。これを見つけた時、「わーい!」と思ったのですが、現在は対応していないとのことでした(残念)。

    もし他にも希望する方がいらっしゃいましたら、今後の開発で検討していただけますと幸いです(^^)。

     |  くま  |  返信
  7. Kuro 様
    今回は編集モードの強調と /sp 起動オプションの組合せがいいかなーと思います。
    とはいえ表現が豊かなのでマーカーもとても良いです。実にエラソーに、w

    くま 様
    すでに目的は達せられたご様子なので、余計な話になりますが、こういう正規表現の形
    もあります。わずかながらいい働きをしてくれます。
    コードなら ASCII 文字だけ、半角カナも強調に含めるとして、

    強調文字列

    (?<!\P{ASCII})\P{ASCII}++

    ☐ 単語のみ
    ☑ 大文字小文字を区別
    ☑ 正規表現

    と作成します。

    マーカーでも、同じ設定の正規表現で使えます。

     |  いきずりの人  |  返信
  8. > 無事に全角文字だけを赤文字にして波線を付加することができました。
    おつかれさまでした。
    コーディングということでしたので、先の正規表現では「半角カナ」も全角文字同様に「強調される側」にしてあります。もしも「半角カナは全角じゃないから強調しちゃダメ」ということでしたら、Kuro さんに倣って 。-゚ を追加してくださいね。 :D

    > <半角記号>
    > [!-/:-@[-`{-~]
    角カッコの「開きカッコ」が含まれていますので "\" でエスケープ(退避修飾)して [!-/:-@\[-`{-~] とするか、
    ① または慣用にしたがって「スラッシュ」もエスケープして [!-\/:-@\[-`{-~] と記述するのがよろしいかと。
    ② ほかにも、文字集合をハイフンつなぎで記述せずに、わかりやすくそのまま羅列してしまう方法もアリですし、
    ③ 鬼雲の「POSIXブラケット」と「式オプション」を利用する書き方もあります。

    半角ascii記号① |[!-\/:-@\[-`{-~]
    半角ascii記号② |[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~]
    半角ascii記号③ |(?a:[[:punct:]])

    マクロライブラリの「文字カウント」や「テキスト整形」マクロのソースコードをご覧になると分かるとおもいますが、文字クラス化する文字群をあえてそのまま羅列したほうが対象がなんだったか分からなくなったりしないので都合が良い場合もあります。

    > <半角数字>
    > [0-9]
    あっています。 :)
    または、正規表現で一般的に使用される「文字種」記法で \d と書くだけも半角数字 0-9 の意味になりますよ。
    マイナスやカンマ、コロンも… とかそのうち欲をがでてきて正規表現入門サイトを読み漁ることになったりして。 :/

    以下のURLで正規表現ライブラリ「鬼雲」の日本語 Readmeを参照できます。
    https://raw.githubusercontent.com/k-takata/Onigmo/master/doc/RE.ja
    私はこれをローカルフォルダに保存して、ちょくちょく Mery で開いて調べてます。 :|

     |  sukemaru  |  返信
  9. いきずりの人さん

    ご助言ありがとうございます!(^^)

     |  kuma  |  返信
  10. sukemaruさん、こんにちは。

    > 角カッコの「開きカッコ」が含まれていますので "\" でエスケープ(退避修飾)して [!-/:-@\[-`{-~] とするか、
    > ① または慣用にしたがって「スラッシュ」もエスケープして [!-\/:-@\[-`{-~] と記述するのがよろしいかと。

    慣用があるのですね。では、スラッシュもエスケープする方を使わせていただきます!

    > または、正規表現で一般的に使用される「文字種」記法で \d と書くだけも半角数字 0-9 の意味になりますよ。

    \dで半角数字になるのですか。それは知りませんでした。
    便利そうですね!

    いろいろと教えてくださって、ありがとうございましたm(_ _)m。

     |  くま  |  返信
  11. > 慣用があるのですね。では、スラッシュもエスケープする方を使わせていただきます!

    「慣用」といったのは、コーディングなどのように、 Mery の検索・強調等の設定で鬼雲を使用する以外のとき、正規表現の両端を半角スラッシュで囲う必要がある場合が多いからです。
    無用にエスケープを多用するとパフォーマンスがおちる可能性がありますが、正規表現の特殊文字(e.g. JavaScript なら .*+?^=!:${}()|[]/\ )をリテラルとして記述するときはエスケープしておくに越したことはないかな、とおもいまして。老婆心ながら。 :)
    >> e.g. Document.Selecton.Find( hoge.replace( /[.*+?^=!:${}()|\[\]\/\\]/g, "\\$&" ), meFindReplaceRegExp );

    編集モードと併用して、いきずりの人 さんに倣ってマーカーに

    半角ascii以外 |(?<![^\s!-~])[^\s!-~]++

    と登録することで半角 ascii 以外の文字列を単語・ブロック単位で順々に検索・移動(マーカーバーの当該ボタンの左クリック)ができるようになるようですので、こちらも併用すると便利かもしれません。コードのチェックなど以外のときは「無効」にしておけますから、ジャマになることはないとおもいます。
    ※ いきずりの人 さんの正規表現と意味はほとんどおなじですが、こちらのの記述方法 [^\s!-~] では ascii 範囲内(0000 - 007F)にある空白・改行以外の [制御文字] が除外されます。

    マーカーに正規表現を登録する場合、「半角ascii以外 |」のような説明的な文字列を先頭に付けておくと、マーカーバー上のぼたんのラベル(表示文字列)が分かりやすくなりますよ。
    パイプ記号のまえに全角空白を入れておくのがミソです。ボタンにマウスポインタをのせると、パイプのまえの部分がポップアップヒントになり、パイプの後ろの部分はステータスバーに表示されます。 :)
    編集モードなどの正規表現に説明用の文字列を付ける場合は

    (?^# 半角ascii以外 )(?<![^\s!-~])[^\s!-~]++

    のような記述でもよいかも。
    ※この場合 (?^# 説明用の文字列 ) の直後にパイプ記号 "|" をつける必要はありません。

     |  sukemaru  |  返信
  12. sukemaruさん、こんにちは。

    前回に引き続き、詳しい説明をありがとうございます!
    ただ、恥ずかしながら、私の頭が追い付いていってないです(汗)。

    何度か読み返して(and ググって)、ちまちま理解してゆきたいと思います(^^;。

    これからも宜しくお願いいたします♪

     |  くま  |  返信
スポンサーリンク