Mery 2.5.1

ヤダー、開発ヤダー!

久しぶりに Mery を更新、バージョン少し飛んで 2.5 です。64 ビット版の開発で使用する予定の Delphi XE2 でビルド番号を自動更新する機能がなくなってたのでビルド番号は付けるのやめました。

今回のバージョンアップでは以下の仕様変更が含まれていますのでご注意ください。

  • 正規表現エンジンを鬼雲に変更
  • HTML Tidy を HTML5 対応版に変更 (tidy.dll に名称変更)
  • 高 DPI、Per-Monitor DPI 関連処理の見直し

ちょっと大きめのバージョンアップなので先に謝罪しておきます。

バグが出たらゴメンナサイ!

1. 更新履歴
2. ダウンロード

1. 更新履歴

仕様変更

  • ステータスバーからの機能呼び出しを誤作動防止のためダブルクリックに変更
    → ご要望対応
  • バージョン情報を 3 桁までの表示に変更
    → ビルド番号なんていらない… よね?
  • sqlfmt.dll が入っていない場合は「SQL 整形」のメニューを隠すようにした
    → なんとなく
  • SQL 整形の予約語を merycfg.dll から取得するようにした
    → 本体サイズの削減
  • tidy.dll、sqlfmt.dll は必要に応じてロードするようにした
    → メモリの節約
  • フォント変更時にプラグインに EVENT_MODE_CHANGED を送るようにした
    → プラグイン側のフォントを連動させるため
  • オプションなどを変更した際に INI ファイルを更新するようにした
    → ずいぶん昔のご要望対応
  • ウィンドウ分割時のサイズ変更でメインエディタ側のサイズを固定にした
    → このほうが良い… よね?
  • プラグインのプロパティを親ウィンドウの中央に表示するようにした
    → 簡単そうに見えて Per-Monitor DPI やマルチディスプレイを考慮するとヤバイ
  • マクロの document.selection.SelectLine() の挙動を変更。複数行を選択している場合は選択範囲の行すべてを選択するようにした
    → このほうが良い… よね?
  • プラグインの設定を変更した際にフレームを作り直すようにした
    → プラグイン側の都合
  • フォント関連の処理で使用していた EnumFontFamilies を EnumFontFamiliesEx に変更 (不要なフォントが表示されなくなった)
    → EnumFontFamilies は非推奨だそうで
  • 名前を付けて保存したときに書き換え禁止を解除するようにした
    → ご要望対応
  • 読み取り専用のファイルに上書き保存しようとしたときに名前を付けて保存ダイアログを開くようにした
    → 上のヤツのついで
  • ウィンドウの位置とサイズを復元で SDI モードのときに最初のウィンドウのときだけ復元していたのを廃止、常に復元するようにした
    → ご要望対応
  • 正規表現エンジンを鬼雲に変更
    → これが一番デカい変更点。鬼車は更新終わってるしね…
  • libhunspell.dll を 1.3.4 に更新
    → 1.4 系は妙にサイズがデカいし更新が頻繁なので様子見

新機能

  • 「特殊文字を入力」のサンプルマクロを同梱してみた
    → 文字コードで入力、サロゲートペアも対応
  • 「ウィンドウを左右に分割」機能を追加
    → ご要望対応。4 分割はできません
  • 書き換え禁止のときにタブに鍵マークを表示するようにした
    → ご要望対応
  • アウトラインをドラッグドロップまたは ALT +↑・↓で移動できるようにした
    → ご要望対応
  • アウトプットバーでの「ファイルへ移動」に対応 (右クリックメニューまたはダブルクリックでファイルへ移動します)
    → HTML Tidy のエラーチェックなどで役立ちます
  • オプションの「ウィンドウの位置とサイズを復元」で位置指定に対応
    → X、Y、W、H のラベルをクリックすると現在の位置・サイズを取得する裏技付き
  • 行削除、行右削除、行左削除、単語削除、単語右削除、単語左削除を追加
    → ご要望対応。メニューにはないけどショートカットキーで割り当てたりね
  • 行切り取り、行コピーをコマンドに追加
    → ご要望対応だったっけ?
  • AddFontResource で追加されたフォントを DirectWrite で使用できるようにした
    → ご協力ありがとうございました!
  • タッチ操作の上下パンでスクロール、左右パンで選択するようにした
    → ご要望対応。Windows タブレット (中華) を買いましたので…
  • タッチ操作のピンチアウトで拡大、ピンチインで縮小するようにした
    → ご要望対応。Windows のタッチ操作って使いづらっ!
  • 「ファイルへ移動」で途中にあるファイル名や、桁数の指定にも対応した
    例)
    xxxx C:\Temp\index.html(4,8): yyyy
    → なんとなく
  • プラグインのメソッド Editor_Info に下記の DirectWrite 関連の情報を追加
    • MI_GET_DWRITE_ENABLED
    • MI_GET_DWRITE_RENDERING_PARAMS
    • MI_GET_COLOR_FONT_ENABLED
    → アウトラインなどのプラグイン側を DirectWrite に対応させるためなんだけど、Windows のツリービューで仕様に問題があり断念
  • Tidy を HTML5 対応版に差し替えた
    • tidy.dll に名称変更
    • 「XML整形」のメニューを「HTML Tidy」に変更
    • 「ドキュメントの整形」に名称変更
    • 「ドキュメントのエラーをチェック」の機能を追加
    → ご要望対応。バージョン 5.2.0 だけど、更新頻度が気になる

不具合修正など

  • 高 DPI、Per-Monitor DPI 関連の処理を全部作り直した
    → 死ぬかと思った
  • 最大化→最小化→復元時にファイルの更新チェックが発動しなかったのを修正
    → ただの凡ミス
  • マルチディスプレイ環境で印刷プレビューダイアログをアクティブウィンドウがあるディスプレイに表示させるようにした
    → マルチディスプレイ対応って大変だよね
  • 「単語の最初の文字を大文字に変換」で「'」に続く文字の処理を改善
    → ご要望対応。え、不具合ではないよ?
  • 印刷部数の指定にきちんと対応した
    → ご要望対応。え、不具合ではないよ??
  • ウィンドウ無効時のファイルのドラッグドロップを抑制した
    → ご要望対応。え、不具合ではないよ???
  • Win2K でツールバーの背景が黒くなるのを修正、その他細かい Win2K 対応
    → 掃除をしていたら Win2K のディスクが出てきたので対応してみた
  • タッチ操作のプレスアンドホールドで四角い枠が消えない問題を修正
    → タッチ操作に対応しているときに見つけた Delphi の不具合
  • 分割時に書き換え禁止がサブエディタに反映されなかったのを修正
    → 認めよう、凡ミスだ
  • エディタエンジンをちょろっと高速化
    → 体感できるレベルではないです
  • オプション画面のアクセラレータキーが重複していたのを修正
    → 他にも重複を見つけたら教えてネ!
  • その他、細かい修正
    → 実はコレが一番大きかったりする
2016/05/19
  • 行へ移動とスペルチェックのアクセラレータキーが重複していたのを修正
  • 編集モードのプロパティ画面のアクセラレータキーが重複していたのを修正
  • 文書を閉じたときのイベントマクロでエラーが発生していたのを修正
  • 単語補完のウィンドウが高 DPI に対応していなかったのを修正
  • 再起動時に壁紙の不透明度が反映されないことがあったのを修正
  • ウィンドウ分割をツールバーからオン・オフできなかったのを修正
2016/05/21
  • アウトラインプラグインを差し替え (Delphi の不具合対応)

2. ダウンロード

Mery_2.5.1.zip Mery_2.5.1.exe

Comments (93)

  1. 更新お疲れ様です。
    今から起動してアラ探します。(はーと)

     |  ひとみ
  2. コメントありがとうございます。

    > 今から起動してアラ探します。(はーと)

    (∩゚д゚)アーアーきこえなーい

     |  Kuro
  3. 更新ありがとうございます。
    早速ではございますが....
    ツールバーに上下分割ボタンを配置しています。
    以前はボタンで分割のON/OFFをトグルできたのですが、ONにすることしかできなくなりました。
    あと、私は使わないのですが、左右分割はツールバーにはおけないんですね。

     |  pizz
  4. ● pizz さん

    早速お試しくださりありがとうございます。

    > 以前はボタンで分割のON/OFFをトグルできたのですが、ONにすることしかできなくなりました。

    あわわ…
    きっと気のせいです!(こっそり不具合修正したファイルに差し替えておきました…)

    > 左右分割はツールバーにはおけないんですね。

    左右分割のツールバーアイコン素材がないのです ><
    はぅー、これ以上凡ミスが出ないことを祈ります…

     |  Kuro
  5. 更新おつかれさまです。
    新機能満載で追いつけませんwww
    マクロで文字列再取得できないかな? って思っていたので
    アウトプットバーでの「ファイルへ移動」がかなりいい感じです。
    更にちょっと便利になりましたよ。

     |  玄米茶
  6. 更新ありがとうございます。
    さっそく使ってみます。楽しみ!

     |  さば
  7. コメントありがとうございます!
    ちょっと凡ミスが見つかったので、さきほどファイルを修正版に差し替えました。
    ビルド番号がないとこういう時に不便…

     |  Kuro
  8. 開発おつかれさま、ありがたく使わせて頂きます。

    初版をDLしてたのですが、虫の知らせで来てみました。
    >ビルド番号がないとこういう時に不便… 
    Mery.exe merycfg.dll Outline.dll の差し替えと思いますが、
    exeプロパティのファイルバージョンやMD5も、
    >2. ダウンロード
    欄に表記してくださるとより良いかと (^^;

     |  通りすがり^2
  9. 初めまして。更新お疲れ様です。
    早速使わせていただいておりますが、さらに便利になっていて本当に素晴らしいです。
    ウィンドウの左右分割や、書き換え禁止で鍵マーク表示、アウトラインの移動などなど…。
    非表示設定にしたフォントがちゃんと表示されなくなったのも良いですね。
    これはOfficeなどでも全部表示されていたので仕方ないと諦めてました。

    しかしちょっと気になるところがありまして。
    Ctrl+Spaceで入力補完が出来ますよね?
    候補が複数ある時に出てくるテキストボックスが表示されるたびにどんどん小さくなります。
    最終的には文字が見えなくなるまでミニマムに…。
    Meryを一から入れ直しても(RoamingのMeryフォルダも削除)同様になりますので、
    多分こちらが妙な弄り方をしたわけではないと思うのですが…。

     |  プリン
  10. お疲れ様です。とりあえずDLしました。

     |  hide
  11. 更新おつかれさまです。更新点が多くコメントに迷いますが、
    まずは、正規表現エンジンの変更がついに来た、という感じです。
    Unicode対応バージョンが 4.1(推定) から 7.0 に上がって対応文字が増えたり、
    \p{In_XXX}、\K、\X、(?R) などの構文が利用可能になったのが大きいですね。
    (※使いこなせるとは言っていない)

    > ビルド番号がないとこういう時に不便…

    ビルド年月日をつけて 2.5.x.YYMMDD 形式にするとか…
    同日更新なら YYMMDD.1 とか枝番つけたりが必要ですが。

     |  masme
  12. ● 通りすがり^2 さん

    > 初版をDLしてたのですが、虫の知らせで来てみました。

    毎度のことながら凡ミスやらかしてますね、すみません^^;
    お付き合いくださりありがとうございます。

    ハッシュなどは VirusTotal のリンクに表示されているのでいいかなーと思っていましたが、念のため SHA256 ハッシュのみ明記するようにしておきました。

    ● プリン さん

    はじめまして。コメントありがとうございます。
    今回の更新は不具合修正とご要望の対応がメインなので派手な新機能はありませんが、数が多かったので公開までに数カ月かかってしまいました。

    > 最終的には文字が見えなくなるまでミニマムに…。

    ご報告ありがとうございます!
    うわー!コレはうっかりしていました。単語補完のウィンドウだけ高 DPI 対応処理を途中まで作って放置したままでしたorz

    速攻で修正してファイルを差し替えておきました。
    まだダウンロードした人も少なそうだし、大丈夫ですよね…w

    ● hide さん

    早速のダウンロードありがとうございます。
    凡ミスを修正したバージョンに差し替えましたので、もしお使いの機能で問題がでるようであればお手数をおかけしますが再度ダウンロードお願いいたします。

    ● masme さん

    コメントありがとうございます。

    > まずは、正規表現エンジンの変更がついに来た、という感じです。

    ホントは次期バージョン (3 系?) で鬼雲にする予定だったのですが、某テキストエディタが鬼雲を実装したとのニュースを見て、つい勢いでやってしまいました。

    鬼車と互換性あるんだから大丈夫だろー?と、検証もそこそこにドーンと公開しちゃいましたが、問題がありそうならいつでも鬼車に戻す覚悟はありますw

    > ビルド年月日をつけて 2.5.x.YYMMDD 形式にするとか…

    ビルド番号 (4 桁目) は廃止しましたが、通常は細かい修正でもリリース番号 (3 桁目) を上げていくようにするつもりですのでご安心ください。

    今回は 2.5.0 です!バーン!と公開してしまったので、翌日に 2.5.1 とかになってるのがちょっと恥ずかしくて、こっそりファイル差し替えで対応させていただきました。

    次からはちゃんとバージョン上げますよー、、、たぶん…。

     |  Kuro
  13. 更新お疲れ様です。
    愛用ソフトのバージョンアップは嬉しいですね。

    さて、「アクセラレータキーの重複を見つけたら教えてネ!」ってことなんで三つほど……

    ・編集メニューの「行へ移動」と「スペルチェック」
    ・編集モードの設定のプロパティの構文タブの「次の行へ続く」と「エクスポート」
    ・編集モードの設定のプロパティの構文タブの「エスケープ文字」と「インポート」

    わざわざ構文タブでインポート・エクスポートする人がいるか分かりませんが。

     |  ucky
  14. 前からなんだけど
    ウィンドウ分割してて一時的に配分変えたいときがよくあるんだよね
    他アプリからD&Dしたいときとか

    で境界つまもうとするんだけどルーラーに触ってしまうことがよくある
    # 折り返さない で使ってるから折り返し自体はすぐ戻せるから別にいいんだけど
    うちの環境では縦2ピクセルの範囲でつまむ必要があるせい

    1字だけ選択してつまむのも同じ感じで
    こちらは左右2ピクセルの範囲でつまむ必要がある

    もう少し当たり判定の範囲広げられるといいな♪


    以下 要望じゃないよ
    置換とか検索とかボタンで出てくるけど出てる時は消すようにするのはどうだろう

     |  クリ廃止
  15. 新バージョン公開ありとうがとうございます&お疲れ様です。
    移行したところ、以下の不具合が見つかりましたのでご報告をば。

    ・マクロイベントで「文書を閉じたとき」を有効にしていると、タブを閉じたときにメモリアクセスエラーが発生する
     5/19朝時点の素モジュールで、何もしない空のマクロに対してイベント登録しても発生しました
     Alert だけのマクロにすると、Alert 表示後にエラーが発生するので、マクロ実行後の処理に問題があるのかもしれません

    私が使っていたのはどうでもいいマクロなので実害はないですが、気が向いたときに確認いただければと思います。

     |  ks
  16. 新バージョンお疲れ様です。

    今回はじめてTinyというものに触れてみたのですが、このコンソールのような機能がマクロで使えると非常に便利だと思うのですが、もしかして知らないだけであるのでしょうか。なければ、あると嬉しいです。

     |  BlackApple
  17. ● ucky さん

    ご愛用ありがとうございます。

    > さて、「アクセラレータキーの重複を見つけたら教えてネ!」ってことなんで三つほど……

    ウォォ!見落としていました…
    次のバージョンで修正しておきました。(2.5.1)
    ご報告ありがとうございました!

    ● クリ廃止 さん

    スプリッターの幅ですね。細いほうがカッコいいと思って 2px に設定しています。
    4px ぐらいまでなら許容範囲 (カッコよさ的にw) なので増やしてみましょうか?

    一応、オプションで「ルーラで文字数を指定する」をオフにすれば誤爆は防げるかもしれません。
    (つかみづらさに変わりはありませんが)

    > 置換とか検索とかボタンで出てくるけど出てる時は消すようにするのはどうだろう

    検索や置換ダイアログ表示中に、エディタ側で選択範囲を変えてからもう一度検索・置換のボタンをクリックするとその選択範囲の文字が検索ダイアログに入力されるという便利機能がありますので、表示されたままのほうがよろしいかと思いますが、いかがでしょう。

    ● ks さん

    コメントありがとうございます。

    文書を閉じたときのマクロイベントですが、調査してみましたところ以前のバージョンから実装に怪しい部分があったようです。バージョン 2.5.1 にて修正してみました。

    エディタウィンドウがなくなった後に発動するマクロイベントなので document オブジェクトへのアクセスなど、一応可能にしてはいますが、若干不安が残ります… とりあえずコレで様子見です。

    ● BlackApple さん

    コメントありがとうございます。
    画面下の Tidy のログが表示される部分のことですかね?

    これはメニューの「表示」→「アウトプット」で開閉できる機能で、マクロからでも操作可能です。

    ↓ こんな感じ
    OutputBar.Visible = true;
    OutputBar.Writeln("文字列");

    詳細は MeryWiki のマクロリファレンスで「OutputBar インターフェイス」に記載してあります。

     |  Kuro
  18. あぁ、やはりありましたか。
    お手数おかけしました。ありがとうございました。

     |  BlackApple
  19. 報告した日の内に修正してくださったようで、ありがとうございます&おつかれさまです!
    早速DLしてみましたらちゃんと直ってました。
    やっぱりあると楽ちんですね、入力補完。

    >まだダウンロードした人も少なそうだし、大丈夫ですよね…w
    そうですね、公開して間もないですしw
    かく言う自分も2.5.0が最初に公開された時にDLして毎日起動してたのに気付いたのは報告した日なわけで…。
    入力補完を頻繁に使わないと気付かないままだったかもしれません。

     |  プリン
  20. ・ウィンドウの左右分割、やはりあると便利ですね。せっかくですので、 wiki のよくある質問
    >現在のところ対応しておりません。 
    も、Mery 2.5 で対応しました 旨を追記されては如何でしょう?

    ・外部ファイラから、ファイルから検索を便利に使わせて頂いてます。
     /fd オプションに加え、対象ファイル(FindMaskTextにセットする感じ)、
    検索文字列もコマンドライン引数をご検討頂けると、更に便利かと。

    類似機能は、Sakura の -GFILE=, -GKEY=。 WZ6 の -mask, -find 位でしょうか。
    (某エディタのように Grepに関する引数が多いと、やり過ぎ感ありますね (^^; )

     |  通りすがり^2
  21. >4px ぐらいまでなら許容範囲 (カッコよさ的にw) なので増やしてみましょうか?

    見た目はそのまま当たり判定だけ増し増しで

    >「ルーラで文字数を指定する」

    ぉぉ誤爆しなくなったw
    --
    >Ctrl+Spaceで入力補完

    これ例としてhtmlモードだと解除するまでbackspaceとかでは「<」が消せなくなるね
    --
    pc引っ越し以後なぜか消えてたお気に入りプラグイン
    半年ほどなしで使ってたけどやはりあるとかなり違う
    必要なときだけすぐ開けられる方法があれば

    更新されたばかりの新しいの入れて設定してたんだけど
    Favorites.txt開いてそれ自体を「お気に入りに追加」したときに気付いたのが
    Mery外か別タブ(ファイル)に一旦フォーカス移動させないと更新チェックが働かない
    --
    お気に入りプラグインへの要望
    選択肢にマウスオーバーでフルパスをポップアップ表示
    (マクロで使える左下の領域でも可)
    ディレクトリ違いで同一ファイル名のファイルがあると表示は全部同じになるため

    # たまに設定項目見直さんといかんね
    # 長く使ってると実は自分の使い方と合ってない設定で使ってたりすることがあるようだ

     |  クリ廃止
  22. 分割で本当にほしいのは別ファイルの同時表示よね
    ***mergeとかのあれ

     |  クリ廃止
  23. 更新おつかれまです。
    早速ですが気になった点が1つありましたので報告致します。
    タブにドラッグ中にアウトラインの上を通過すると、「無効なクラス型キャスト.」というダイアログが表示されます。
    [OK]を押しても20回くらい連続して出てきます。
    お手数かけますが、ご確認よろしくお願いします。

     |  kiurin

  24. 2行目の修正です。
    「タブに」→「タブを」でした。

     |  kiurin
  25. 連続投稿すみません。
    この件の状況が発生する条件としまして、
    アウトラインで何らかの操作(ノードをクリックして展開や上下ドラッグなど)をした後に、タブをドラッグして別画面(マルチモニタ)へ移動中にアウトラインの上を通過すると「無効なクラス型キャスト.」と書かれたダイアログは24回連続で出てきます。
    アウトラインを避けて通れば出ません。

     |  kiurin
  26. ● 通りすがり^2 さん

    > も、Mery 2.5 で対応しました 旨を追記されては如何でしょう?

    おぉ、ご指摘ありがとうございます。
    最近、MeryWiki の更新サボってました^^; 早速追記しておきました。

    > 類似機能は、Sakura の -GFILE=, -GKEY=。 WZ6 の -mask, -find 位でしょうか。

    それぐらいは指定できても良さそうですね。
    参考にさせていただきたいと思います。

    ● クリ廃止 さん

    > 見た目はそのまま当たり判定だけ増し増しで

    それができれば良いのですが標準の部品では対応できそうにないため、自力でスプリッターを開発しないといけないのでツライです…

    とりあえず 4px か 3px に変更して試してみましたが、やはりキシメンのような外観が気に入らないので、少々掴みづらいかもしれませんが現状でご容赦いただければと思います。

    > これ例としてhtmlモードだと解除するまでbackspaceとかでは「<」が消せなくなるね

    TNotePad 開発者の「真魚」エディタでも同様なので、エンジンの仕様っぽいですねぇ。何か意図があるのかもしれませんので調査してみておきます。

    > Mery外か別タブ(ファイル)に一旦フォーカス移動させないと更新チェックが働かない

    タブ切り替えかフォーカス (アクティブ状態) が移った時に更新チェックする仕様です。リアルタイムや定期的な更新チェックは負荷が高いため実装していません。特にネットワーク越しにファイルを編集しているときとかはファイルの監視はかなり重くなりますので。

    > 選択肢にマウスオーバーでフルパスをポップアップ表示

    便利そうですね。
    マウスオーバーでポップアップメニュー上にヒントを表示するのは、技術的にちょっと方法が思い浮かばないですね。ステータスバーの左下の領域ならプラグインから操作できたはずなのでなんとかなるかもしれません。

    > 分割で本当にほしいのは別ファイルの同時表示よね

    タブをウィンドウ外にドラッグドロップで切り離して「ウィンドウ」→「左右に並べて表示」では駄目でしょうか?スクロールの連動とか比較とかになると確実に ***merge を使ったほうが良いと思いますw

    ● kiurin さん

    コメント&ご報告ありがとうございます。
    アウトラインの件ですが調査してみましたところ開発環境 (Delphi) の不具合でした。修正方法が見つかりましたので、アウトラインプラグイン (Outline.dll) を差し替えておきました。

    お手数をおかけしますが再度ダウンロードいただければと思います。

     |  Kuro
  27. どのバージョンから発生していたかは分かりませんが、以下の状態で強調表示がされない状況が見受けられます。

    1. 編集モードで「行の右を強調」で特定行を色付け
    2. 自動折り返し表示にしている状態で3行以上の折り返しをさせる

    上記状況で、3行目以降の色付けの強調表示がされないようです。
    お手数ですがご確認いただければと思います。

     |  yuko
  28. ● yuko さん

    コメントありがとうございます。
    エディタエンジンの仕様上、3 行以上にまたがる色付けはボトルネックになりますので色付けしないようにしております。

     |  Kuro
  29. おや、仕様だったのですね。。。失礼しました。

     |  yuko
  30. 昨日報告いたしました「アウトライン上をタブをドラッグして通過する際にダイアログが表示される」件につきまして、素早い対応をしていただき感謝しています。
    早速アウトラインプラグインの差し替版をDLし、件の確認を行った結果、問題なく使用する事ができました。
    大変有難く思っています。
    お力にはなれませんが、陰ながらMeryを応援させて頂きます。

     |  kiurin
  31. kuroさんこんにちは、いつも開発ありがとうございます。

    ブログじゃないほうの mery ダウンロードページが旧バージョンのままなのは安定化
    待ちなのかな?

    ・その旧バージョンからある、あまり重要でない不具合
    複数のツールバーを同じ行に表示させていて、meryのウインドウ幅を縮小させると
    右側のツールバーが自動縮小で「>>」表示になるが、ウインドウの幅を元サイズ
    に戻しても「>>」のままで復帰しません。
    #きっと Delphi の coolbar コントールのせい

    ・旧バージョンからある、ほんとうにどうでもいい不具合
    オプションのキーボードでキー割り当てに ctrl + Pause を押すと ctrl + scroll lock
    と表示されす。

    ・旧バージョンからある、ちょっと気になる仕様
    マクロで ActiveXObject('WScript.Shell').Run(Command, 0, true); とコマンドの
    終了待ちをしていると、mery の側ではキーボードショートカットに割り当てた
    別マクロは動作しない(期待通り)のに、マクロ(M)メニューからは別マクロが
    実行可能です。
    #ksさんの「マクロ覚え書き」の記事にでも追記しておけばいいのかも

     |  papagoat
  32. >> Mery外か別タブ(ファイル)に一旦フォーカス移動させないと更新チェックが働かない
    >タブ切り替えかフォーカス (アクティブ状態) が移った時に更新チェックする仕様です。

    クリック時限定で確認発動は自然だし負荷にもならなくていいと思うんだ

     |  クリ廃止
  33. ● yuko さん

    コメントありがとうございます。
    実は、なぜその仕様なのかを説明しようとしていたのですが、文章が下手で、えらい長文になってしまったので割愛させていただきました^^;

    もしご興味があるようでしたら、改めてご説明させていただきます (長いですよ?w)

    ● kiurin さん

    ご確認ありがとうございます。
    お手数をおかけしてしまい申し訳ございません。今後ともよろしくお願いいたします!

    ● papagoat さん

    お久しぶりですね、コメントありがとうございます。

    > ブログじゃないほうの mery ダウンロードページが旧バージョンのままなのは安定化待ちなのかな?

    そうですね。安定化待ちと、Wiki の更新がめんどくさいっていう理由ですw
    気が向いたら更新しておきますね。

    > #きっと Delphi の coolbar コントールのせい

    ご指摘の通り、Delphi のせいですね。直せる気がしません…

    > オプションのキーボードでキー割り当てに ctrl + Pause を押すと ctrl + scroll lock と表示されす。

    Wikipedia 先生によると CTRL + Pause と CTRL + Scroll Lock は同じらしいですね。他のアプリで試してみると、どちらも「CTRL + Break」と表示されたりしましたw

    > マクロで ActiveXObject('WScript.Shell').Run(Command, 0, true); とコマンドの終了待ち

    マクロ実行の途中で待機する、といったケースは想定していませんでした。一応、マクロ実行中はメニューから他のマクロを実行させないような制御を付け加えることは可能ですが、待機中にタブを閉じられたり他の操作が行われてしまうとぶっ壊れてしまいます… (そのケースまで想定して対応するのはちょっと厳しそう)

    ● クリ廃止 さん

    クリックって割と頻繁に発生する操作だと思いますので、そのたびに一瞬ひっかかるようになるとわずらわしくないですかね?

    あと、NAS 上のファイルの編集とかで HDD が回転止まってるのに更新チェックが入るとそのたびに「ブーン」っていうから、現状ぐらいの更新チェックのタイミングが割と好みだったりしますw

     |  Kuro
  34. Kuroさん

    ぜひ!理解が及ばないかもしれませんがお聞きしたいです!(;゚∀゚)=3

     |  yuko
  35. 以前のバージョンのものを覗いていて気づいたのですが、検索・置換ダイアログの位置記憶が 2.5 では機能していないような……?

     |  yuko
  36. ● yuko さん

    ご報告ありがとうございます。
    おー、ほんとだ!これはうっかりしていました。次のバージョンでは修正しておきたいとおもいます!

     |  Kuro
  37. 新バージョンの更新お疲れさまでした。
    左右の分割ウィンドウがかなり使いやすく活用させていただいています。

    |д゚) どこかにあるのならすみません。
    検索した個数を出すにはどうしたらよいのでしょう・・・

    マクロを探してみたのですが見つけられませんでした。

     |  みぃ
  38. ● みぃ さん

    コメントありがとうございます。
    残念ながら検索した個数を表示する機能はありません。
    件数を表示するためには全件検索する必要があり、そうなるとどうしても動作が重くなってしまいます。

    Mery の検索機能は該当箇所に色付けされているため、一見、全件検索しているように見えますがそうではなく、画面に表示されている部分のみを対象にリアルタイムで検索・色付けする仕組みを採用し、高速化をはかっております。

    そういうわけで、件数表示は標準機能として実装すると動作が遅くなってしまいますので、プラグインかマクロで実装していただければと思います。作るの大変そうだけど…w

     |  Kuro
  39. 秀○の変換モジュールをMeryから使うためのプラグインを作ったけど需要ある?
    需要があるようなら公開するけど。

     |  foo
  40. 検索した個数を出すには検索文字列と置換文字列を同じ(正規表現利用時には$0)にして全置換すればいいんとちゃう。
    検索結果が重なっているときは結果がずれるけど。

     |  foo
  41. ● foo さん

    > 秀○の変換モジュールをMeryから使うためのプラグインを作ったけど需要ある?

    そんなの公開しても大丈夫ですかね?^^;
    私は知りませんよ…? いや、技術的にはすごく興味ありますがw

    > 検索した個数を出すには検索文字列と置換文字列を同じ(正規表現利用時には$0)にして全置換

    いわゆるクソリューションってやつですね、そういうの好きですw

     |  Kuro
  42. Kuro さんがお題(件数表示)を出してくれたので挑戦してみました。

    成果はこちら
    http://www.haijin-boys.com/wiki/%E6%A4%9C%E7%B4%A2%E3%83%92%E3%83%83%E3%83%88%E6%95%B0%E8%A1%A8%E7%A4%BA

    マクロ版、プラグイン版をそれぞれ用意して比較してみましたが、
    ・正攻法は遅い(特に FindRepeat は選択範囲変更や表示切替が走るため)
    ・JScrip tオンリーは爆速(でも指定方法難あり)
    ・プラグインは .NET の正規表現使うより鬼雲 DLL を直接利用の方が速い(これは意外だった)

    現状、正規表現以外の対応(大文字小文字の区別有無、単語単位など)はないので不公平な比較ではありますが……

     |  ks
  43. UTF16もUTF8同様にBOMの有無を指定して保存できるとありがたいです。

     |  Moto
  44. わわわ! 
    まさか作っていただけるなんて!
    ありがとうございますー
    さっそく使わせていただきました。

     |  みぃ
  45. ● Moto さん

    ご意見ありがとうございます。
    今後の開発の参考にさせていただきます。

     |  Kuro
  46. >そんなの公開しても大丈夫ですかね?^^;
    やっぱまずいですかね。
    ○イトー企画謹製のもの以外を使うだけなら、ぎりOKな気もしますが(道義的にはやっぱ、アウトかな)。
    ○イトー企画製のものは半分ほどは未公開のインターフェースを使っていたり、秀○にメッセージを送信していたりして利用不可能だったりします。
    >いや、技術的にはすごく興味ありますがw
    技術的にはたいしたコトしていませんよ。Meryのプラグインを作れる人なら多分誰でも作れると思いますよ。
    秀○の変換モジュールは基本的に、ほぼ純粋に文字列操作関数の詰め合わせDLLなので。

     |  foo
  47. 更新お疲れさまでした。
    いつも使わせて頂いております。

    ver2.5.1にて、マクロを「Ctr+テンキー(0~6)」に割り当てたところ、
    Ctr+Num5 だけ効かず全選択になります・・・
    Ctr+Num0~4、6は割り当てたマクロが正常に実行されました。

    私の環境だけかご確認頂けたら幸いです。

     |  ギャラ
  48. 窓の杜から2.5.1(差し替え版)をダウンロードしたらWindowsDefenderがトロイの木馬を感知したとかで念のためダウンロードファイルを削除しました・・・う~む。

     |  せ
  49. 多分前からなんだけど
    ATOK(2016)と相性悪いのか
    「変換処理で固まって一旦復帰して」
    を繰り返して3度目くらいで永遠に帰ってこなくなる

    できるのはウィンドーの移動だけで
    最終的には終了させる以外の選択肢はない

    半年ほどで昨日3回目
    2時間ほど保存してない、そんなときを狙い撃ちしてくる(苦笑)

    意図して再現はできないので対応に困っているわけだが(苦笑)
    何かできる策ありますか?
    # MS-IME(食わず嫌いじゃなく我慢して2か月ほど使ってみたけど何かと捗らなくて)とかに
    # 変更するという選択肢はない
    ## 聞かれても困るのはもちろんわかっている

     |  クリ廃止
  50. コメントご無沙汰してます(ブログは毎日チェック)、開発お疲れ様です。
    しばらくのあいだ簡単なテキストを書く程度しか Mery を使えていなかったのですが、
    いつの間にか Emmet LiveStyle があちら側の仕様が変わったみたいで、Mery で連動できなくなってるようです。
    対応可能であれば、お時間のある時にお願いできたらと思います。
    「だまって専用エディタ使えや!」と言われたら、もうアフィは踏みません(大うそ

    うえで "せ" さんが書かれているトロイ云々、つい最近私は某国産システムモニターで発生しました。
    確かこれ、以前もありましたよねぇ・・・。

     |  アイスクライマー
  51. Tex-to-pdf.js


    (function () {
        var menu = window.CreatePopupMenu();
        menu.Add("pLaTeX (ptex2pdf)", 1, 0);
        menu.Add("pLaTeX (dvips + ps2pdf)", 2, 0);
        menu.Add("upLaTeX (ptex2pdf)", 3, 0);
        menu.Add("upLaTeX (dvips + ps2pdf)", 4, 0);
        menu.Add("pdfLaTeX", 5, 0);
        menu.Add("LuaLaTeX", 6, 0);
        menu.Add("LuaJITLaTeX", 7, 0);
        menu.Add("XeLaTeX", 8, 0);
        menu.Add("", 0, meMenuSeparator);
        menu.Add("pLaTeX (ptex2pdf) [Adobe Reader]", 11, 0);
        menu.Add("pLaTeX (dvips + ps2pdf) [Adobe Reader]", 12, 0);
        menu.Add("upLaTeX (ptex2pdf) [Adobe Reader]", 13, 0);
        menu.Add("upLaTeX (dvips + ps2pdf) [Adobe Reader]", 14, 0);
        menu.Add("pdfLaTeX [Adobe Reader]", 15, 0);
        menu.Add("LuaLaTeX [Adobe Reader]", 16, 0);
        menu.Add("LuaJITLaTeX [Adobe Reader]", 17, 0);
        menu.Add("XeLaTeX [Adobe Reader]", 18, 0);
        menu.Add("", 0, meMenuSeparator);
        menu.Add("pBibTeX", 51, 0);
        menu.Add("upBibTeX", 52, 0);
        menu.Add("BibTeX", 53, 0);
        menu.Add("BibTeXu", 54, 0);
        menu.Add("", 0, meMenuSeparator);
        menu.Add("Mendex", 61, 0);
        menu.Add("MakeIndex", 62, 0);
        menu.Add("TeXindy", 63, 0);
        menu.Add("", 0, meMenuSeparator);
        menu.Add("TeXworks", 71, 0);
        menu.Add("SumatraPDF", 72, 0);
        menu.Add("fwdsumatrapdf", 73, 0);
        menu.Add("pdfopen", 74, 0);
        menu.Add("", 0, meMenuSeparator);
        menu.Add("Quit", 99, 0);

        var menuItem = menu.Track(0);
        switch (menuItem) {
        case 1:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var ptex2pdf = "ptex2pdf -l -ot \"-synctex=1 -guess-input-enc -sjis-terminal\"";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                ptex2pdf = "ptex2pdf -l -ot \"-synctex=1 -no-guess-input-enc -kanji=utf8 -sjis-terminal\"";
            } else if (encoding == meEncodingShiftJIS) {
                ptex2pdf = "ptex2pdf -l -ot \"-synctex=1 -no-guess-input-enc -kanji=sjis -sjis-terminal\"";
            } else if (encoding == meEncodingEUC) {
                ptex2pdf = "ptex2pdf -l -ot \"-synctex=1 -no-guess-input-enc -kanji=euc -sjis-terminal\"";
            } else if (encoding == meEncodingJIS) {
                ptex2pdf = "ptex2pdf -l -ot \"-synctex=1 -no-guess-input-enc -kanji=jis -sjis-terminal\"";
            }
            ptex2pdf += " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + ptex2pdf;
            execute(cmd);
            break;
        case 2:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var latex = "platex -synctex=1 -guess-input-enc -sjis-terminal";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                latex = "platex -synctex=1 -no-guess-input-enc -kanji=utf8 -sjis-terminal";
            } else if (encoding == meEncodingShiftJIS) {
                latex = "platex -synctex=1 -no-guess-input-enc -kanji=sjis -sjis-terminal";
            } else if (encoding == meEncodingEUC) {
                latex = "platex -synctex=1 -no-guess-input-enc -kanji=euc -sjis-terminal";
            } else if (encoding == meEncodingJIS) {
                latex = "platex -synctex=1 -no-guess-input-enc -kanji=jis -sjis-terminal";
            }
            latex += " " + ["\"", b, "\""].join("");
            var dvips = "dvips -Ppdf -z -f" + " " + ["\"", b, ".dvi", "\""].join("") + " | convbkmk -g > " + ["\"", b, ".ps", "\""].join("");
            var ps2pdf = "ps2pdf.bat" + " " + ["\"", b, ".ps", "\""].join("");
            var cmd = "cmd /c " + cd + " && " + latex + " && " + dvips + " && " + ps2pdf;
            execute(cmd);
            break;
        case 3:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var ptex2pdf = "ptex2pdf -l -u -ot \"-synctex=1 -no-guess-input-enc -kanji=utf8\"" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + ptex2pdf;
            execute(cmd);
            break;
        case 4:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var latex = "uplatex -synctex=1 -no-guess-input-enc -kanji=utf8" + " " + ["\"", b, "\""].join("");
            var dvips = "dvips -Ppdf -z -f" + " " + ["\"", b, ".dvi", "\""].join("") + " | convbkmk -u > " + ["\"", b, ".ps", "\""].join("");
            var ps2pdf = "ps2pdf.bat" + " " + ["\"", b, ".ps", "\""].join("");
            var cmd = "cmd /c " + cd + " && " + latex + " && " + dvips + " && " + ps2pdf;
            execute(cmd);
            break;
        case 5:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var pdflatex = "pdflatex -synctex=1" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + pdflatex;
            execute(cmd);
            break;
        case 6:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var lualatex = "lualatex -synctex=1" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + lualatex;
            execute(cmd);
            break;
        case 7:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var luajitlatex = "luajitlatex -synctex=1" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + luajitlatex;
            execute(cmd);
            break;
        case 8:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var xelatex = "xelatex -synctex=1" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + xelatex;
            execute(cmd);
            break;
        case 11:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var ptex2pdf = "ptex2pdf -l -ot \"-guess-input-enc -sjis-terminal\"";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                ptex2pdf = "ptex2pdf -l -ot \"-no-guess-input-enc -kanji=utf8 -sjis-terminal\"";
            } else if (encoding == meEncodingShiftJIS) {
                ptex2pdf = "ptex2pdf -l -ot \"-no-guess-input-enc -kanji=sjis -sjis-terminal\"";
            } else if (encoding == meEncodingEUC) {
                ptex2pdf = "ptex2pdf -l -ot \"-no-guess-input-enc -kanji=euc -sjis-terminal\"";
            } else if (encoding == meEncodingJIS) {
                ptex2pdf = "ptex2pdf -l -ot \"-no-guess-input-enc -kanji=jis -sjis-terminal\"";
            }
            ptex2pdf += " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + ptex2pdf + " && " + pdfopen;
            execute(cmd);
            break;
        case 12:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var latex = "platex -guess-input-enc -sjis-terminal";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                latex = "platex -no-guess-input-enc -kanji=utf8 -sjis-terminal";
            } else if (encoding == meEncodingShiftJIS) {
                latex = "platex -no-guess-input-enc -kanji=sjis -sjis-terminal";
            } else if (encoding == meEncodingEUC) {
                latex = "platex -no-guess-input-enc -kanji=euc -sjis-terminal";
            } else if (encoding == meEncodingJIS) {
                latex = "platex -no-guess-input-enc -kanji=jis -sjis-terminal";
            }
            latex += " " + ["\"", b, "\""].join("");
            var dvips = "dvips -Ppdf -z -f" + " " + ["\"", b, ".dvi", "\""].join("") + " | convbkmk -g > " + ["\"", b, ".ps", "\""].join("");
            var ps2pdf = "ps2pdf.bat" + " " + ["\"", b, ".ps", "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + latex + " && " + dvips + " && " + ps2pdf + " && " + pdfopen;
            execute(cmd);
            break;
        case 13:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var ptex2pdf = "ptex2pdf -l -u -ot \"-no-guess-input-enc -kanji=utf8\"" + " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + ptex2pdf + " && " + pdfopen;
            execute(cmd);
            break;
        case 14:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var latex = "uplatex -no-guess-input-enc -kanji=utf8" + " " + ["\"", b, "\""].join("");
            var dvips = "dvips -Ppdf -z -f" + " " + ["\"", b, ".dvi", "\""].join("") + " | convbkmk -u > " + ["\"", b, ".ps", "\""].join("");
            var ps2pdf = "ps2pdf.bat" + " " + ["\"", b, ".ps", "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + latex + " && " + dvips + " && " + ps2pdf + " && " + pdfopen;
            execute(cmd);
            break;
        case 15:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var pdflatex = "pdflatex" + " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + pdflatex + " && " + pdfopen;
            execute(cmd);
            break;
        case 16:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var lualatex = "lualatex" + " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + lualatex + " && " + pdfopen;
            execute(cmd);
            break;
        case 17:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var luajitlatex = "luajitlatex" + " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + luajitlatex + " && " + pdfopen;
            execute(cmd);
            break;
        case 18:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var xelatex = "xelatex" + " " + ["\"", b, "\""].join("");
            var pdf = ["\"", b, ".pdf", "\""].join("");
            var pdfopen = "powershell -Command \"& {$pdf = \"\"" + pdf + "\"\"; $pages = (pdfinfo $pdf | Select-String \"^Pages:\"); $page = (-split $pages)[1]; pdfopen --rxi --file $pdf --page $page}\"";
            var pdfclose = "tasklist /fi \"IMAGENAME eq AcroRd32.exe\" /nh | findstr \"AcroRd32.exe\" > nul && pdfopen --rxi --file " + pdf + " && pdfclose --rxi --file " + pdf;
            var cmd = "cmd /c " + cd + " && " + pdfclose + " & " + xelatex + " && " + pdfopen;
            execute(cmd);
            break;
        case 51:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var bibtex = "pbibtex -sjis-terminal";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                bibtex = "pbibtex -kanji=utf8 -sjis-terminal";
            } else if (encoding == meEncodingShiftJIS) {
                bibtex = "pbibtex -kanji=sjis -sjis-terminal";
            } else if (encoding == meEncodingEUC) {
                bibtex = "pbibtex -kanji=euc -sjis-terminal";
            } else if (encoding == meEncodingJIS) {
                bibtex = "pbibtex -kanji=jis  -sjis-terminal";
            }
            bibtex += " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + bibtex;
            execute(cmd);
            break;
        case 52:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var bibtex = "upbibtex" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + bibtex;
            execute(cmd);
            break;
        case 53:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var bibtex = "bibtex" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + bibtex;
            execute(cmd);
            break;
        case 54:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var bibtex = "bibtexu" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + bibtex;
            execute(cmd);
            break;
        case 61:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var makeindex = "mendex -T";
            var encoding = document.Encoding;
            if (encoding == meEncodingUTF8WithoutSignature || encoding == meEncodingUTF8WithSignature || encoding == meEncodingUTF8) {
                makeindex = "mendex -U -T";
            } else if (encoding == meEncodingShiftJIS) {
                makeindex = "mendex -S -T";
            } else if (encoding == meEncodingEUC) {
                makeindex = "mendex -E -T";
            } else if (encoding == meEncodingJIS) {
                makeindex = "mendex -J -T";
            }
            makeindex += " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + makeindex;
            execute(cmd);
            break;
        case 62:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var makeindex = "makeindex" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + makeindex;
            execute(cmd);
            break;
        case 63:
            var c = document.Path;
            var b = new ActiveXObject("Scripting.FileSystemObject").GetBaseName(document.Name);
            var cd = "cd /d " + ["\"", c, "\""].join("");
            var makeindex = "texindy" + " " + ["\"", b, "\""].join("");
            var cmd = "cmd /c " + cd + " && " + makeindex;
            execute(cmd);
            break;
        case 71:
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var currentTeXFile = document.FullName;
            var pdfFile = currentTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
            var texworks = "texworks";

            if (!fso.FileExists(pdfFile)) {
                var mainTeXFile = window.Prompt("Input the path to main TeX file.", pdfFile.replace(new RegExp(/\.[^.]*$/), ".tex"));
                if (mainTeXFile != "") {
                    pdfFile = mainTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
                }
            }

            var mainTeXDir = fso.GetParentFolderName(pdfFile);
            var cd = "cd /d " + ["\"", mainTeXDir, "\""].join("");
            pdfFile = ["\"", pdfFile, "\""].join("");

            var args = texworks + " " + pdfFile;
            var cmd = "cmd /c " + cd + " && echo " + args + " | cmd";
            new ActiveXObject("WScript.Shell").Run(cmd, 1, true);
            break;
        case 72:
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var mery = editor.FullName;
            var currentTeXFile = document.FullName;
            var pdfFile = currentTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
            var line = document.selection.GetActivePointY(mePosLogical);
            var sumatraPDF = "C:/Program Files/SumatraPDF/SumatraPDF.exe";
            var existSumatraPDF = true;
            var mainTeXDir;
            var cd;
            var cmd;
            var args;

            if (!fso.FileExists(sumatraPDF)) {
                sumatraPDF = "C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe";
                if (!fso.FileExists(sumatraPDF)) {
                    sumatraPDF = window.Prompt("Input the path to SumatraPDF.exe.", "SumatraPDF.exe");
                    if (!fso.FileExists(sumatraPDF)) {
                        sumatraPDF = "rundll32 shell32,ShellExec_RunDLL SumatraPDF";
                        existSumatraPDF = false;
                    }
                }
            }

            if (existSumatraPDF) {
                sumatraPDF = ["\"", sumatraPDF, "\""].join("");
            }

            if (!fso.FileExists(pdfFile)) {
                var mainTeXFile = window.Prompt("Input the path to main TeX file.", pdfFile.replace(new RegExp(/\.[^.]*$/), ".tex"));
                if (mainTeXFile != "") {
                    pdfFile = mainTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
                }
            }

            mainTeXDir = fso.GetParentFolderName(pdfFile);
            cd = "cd /d " + ["\"", mainTeXDir, "\""].join("");
            currentTeXFile = ["\"", currentTeXFile, "\""].join("");
            pdfFile = ["\"", pdfFile, "\""].join("");

            args = sumatraPDF + " -reuse-instance " + pdfFile + " -inverse-search \"\\\"" + mery + "\\\" /l %l \\\"%f\\\"\"" + " -forward-search " + currentTeXFile + " " + line;
            cmd = "cmd /c " + cd + " && echo " + args + " | cmd";
            new ActiveXObject("WScript.Shell").Run(cmd, 1, true);
            break;
        case 73:
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var currentTeXFile = document.FullName;
            var pdfFile = currentTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
            var line = document.selection.GetActivePointY(mePosLogical);
            var fwdsumatrapdf = "C:/w32tex/bin/fwdsumatrapdf.exe";
            var existFwdSumatraPDF = true;
            var mainTeXDir;
            var cd;
            var cmd;
            var args;
            if (!fso.FileExists(fwdsumatrapdf)) {
                fwdsumatrapdf = window.Prompt("Input the path to fwdsumatrapdf.exe.", "fwdsumatrapdf.exe");
                if (!fso.FileExists(fwdsumatrapdf)) {
                    fwdsumatrapdf = "fwdsumatrapdf.exe";
                    existFwdSumatraPDF = false;
                }
            }

            if (existFwdSumatraPDF) {
                fwdsumatrapdf = ["\"", fwdsumatrapdf, "\""].join("");
            }

            if (!fso.FileExists(pdfFile)) {
                var mainTeXFile = window.Prompt("Input the path to main TeX file.", pdfFile.replace(new RegExp(/\.[^.]*$/), ".tex"));
                if (mainTeXFile != "") {
                    pdfFile = mainTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
                }
            }

            mainTeXDir = fso.GetParentFolderName(pdfFile);
            cd = "cd /d " + ["\"", mainTeXDir, "\""].join("");
            currentTeXFile = ["\"", currentTeXFile, "\""].join("");
            pdfFile = ["\"", pdfFile, "\""].join("");

            args = fwdsumatrapdf + " " + pdfFile + " " + currentTeXFile + " " + line;
            cmd = "cmd /c " + cd + " && " + args;
            new ActiveXObject("WScript.Shell").Run(cmd, 1, true);
            break;
        case 74:
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var currentTeXFile = document.FullName;
            var pdfFile = currentTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
            var pdfopen = "pdfopen";

            if (!fso.FileExists(pdfFile)) {
                var mainTeXFile = window.Prompt("Input the path to main TeX file.", pdfFile.replace(new RegExp(/\.[^.]*$/), ".tex"));
                if (mainTeXFile != "") {
                    pdfFile = mainTeXFile.replace(new RegExp(/\.[^.]*$/), ".pdf");
                }
            }

            var mainTeXDir = fso.GetParentFolderName(pdfFile);
            var cd = "cd /d " + ["\"", mainTeXDir, "\""].join("");
            pdfFile = ["\"", pdfFile, "\""].join("");

            var args = pdfopen + " --rxi --file " + pdfFile;
            var cmd = "cmd /c " + cd + " && echo " + args + " | cmd";
            new ActiveXObject("WScript.Shell").Run(cmd, 1, true);
            break;
        case 99:
            window.Quit();
            break;
        default:
            window.Quit();
            break;
        }

        function execute(commandLine) {
            var ok = window.Confirm(commandLine);
            if (ok) {
                document.Save();
                new ActiveXObject("WScript.Shell").Run(commandLine, 1, true);
            }
        }
    }.call(this));


    Tex-to-pdf.jsをMy Macrosフォルダに保存したうえで
    [マクロ(M)]-[カスタマイズ(C)...]-[新規作成(N)] で Tex-to-pdf.js を選択します.
    [ツール(T)]-[オプション(O)...]-[キーボード] でショートカットキー (Ctrl+T) を追加して割り当てます.

     |  Meryいいね
  52. ● せ さん

    窓の杜さんのファイルを確認してみました。
    このブログで公開している者とハッシュも一致していますので大丈夫そうですね。

    ウイルスチェックソフトで誤検出される問題につきましては MeryWiki の「よくある質問」に「ウイルスチェックソフトで検出されるのですが?」という項目で記載してありますのでご確認いただければと思います。

    ● クリ廃止 さん

    ATOK を持っていないので体験版で軽めの検証しかできませんが、気に留めておきたいと思います。
    再現手順が分かれば調査できるのですが…

    > MS-IME

    Google 日本語入力はいかがです?(情報送信しまくりなのがアレですがw)

    ● アイスクライマー さん

    コメントありがとうございます。
    Mery の Emmet LiveStyle のプラグインですが、現在は開発・公開は中止していますね。あちら側がベータ版だったこともあり、バグが多いのと仕様が変わっちゃうので追いかけるのをやめました。(ソースは公開しているので興味がある人は続き作ってねw って感じで放置)

    でもようやく正式版が発表されたようですね。Mery のメンテが落ち着いたら覗いてみようと思います。

    > だまって専用エディタ使えや!

    www そう言いたいところですが、Sublime と Atom のみですか…、国産エディタで対応してるのがないとなるとやる気が出てきますねw

    > うえで "せ" さんが書かれているトロイ云々、つい最近私は某国産システムモニターで発生しました。

    個人開発のフリーソフトにはこの問題が付き物ですね。もう諦めてます…

    ● Meryいいね さん

    コメントありがとうございます。

    なんか凄そうなマクロですが、長いッス!w
    コメント欄が崩壊してしまうので、できれば MeryWiki かフォーラム、またはご自身のサイトに掲載して URL のみ貼り付けていただければと…

     |  Kuro
  53. ● Kuro さん、クリ廃止 さん

    私も同じく由緒正しき ATOK 使いです。
    今のところ同様な現象は発生したことはないですが、余計な機能の色々を切ってるからでしょうか。
    クラウド云々とか怖すぎて、古き良きシンプルで賢い ATOK にして使ってます!

     |  ks
  54. 印刷部数の要望に対応いただきありがとうございました.
    無事,動いてます!

     |  bakedroy
  55. いつも仕事で愛用させていただいております。
    かなり優先度低いですが、
    制御文字のSTXがSTHと表記されます。
    他も微妙なとこが…
    TNotePadのソースを見たら元からおかしかったみたいです。
    よろしくお願いします。

     |  ひつじアイコン愛用者
  56. ● アイスクライマー さん

    Emmet LiveStyle の件、調査してみたところ仕様がまったく変わっていました^^;
    プラグインの修正どころではなく、ゼロから作らないと駄目なレベルですね…orz

    ちょっと時間かかりそうです。

    ● ks さん、クリ廃止 さん

    なるほど、最近の ATOK はクラウド機能まで付いているんですね、怪しい!w
    ATOK 2016 フリーズでググると結構出てきますねぇ。サ○ラエディタの Wiki でも見かけました。ATOK 側の問題だとイイなぁ… (良くはないけど)

    ● bakedroy さん

    ご確認ありがとうございます。
    無事動いていて良かったです!

    ● ひつじアイコン愛用者 さん

    ご報告ありがとうございます。
    ほんとですね、STX が正しいですね。他にも微妙なところがありそうですね。

    Wikipedia 先生の記述の通りにすれば良いでしょうかね。ISO の正式文書でもあれば助かるのですが…
    https://ja.wikipedia.org/wiki/ISO/IEC_8859-1

     |  Kuro
  57. 自分もクラウドなんちゃらなんか使ってないっす
    あーゆーの使うと人間関係まで紐付けされてまうからな

    2016の新機能で、対応辞書入れてれば選択してctrl連打するだけで引けるんだよ
    単語しか引けないという致命的欠陥があるけどそれでもなお価値はある
    # そのために2015でよかったのに2016も入れた
    # 2016はなんか30万語収録とかいうすげーのきたしな

    ゆざー辞書どーこーとかで変換出てこない症状も2度ほどあったし安定感には欠ける

    ブラウザで開いてるページにある単語ぽいものが勝手に変換候補に出てくるのとか
    面白いチャレンジしているのは認めるが第一に安定が必要だと思う
    --
    ちなみに一太郎6.3あたりの頃
    ゆざーID的に1995年からかね
    20年超えたな
    --
    http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide95.html
    に書いてあったんだけど
    man asciiでいくね? >制御文字

     |  クリ廃止
  58. バグったww
    http://wktk.vip2ch.com/vipper0007.png
    このタブで文字列引きずってたら
    一旦動作止まって新規文書が新規タブで開いてそれに貼り付け
    さらにもう一つ新規文書が新規タブで開いてそれに貼り付け
    された

    他のタブは普通に使えるんだけどこのタブだけこの画面のまま変化しないw

    マウスで画面内クリックしても動かないけど
    キーボードでシフト押してカーソルで移動試みたら選択になってるらしいし
    検索のあれ出してきて英字1文字で検索してみたらカーソル位置変わってるようだから
    表示は止まってマウスに反応しないけど内部では機能してるぽいw

     |  クリ廃止
  59. ● クリ廃止 さん

    > man ascii

    情報ありがとうございます。
    Arch Linux で試してみましたw ASCII コード 0x80 以降は載ってないみたいで残念でしたorz

    > バグったww

    たぶん描画が止まっているだけだと思います。
    マクロで Redraw = false を使用してたまたま途中でマクロを抜けちゃったときとかに発生しそうですね。タブを閉じないと治らないと思います^^;

     |  Kuro
  60. >> バグったww
    さっき連発した
    ドラッグしたまま「Meryの外に一旦出て戻ってを2回やる」と止まることがあるようだ
    マクロはイベントで発動させるようにはしてないので本体側で発生しているはず

     |  クリ廃止
  61. 日本語入ってないと投稿弾かれる感じかw
    http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
    c0: p8
    c1: p10

     |  クリ廃止
  62. ● クリ廃止 さん

    おはようございます。

    > ドラッグしたまま「Meryの外に一旦出て戻ってを2回やる」

    いろいろ試してみているのですが再現できないですねぇ。
    エディタ部の外 (メニューとかタブの上とか) に選択文字列や他のアプリからの選択部分をドラッグドロップすると新規タブが開いてそこに張り付けられるのは仕様ですが、その挙動と関係があるのかもしれませんね。

    頂いた画面コピーを見る限りですと、たとえばマクロバーの上に選択文字列をドロップして、新規タブが開いてそこに張り付けられると同時にマクロが発動しちゃってるとか?

    発生のコツが何か分かりましたら教えていただけると助かります。

    > 日本語入ってないと投稿弾かれる感じかw

    すみません、スパム対策ですw
    おぉ、公式っぽい文書!ページ番号まで教えてくださりありがとうございます。
    これに準拠していれば大丈夫そうですね、助かりました!

     |  Kuro
  63. 左から出入りさせて起きてるんでメニューもタブもマクロも通らないのだな

    なんか今100%発動してるw
    一旦出て戻った時点で止まってる
    ...
    で再起動したらとりあえず収まった

    あ、ちなみにwin10の64bit(8.1からうp)

     |  クリ廃止
  64. Meryの更新をありがとうございます!
    マクロ機能そこそこにほとんどマニュアルな使い方で
    アウトラインプラグインをルンルンしながら使わせてもらっています。

    アウトラインのノードをD&Dで簡単に
    組み替えられるようになったの、超良いですね☆
    んもうトキメキながら使わせていただいております♪

     |  ユーケー
  65. ● クリ廃止 さん

    Win 10 環境でゴリゴリ試してみましたが再現できず…
    なにかコツがつかめたらご連絡いただけると助かります!

    8.1 からのうpって不安定じゃありません?うちの Win 10 はクリーンインストールですが、しばしばブルースクリーンが出ますねぇ。Win 95 を思い出しますわ。

    ● ユーケー さん

    コメントありがとうございます!
    あまり激しく使うと壊れてしまうかもしれませんので、優しくしてくださいねw

    > んもうトキメキながら使わせていただいております♪

    コメント欄 (不具合・ご要望) が怖くて開くときにドキドキして胃が痛くなってしまいますが、純粋なお褒めの言葉のみを頂けるととてもうれしいです!

     |  Kuro
  66. クリーンインストールでも不安定なら8.1 からのうpかどうかあまり関係なくね?w

    これだね
    Me以外の7以前>>>>>>>>>>>>>>>>10>>>8>>>>>>>>>>>>>>>>>>>>>>Me

    7以前の選択が安いモデルになかったんで仕方なく
    タブレット専用UIの8系じゃ使いもんにならんから即刻10入れた
    番号だけ上がっても中身はなんかの皮かぶった8だもん糞に決まってるw

     |  クリ廃止
  67. Per-Monitor DPI Awareなテキストエディタを探していてたどり着きました。

    実際にDPIの異なるディスプレイ間で動かしてみたのですが、タイトルバーだけ文字サイズがSystem DPI基準のまま変わらないようです。低DPIのディスプレイで表示するとタイトルバーだけでけぇ!ってなります。

    仕様なのか実装忘れなのかは分かりかねますが、とりあえずご報告まで。

     |  k3
  68. ● クリ廃止 さん

    > クリーンインストールでも不安定なら8.1 からのうpかどうかあまり関係なくね?w

    確かにw
    私も最初は 8.1 からアップグレードして使ってたのですが、どうも不安定だったのでクリーンインストールしたのです。もちろん不安定なままでしたが…

    10 は 8 よりはマシな気がしますが、定期的に Windows アップデートという名の OS 再インストールが走るのは勘弁していただきたいですなぁ。

    ● k3 さん

    コメントありがとうございます。

    > Per-Monitor DPI Awareなテキストエディタを探していてたどり着きました。

    おぉ、ありがとうございます!
    Per-Monitor DPI Aware 対応は非常に苦労した部分ですので、それを言っていただけると嬉しいですね。

    > タイトルバーだけ文字サイズがSystem DPI基準のまま変わらないようです。

    はい、これは Windows の仕様ですね。(この仕様のおかげで苦労しました…)

    現在のところ Per-Monitor DPI Aware のデスクトップアプリケーションでタイトルバーやメニューなどの領域のサイズを変更する手段が OS レベルで提供されていません。(Microsoft の公式としては)

    ここからは余談ですが…
    実は、最近になってそれを可能にする隠し API の存在が確認されたとの情報がありましたが、Microsoft の公式な情報ではなく、今後 API の仕様が変更されることも十分に考えられますのでまだ実用段階ではないようです。

    一部では、デスクトップアプリケーションを撲滅するために Microsoft がわざと API を隠しているとのウワサも…^^;

    そういうわけで Windows の機能として正式に発表された際には対応したいと思います。

     |  Kuro
  69. ひどすぎるな
    遠くない未来M$から離れるしかなくなる日が来るな

     |  クリ廃止
  70. やはり新しい Emmet LiveStyle への対応は修正程度じゃむりでしたか。
    Mery が前バージョンと連動したときは本当に感動しました。仕様変更とはいえ動かなくなるのは悲しいですね。
    開発の優先順位など構想があることと思いますので、Kuroさんの方針にお任せしたいと思います。

     |  アイスクライマー
  71. 別に作業に支障はないのですが、
    編集モードをC++として、
    printf("#");
    と打ち込むと『);』の部分の色付けがおかしくはないですか?
    恐れ入りますが、ご確認お願いいたします。

     |  うつけもの
  72. ● アイスクライマー さん

    コメントありがとうございます。

    新しい Emmet LiveStyle を使用してみましたが以前のものと比べると格段に安定していますね。あと、他のブラウザやデバイスでもリアルタイムにプレビューできる Remote View 機能には驚きました。(Remote View 機能はベータテストが終わったら有料になるらしいですが…)

    Mery の LiveStyle 対応ですが、現在、作り直している最中です。Emmet LiveStyle 側の仕様も固まっているようですし、なにより安定性が向上しているため割とスムーズに開発できそうですので、今しばらくお待ちくださいませ。(今週末か土日ぐらいには公開できるといいなー)

    ● うつけもの さん

    ご報告ありがとうございます。
    なるほど、「#」は行の右側強調ですが、引用符 (文字列) の中にある場合は外まで影響しないほうが良さそうですね。次のバージョンでは修正しておきます。

    ついでに
    /* aaa#bbb */ ccc
    みたいにコメントの外の ccc も同様に影響しないようにしたほうが良さそうですね。

     |  Kuro
  73. こんばんは。
     Emmet LiveStyle の再対応、数か月待ちを覚悟していたので仮に来週になっても再来週になっても嬉しい驚きです。
    公式サイトでセンスのいい紹介動画見てきましたが Remote View 面白いですね。そこまで出来るようになるのか~・・・と感心します。
    国産エディタ対応第一号になる日をワクワクしながら待ちたいと思います!

     |  アイスクライマー
  74. Mery 2.4.0.5701 (beta)で追加された『Ctrl + マウスホイールでフォントサイズを変更できるようにできる機能』を無効にできるオプションが欲しいです。
    たまに無意識でCtrlを押しながらマウスホイールをぐるぐるやってしまい、意図せずフォントサイズが変更されてしまうことがあるので・・・

     |  ほてぷ
  75. ● アイスクライマー さん

    コメントありがとうございます。
    Mery の更新、飽きてしまって Emmet LiveStyle ばかりやってましたw

    とりあえず開発完了…っぽいです。公式エディタな Atom プラグインもまだベータ版のようですし、しばらくはベータ版ってことにしておこうかと思います。あとは記事を書くだけですが、それがなかなか進みませんw

    > 国産エディタ対応第一号

    おぉ、なんか素敵な響きですね!私もワクワクしてきましたw

    ● ほてぷ さん

    コメントありがとうございます。

    > Ctrl + マウスホイール

    これはご要望が多かったので搭載した機能ですね。

    Windows では割と一般的な動作のようなので、できれば誤発動しないような使い方に慣れていただいたほうが、他のアプリケーションにおいても効率的かと思ったり、思わなかったりしなくもないですが…^^; 

    でも、ホイールがなめらかに回転するマウスとかだと誤発動しやすいですよね。
    無効にするオプション、ご要望が多ければ検討してみたいと思います。

     |  Kuro
  76. 実は古いバージョンである痛エディタ前から使っています。(ちゃっかりかもですが・・・)
    Tidy を HTML5 対応版に差し替えた
    ってところは良いですね。
    アラ探ししてみますかw

     |  荒野ほのる
  77. ● 荒野ほのる さん

    こんばんは。

    当時、エディタの名前を募集したときに投稿してくださった方ですかね、ご無沙汰しております^^
    痛エディタという名前があったかは忘れてしまいましたが、「起動遅しエディタム」という名前はかなりワラった記憶がありますw

    Tidy の HTML5 差し替えついでに HTML ドキュメントの検証機能が追加されていますので、お役にたてると幸いです。

    アラ探し後の不具合報告は、小出しかつオブラートに包んで教えていただけると嬉しいですw
    【不具合】っていう見出しが一番胃袋にダメージを与えますよーw

     |  Kuro
  78. 横組みの印刷がうまくいかないようです。
    OSをWIN10にしてからなので、ドライバーとかの問題かもしれません。
    PDFで保存したデータを下記のURLにアップしてみました。
    http://25.gigafile.nu/jc7b02b39c60b42b5b55600923df1d7b1-0624
    なにか、対処法はありますか?

     |  gami3n
  79. ● gami3n さん

    コメントありがとうございます。
    恐れ入りますが、添付の PDF の内容のどこに問題があるのか教えていただけませんでしょうか?
    (段組みが適用されているのかどうか判断しづらいので…)

    一応、こちらの Windows 10 の PDF 印刷機能で確認してみましたが特に問題はなさそうでした。

    文字が縦書きになってる、、、とかじゃないですよね?^^;

     |  Kuro
  80. インストーラ版でのことなんですが、
    オプションを変更してもソフトを閉じて開くと元に戻ってしまいます。
    iniファイルをexeと同じ階層に置いた状態で、RoamingってところにあるMery.iniを消しても元に戻ってしまいます。
    ルーラの自動変更のオフや、ショートカットキーの変更、表示スタイルの変更、全て無効化されます。
    どうしたらよいでしょう。
    iniをいじってみたいんですけど何処が何なのかさっぱりで

     |  BlackApple
  81. ● BlackApple さん

    こんにちは。

    ini ファイルと exe を同じ階層に置きますと、そちらの ini ファイルが優先して使用されるようになりますが、この場合は Mery の配置されているフォルダなどに書き込み権限がないと設定を保存できません。

    Program Files 配下などは書き込み権限がない場合がありますのでそのせいかと思います。

    通常、ポータブル用途でなければ ini ファイルと exe を同じ階層に置く必要はありませんので、exe と同階層の ini を削除してください。

    Roaming などに設定が保存されるのがイヤだという場合は ini ファイルと exe を同じ階層に配置しますが、この場合は Mery のフォルダを Program Files の下ではなく Documents などの書き込み権限がある場所に配置してください。

    > iniをいじってみたいんですけど何処が何なのかさっぱりで

    ini ファイルを直接編集する場合は Mery で編集すると終了時に上書きされてしまうので、メモ帳などの別のエディタで編集する必要があります。

     |  Kuro
  82. exeと同階層のiniをroamingに移して削除したらうまくいきました。
    ついこの間までポータブル版を使ってて、ついその癖で置いてしまいました。
    ありがとうございました!

     |  BlackApple
  83. >恐れ入りますが、添付の PDF の内容のどこに問題があるのか教えていただけませんでしょうか?
    うまく文章にできなくて申し訳ありません。

    再度、PDFファイルをアップしました。
    http://2.gigafile.nu/ef9640e93f27a75e2c910db502337a537-0627

    こちらの「希望する印刷」が印刷したい横組みの印刷内容です。
    通常なら何も設定しなくてもこのように印刷されるバズなのですが、設定を調節しても「横組み印刷」のように縦組みで印刷されてしまいます。
    OSを「Windows 10」に変更してから起きた事例なので、OSに関係しているのかと思っていますが、何かよい対処方法があればと・・・。

     |  gami3n
  84. ● gami3n さん

    ご返信ありがとうございます、PDF を確認させていただきました。
    横書きで印刷したいということであれば、印刷設定画面で横書きフォントを選択する必要があります。

    フォント名の頭に「@」が付いている縦書き用のフォントを選択しているのではないかと思いますので、頭に「@」が付いていない横書き用のフォントを選択してみてください。

     |  Kuro
  85. >フォント名の頭に「@」が付いている縦書き用のフォントを選択しているのではないかと思いますので、頭に「@」が付いていない横書き用のフォントを選択してみてください。
    指示通りにフォントを変更して直りました。ありがとうございます。
    @が付いているフォントはいままで気がついていませんでした。

    お手数をおかけしました。

     |  gami3n
  86. Win10に移行中ですが、Meryが問題なく動くので、すばらしい開発者のKuroさんにただただ感謝です!

    ちなみに、SE-200PCIは古いドライバでなんとか動かしています。

    共有ではなく自分用として持てた初PCがAMD K6-2だったので、若干のAMDファンなのですが、
    10への移行を機にPCを組み直そうかとハードを調べているうちに、今のAMDとIntelとの差を知って愕然としました orz

     |  saku
  87.  いつもお世話になっております。

     2016年2月13日に報告しましたマルチモニタウィンドウ…

    --引用
    OSはWindows7sp1で、デュアルモニタ環境(A:1920x1080 + B:1050x1680)で、Aモニタを「メインディスプレイ(コントロールパネル以下「画面の解像度」より)、Bモニタ下部にタスクバーを配置しています。
     A   B
    ┌──┐┌─┐
    │Main││ │
    └──┘│ │
    タスク ├─┤
     バー→└─┘

    崩れるかも知れませんが、罫線で書くならこんなイメージです。
    これで印刷プレビューを表示すると、A:1920x1080側にタイトルバーが隠れてしまいます。
    --引用ここまで

    …の件です。

    Ver.2.5の対応
    > マルチディスプレイ環境で印刷プレビューダイアログをアクティブウィンドウがあるディスプレイに表示させるようにした
    > → マルチディスプレイ対応って大変だよね

     Windows10にアップグレード、Bモニタをメイン、およびAモニタの位置を(マウスカーソルを見失わないよう)下に設定しました。
     この環境下、Aモニタ上で印刷プレビューを開くと、タイトル、メニューバー、ツールバーが画面上方に隠れてしまいます。わずかでも(この状態では左右しかできませんが)リサイズすると隠れてた分が出てきます。

    そのとき…

    [PrintPreviewForm]
    Left=-1868
    Top=283
    Width=847
    Height=1209
    Maximized=0

    となっています(1)。

     また、ここでBモニタをメインとし、AとBのタスクバーを入れ替えて同様の処理をすると

    [PrintPreviewForm]
    Left=208
    Top=-129
    Width=788
    Height=1209
    Maximized=0

    となっています(2)。

     (1)(2)共に外見の動きは変わりありませんでした。

     …つらつら書きましたが、最近は老眼なども影響し「小さな文字でできるだけ詰め込み見通しよく読む」目的の印刷が激減してきましたので…
     「基本的には対応しています」程度でいいような気がします。

     どうも失礼しました。

     |  盛焼
  88. ● saku さん

    こんばんは、コメントありがとうございます!
    SE-200PCI、こちらはどうも調子が悪くていまだ Win10 に移行できていないメインマシンからアクセスしてます…w

    夏に予定されている Windows 10 の大型更新「Anniversary Update」ですが、事前に開発者向けのプレビュー版で試してみたところ、なんか Mery をはじめ、Delphi で作られたアプリはちょっとヤバそうな気がしてます…

    Delphi 製アプリを起動するだけでブルースクリーン発生して、Delphi 製アプリ開発者たちはいったいどこへ走っていけばいいというのだろうか!と尾崎豊ばりに叫びたくなる今日この頃。

    Anniversary Update 正式版ではちゃんと動くことを祈るしかないです^^;

    ● 盛焼 さん

    ご報告ありがとうございます。

    > Windows10にアップグレード、Bモニタをメイン、およびAモニタの位置を(マウスカーソルを見失わないよう)下に設定しました。

    上下設置ですか、それは試したことがありませんでした。たぶん大丈夫だろう~って思っていましたが駄目なのですね、、、ちょっと調査してみたいと思います。

    > 基本的には対応しています」程度でいいような気がします。

    ノーン!
    時代はマルチモニタですので、こういう細かな動作こそ大切に対応していきたい次第でございます。

    > どうも失礼しました。

    いいえ、ご自由に、テキトーにバンバン書き込みしてやってくださいましw
    ノリと勢いだけで更新しているテキストエディタなので^^;

     |  Kuro
  89. 「Anniversary Update」は単なる機能追加ではなく、OSの低レベルでの変更もあるんですね。
    「Bash on Windows」の話から、そういう心配はしてましたが。

    Windows7のシステムイメージを大事に保存しておきたいと思います。
    情報ありがとうございました!

     |  saku
  90. 動作の軽さとタブ機能の両方があるテキストエディタを探し求めていたので、Meryと出会えて嬉しいです٩( ‘ω’ )و

    ところで、タブを1つだけウインドウとして独立させることはできますか?
    また、1行あたりせいぜい数十字のファイルの場合でも、水平スクロールバーを3㎝動かすだけで1,000字もスクロールするのが惜しいです!お忙しいなら・・・100年以内には変わっていれば嬉しいですね!

     |  ٩( ‘ω’ )و
  91. ● ٩( ‘ω’ )و さん

    Mery をお試しくださりありがとうございます。

    > タブを1つだけウインドウとして独立させることはできますか?

    タブの部分をマウスでウィンドウのそとにドラッグドロップしてやればウィンドウを分離することができます。

    > 水平スクロールバーを3㎝動かすだけで1,000字もスクロールする

    「ツール」→「オプション」の「基本」タブにて「水平スクロールバーを自動的に表示」にチェックを入れれば、必要最小限の大きさの水平スクロールバーに切り替え可能です。

    水平スクロールバーは初期値で「水平スクロールバーを自動的に表示」の状態にしたほうが使いやすい気がするので次のバージョンでは初期値 ON に変更してみようかなぁ…

     |  Kuro
  92. タブでいくらか開いてる状態で
    変更後保存せずに閉じた場合にタイトルがそのまま残る
    ことがあるようだ
    一度起きたんだけど再現しないので詳細不明

     |  クリ廃止
  93. ● クリ廃止 さん

    ご報告ありがとうございます。
    タイトルが更新されないときなどは、キャレットを移動したりすれば更新されるはずです。

    Windows なので更新しろーっていうメッセージが飛んでこなかったりすることもたまにはあるので、あまり気にされないほうがよろしいかと…^^;

    でも、再現手順がわかったらご連絡いただけると幸いですw

     |  Kuro

コメントを残す