テキストエディター「Mery」Ver 2.4.8

Mery 2.4.8

葛根湯の力を借りて開発作業。

スポンサーリンク

更新履歴

  • デスクトップのカスタマイズをしている場合に起動時に「画像サイズが無効です」というエラーが表示されることがあるのを修正
    > おま環じゃね?と疑ってスミマセンでした!orz
  • 最小化時にファイルを開いたときにウィンドウ状態を復元するようにした
    > Delphi 6 の不具合だったと思うけど、XE では直ってたみたい
  • 検索・置換ダイアログのサイズを可変にしてみた
    > 位置・サイズは毎回元に戻ります。記憶するかどうかで仕様を迷っています
  • 起動時引数にファイルから置換「/rd」を追加
    > 実装するのをすっかり忘れてました
  • 終了時に履歴を消去するオプションを追加
    > あると便利ですね
2016/01/29
  • 検索・置換ダイアログの位置とサイズを記憶するようにした (再起動時にリセット)
    > 次バージョンで実装しようと思ってたのですが…
  • 「画像サイズが無効です」のエラーが表示されることがあるのをさらに修正
    > まだ直ってませんでした!orz
  • その他、細かい修正

ダウンロード

Mery_2.4.8.6420.zip
* Windows 10, 8, 7, Vista, XP 対応
* VirusTotal でウイルスチェック済

Rising でマルウェア扱いされていますがもちろんマルウェアではありません。強調表示で使用している単語辞書 (merycfg.dll) の PHP 関連の単語が誤検知されているようです。ご心配な方は Vector でウイルスチェック済のものが公開されるまでお待ちください。

Mery_2.4.8.6420.exe
* インストーラー版
* Windows 10, 8, 7, Vista, XP 対応
* VirusTotal でウイルスチェック済

スポンサーリンク

関連する記事

フォローする

コメント (79)

  1. 検索・置換ダイアログボックスのサイズ可変仕様、ありがとうございます。2コ前の記事にもコメントを残しましたが、起動中は覚えておいてほしいですが、終了後の再起動時にリセットする仕様でまずはいいと思います。その方が、特に関心のない方にとっては、これまでと違和感ないでしょうし。

     |  ちょ
  2. Mery 2.4.8.6415zip版をCドライブの個人フォルダ内で、今ためしたら「画像サイズが無効です」がでて内容が白紙になります。
    環境Win8.1からWin10にアップグレード、8ガジェットの天気を使用中です。
     ちなみにVer2.4シリーズは「画像サイズが無効です」が出ます。
    Ver2.3シリーズは正常ですので、Mery_2.3.0.5095に戻して使用されていただいてます。

     |  うさぎ
  3. ● うさぎ さん

    ご報告ありがとうございます!
    調査してみましたところ、一部、まだ対策が足りていなかったようです。

    Mery 2.4.8.6420 にて修正しました。
    たぶんこれで直っていると思いますので、お手数をお掛けしますがお試し頂けますでしょうか?
    (Mery 2.4.8.6420 のダウンロードこの記事のリンクを差し替えておきました)

    … これで駄目ならお手上げかもしれません (´・ω・`)

     |  Kuro
  4. >最小化時に
    ありがとうございます。早速使わせてもらいます。

    >葛根湯の力を借りて
    急に寒くなってきましたね。お気をつけください。

     |  saku
  5. 新バージョンリリースお疲れ様です。

    1つ要望です。

    ヘルプ-バージョン情報に示されているHTML Tidyですが、どうやら最近になってバージョンアップしてるみたいです。
    ついでにサイトURLも変わってるみたいで、GitHubでごにょごにょしてるみたいです。
    http://www.html-tidy.org/

    優先度は高くない(白状すると、今までTidyの機能を真面目に使ったことが実はない)のですが、HTML5対応してるなら面白いなと。
    暇なときにでも手を入れてもらえればと思いました。

     |  momdo
  6. Kuro様
    Mery 2.4.7.6370で終了時履歴消去をお願いした者です。
    終了時履歴消去を実装いただき、ありがとうございます。ばっちり動作しています。
    検索・置換以外の項目も終了時に自動的に消してくれるのはプライバシーも安心です。

     |  レッド
  7. 更新お疲れ様です。

    不具合と思われる動作を確認したのでご報告を。

    Meryを最大化後、最小化状態で、Meryで開いているファイルを外部エディタで編集後、
    最小化状態から復帰した時に、外部で変更されている旨のメッセージが表示されないようです。

    Mery 2.4.8.6420
    Windows 10

     |  K.O
  8. ● saku さん

    早速お試しくださりありがとうございます。
    お気遣いありがとうございます。しかし、風邪ですねコレは… (〃´Д`〃)

    ● momdo さん

    情報ありがとうございます。
    おぉ、なんか公式っぽくなってますね!HTML5 に対応した Tidy がこっそり開発されていたのは知っていましたが、その時はまだベータ版だったのでスルーしてました。

    早速ダウンロードしてみたのですが、まだ C++ 用のヘッダファイルしか含まれていないようで、Mery 用に Delphi に移植されれば採用してみたいですね。(自力で移植すれば第一人者になれるかもしれませんが…w)

    私も Tidy は XML 整形でたまに使うぐらいですが HTML5 に対応するとなると、なんだかトキメキますね。面白そうなネタなので帳面に太字でメモっときますw

    ● レッド さん

    早速お試しくださりありがとうございます。
    持ち運びする環境では役に立ちそうな機能ですね。素敵なアイデアのご提供ありがとうございました!

     |  Kuro
  9. ● K.O さん

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

    現象、確認いたしました。どうやら今回から実装した「最小化時にファイルを開いたときにウィンドウ状態を復元するようにした」の副作用のようです。

    対策を調査してみます。

     |  Kuro
  10. こんばんは。Meryをはじめて使いました。シンプルかつ高機能で使いやすいです。良いツールをありがとうございます。

    ただひとつ気になったところは、アプリを起動するたびにウィンドウの大きさが再固定されてしまうことです。Windowsのメモ帳のように、最後に閉じた大きさを記憶してくれれば良いなあと思います。

    考慮していただければ幸いです。

     |  yahho-
  11. ● yahho- さん

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

    ウィンドウの大きさですが、上部メニューより「ツール」→「オプション」で、「基本」タブ内にある「ウィンドウの位置とサイズを復元」にチェックを入れておけば、前回終了時の大きさを記憶・復元します。

    その下のボックスに 横 x 縦 のサイズを入力すれば毎回指定サイズでの起動も可能です。

     |  Kuro
  12. 環境Win8.1からWin10にアップグレード、8ガジェットの天気を使用中です。
     Mery_2.4.8.6420.zipをCドライブの個人フォルダ内で、今ためしたら「画像サイズが無効です」がでなくなり内容も”きちんと表示”されてます。ちなみに最初デスクトップ上でokだったので我がフォルダ内へ移動後、構成設定はVer.2.xxからのを移植でokです、私は印刷のインク節約のため全部細字の「Mery印刷用構成設定」と「Mery構成設定」と二刀流仕様で愛用させていただいてます。
     ちなみにWin10にアップグレードしたらタイトルバーのボタンの幅の設定なども設定後3日ぐらい起動と再起動などしてるうちに希望の幅に自然になったり、タスクバーのアイコンが出たり出なかったりと、安定表示するのに1週間以上かかったみたいと大変でした。
     こんな状況の中での、作者様の対応がいかに大変か尊敬いたします、ありがとうございました。

     |  うさぎ
  13. ● うさぎ さん

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

    > 「Mery印刷用構成設定」と「Mery構成設定」と二刀流

    ご愛用ありがとうございます。画面での編集時のフォントと印刷時のフォントを別々に設定できる点ですかね、お褒めのお言葉ありがとうございます!

    Windows 10 には私もかなり困っております。
    Windows 8 からのアップグレードですが、私の PC はまだかなり不安定ですね。

    > こんな状況の中での、作者様の対応がいかに大変か尊敬いたします

    Windows XP、Vista、7、8、8.1、10 対応となると動作検証がホント大変です^^; 今後も、環境によっては何か不具合が発生することがあるかもしれませんが、お付き合いいただければ幸いです。

     |  Kuro
  14. ● Kuro さん
    開発お疲れ様です&感謝です。

    開発室覗きましたが、開発コードは Alpaka なんですね(笑
    見ていてうむ、と思ったことを書いてみます(水を差すようなこともありますが、ご勘弁を)

    自動アップデートについてはセキュリティの方が怖いですね。
    というのも自動アップデートマクロを下ろすきっかけにもなった E○Editor さんの件がありますので。
    真面目にやると電子署名して改竄チェックする必要があるかと思います(フリーなので自己責任もありですが)
    gP○d みたくアップデートチェックあたりが現実的でないでしょうか。

    スキン機能はおっしゃるようにダサ……げふん、ダサいですね。
    というか無効化された項目がほぼ見えないような……

    VisualStudio は古いやつで良いと思います。
    VS2015 Community だと入れるだけで 11GB とか喰う大食らいですし。
    (でも私の勧めるプラグイン開発だとこれ入れなきゃなんですよね)

    64bit 化の恩恵は、エディタではほぼなさそうな気もしますが、一応トレンドですからねぇ。
    ただ書かれているように、Active Script の 64bit 対応は面倒そうですね。
    64bit WSH では ScriptControl が使えないですが、このあたりどうなるんだろ……

    ご意見・ご要望の項目はマクロorプラグインで対応可能なことも多いですから、そちらでの検討もありですね。
    本体機能の方がデフォルトで使えて楽なのは確かですが。

    Alpaka 開発、応援しております!

     |  ks
  15. ● ks さん

    コメントありがとうございます。
    こちらこそ、いつもユーザサポートを手助けして頂き感謝です。

    開発室、気づいてくださったのですね。まだ大したことは書いてませんが^^

    > 自動アップデートについてはセキュリティの方が怖いですね。

    某エディタさんの件、ありましたね…
    確かに情報送信とかセキュリティ的なリスクを考えると個人開発のフリーソフトで実装するのは厳しそうですね。
    gP○d さんは自動アップデートではなくアップデートチェックのみだったのですね。サーバ増強とかされていたようなので、自動アップデートを実装されたのかと勘違いしておりました。

    スキン機能は他にも色々なスキンがついていたのですが、どれもセンスのないデザインのものばかりで gP○d さんのスキン機能のように美しくはなかったです^^;

    > 64bit WSH では ScriptControl が使えないですが、このあたりどうなるんだろ……

    マジですか!
    既存のマクロで ScriptControl を使用しているものがあると全滅ですね… マクロ側で対応できるのかしら。

    Alpaka 開発ですが、2 系で一通りバグをつぶしてから本格始動しようと考えていますが、2 系のバグフィックスをリリースすると次のバグが発覚するという繰り返し。まだ 2 系をいじくってます^^;

     |  Kuro
  16. Build: 2.4.7.6370 でも報告させていただきましたが、2.4.8.6420 でも同じような
    症状が発生しています。

    プラグインやマクロ等は特に入れていません。Meryに.txtを関連付けておりますが
    どういったときに発生するのか試していたのですが、Meryは終了させても
    プロセスが残っている(終了に時間が掛かっている?)事があるみたいで、プロセスが
    残っているときに次のファイルを開こうとすると、以下のような例外を吐くことがあります。

    ※OKを押さずに他のウィンドウを選択したりすると、どんどん増えていきます。

    アドレス 005F0A3F でアドレス 00000008 に対する読み取り違反がおきました。
    アドレス 005F09D0 でアドレス 00000008 に対する読み取り違反がおきました。

    また、例外が出ない時も、その状態で次のファイルをどんどん開こうとすると
    プロセスがどんどん貯まって、纏めてバサッと消えることもあります。

     |  tama
  17. ● tama さん

    ご報告&調査のご協力ありがとうございます。

    Mery が終了しているのに Mery.exe のプロセスが残っている状態は想定外ですのでその状態で使い続けると例外が発生すると思います。この場合は一度、Mery.exe のプロセスを完全に終了してから Mery を再起動していただく必要があります。

    終了したにも関わらずプロセスが残っている状態になる点については調査しておりますが、こちらの環境では現象を再現できておりません。なるべく環境を合わせたいので、差し支えなければお使いの OS をビット数も含めて教えていただけませんでしょうか?

    それと、確かポータブル環境でご使用だったと思いますが、USB メモリか何かに Mery フォルダを入れて、Mery.exe と同じ場所に Mery.ini を設置している状態でしょうか?

    --- 以下、気になること ---

    終了時に USB メモリに Mery.ini を書き出すのが遅くて Mery.exe のプロセスがなかなか終了しないという可能性も考えてみましたが、実際にこちらで試してみるとすんなり終了できるんですよね…

    他に考えられる事柄としては、ネットワークドライブに置いてあるのファイルを編集したりとかで、終了時にネットワークドライブを見に行って終了が遅くなっているとか…

    後は、タスクトレイに常駐機能を利用されているとか…

    このあたりでお気づきの点はございませんでしょうか?

     |  Kuro
  18. OSは Windows7 Pro 64bit です。発生したときは、直ぐに再現するのですが
    今色々開く閉じるを繰り返しても、再現せず…。

    条件がイマイチ分かりません…。発生するときはHDDのファイルでも直ぐに
    再発するのですが…。(会社PC,自宅PC何れでも発生したことあり)

    MacTypeを使ってRictyフォントを表示させているのでその絡みかと思いましたが
    MacTypeを落としても出ていたのでそれも関係はなさそうです。

    もう少し色々試してみます。

     |  tama
  19. > 確かポータブル環境でご使用だったと思いますが、USB メモリか何かに Mery フォルダを入れて、Mery.exe と同じ場所に Mery.ini を設置している状態でしょうか?

    Mery自体はHDD(D:\)に入れて使用しており、INIは「\AppData\Roaming\Mery\」に生成されています。
    というか、ここにLOGも吐いていたんですね。頻度としてはそんなに高いわけではなかったです。
    (一度発生し出すと再現しやすいため、一杯ありますが)

    おま環の何かがあるのか…。。

    2015/06/15 10:39 モジュール 'Mery.exe' のアドレス 00661490 でアドレス 00000008 に対する読み取り違反がおきました。
    .
    .
    .
    2016/02/03 19:36 モジュール 'Mery.exe' のアドレス 005F0A3F でアドレス 00000008 に対する読み取り違反がおきました。

     |  tama
  20. あぁ、すいません。削ったつもりが大量に(^_^;)
    スパムのようになってしまったので、削除して下さいm(__)m

     |  tama
  21. ● tama さん

    ご返信ありがとうございます。
    ログファイルは確認させて頂きましたので途中を削除しておきました。

    Windows 7 (64bit) ですか。Mery 開発用の PC と同じ環境なので、使用頻度は一番高いのですが…^^;

    ログを拝見する限り日付的に Mery 2.3 以前でも発生しているようですね。
    読み取り違反のアドレスから原因を探ることができれば良いのですが、残念ながらリリース用に作成した exe ファイルだとそこからエラーの発生元を調べることができないんです…><

    MacType は使用したことがないのでわかりませんが、Mery 側で DirectWrite を使用しているので競合する可能性はあるかもしれませんね。DirectWrite を無効にしていれば問題ないと思いますが。

    ほかに考えられる原因としては、Mery の設定で特定の組み合わせの場合に発生するエラーとか、あとはアウトライン機能をお使いであればそっち側の不具合とかでしょうか。

    自宅 PC、職場 PC の両方で発生するとのことですので、Mery の設定が関係しているのかもしれません。オプションやアウトラインの正規表現などの設定を変更されていたりしますか?

    あとは、何かランチャーアプリを使用されているとか、常駐アプリでクリップボード監視ソフトを使われていたりとか、ショートカットキー支援ツール的なものを使用されていたりとか、このあたりでお心当たりはございませんか?

    お手数をお掛けしますがご確認よろしくお願いいたします。

     |  Kuro
  22. 自宅PCでも再現。とレスしましたが自宅PCのログファイルは生成されていませんでした。
    当方の勘違いだったかもしれません。申し訳ありません。

    本日、職場PCでもやはり再現したため、(毎回ではないので、どうやれば出るのか分からない…)
    取り敢えず、元の実行ファイルを入れていたフォルダと設定ファイル(AppData\Roamingの下)
    を削除し、再度Meryをダウンロード、再設定し使用開始してみました。
    (そういえば、ずっとVerUPの度に本体フォルダ上書きだけだったので)

    これで再現するようであればまた報告します。
    ※アウトライン機能は使用していません。暫く使って再現しなければ、元の設定と見比べてみます。

    また、以下を使用しています。(いずれも最新)

    ランチャーアプリ -> Orchis 14.0419
    クリップボード監視 -> CLCL Ver2.02
    ショートカットキー支援ツールは使用していませんが、 MouseGestureL.ahk Version 1.30

    以上です。宜しくお願いします。

     |  tama
  23. ● tama さん

    ご返信ありがとうございます。

    Mery にもクリップボードを監視する機能が付いているため、クリップボード監視ツールと競合している可能性は考えられます。アクセス違反のエラーではないですが、以前にクリップボード監視ツールと干渉するというご報告は頂いたことがあります。

    なるべく競合を避けるためクリップボードの監視はタイミングをずらしてクリップボードにアクセスするような作りにしているのですが、頻繁にコピペが発生する場合などは他の監視ツールと同時にクリップボードにアクセスしてしまって固まってしまうことがあるかもしれません。

    ver 2.4 以降はデフォルトでクリップボード監視はオフなのですが、それより前のバージョンはデフォルトがオンになっており、そのまま上書きでバージョンアップされていると、Mery のクリップボード監視が有効になっている状態だと思います。

    今回、設定ファイルを削除されたとのことですのでクリップボード監視はオフになっていると思いますので、これで症状がなければクリップボード監視ツールとの競合の可能性が高いですね。

    ランチャーアプリの Orchis やマウスジェスチャー支援ツールとの競合は今のところご報告を頂いたことはありませんが、ランチャーアプリは「X-Finder」や「あふ」などではご報告を頂いたことがあります (不具合は修正済み) ので、念のため確認させていただきました。

    お手数をおかけしますが、よろしくお願いいたします。

     |  Kuro
  24. 初めまして
    いつも使わせていただいてます。ありがとうございます。

    えっと、Windows7で利用させていただいているのですが、久しぶりにバージョンを上げたところ
    タスクバーから最近使用したファイルのショートカット、ピン止めが使えなくなってしまいました。
    検索してみたのですが情報が出て来なかったので質問です。

    仕様変更されたのでしょうか?
    便利だったのでもし対応する方法があるなら教えていただきたいです。

     |  ミュ
  25. ● ミュ さん

    ご愛用くださりありがとうございます。
    Windows 7 のタスクバーからの最近使用したファイルなどへのアクセスにつきましては Mery 側で仕様変更は行っておりません。Windows 7 側の設定ではないでしょうか?

    タスクバーの何もない部分を右クリックしてからタスクバーの「プロパティ」を開き、「スタートメニュー」タブの一番上にある「カスタマイズ」ボタンをクリックし、ダイアログの下の方にある「ジャンプリストに表示する最近使った項目の数」という部分の数字が 0 より大きい数値に設定されているかどうかをご確認ください。

    その部分がグレーアウトしている場合はひとつ前の画面の「スタートメニュー」タブ内にある「プライバシー」の項目で「最近開いた項目をスタートメニューとタスクバーに保存し表示する」の項目にチェックを入れて見てください。

    それでも駄目な場合は下記のサイトに対処方法が載っていました。
    http://freesoft.tvbok.com/windows7/desktop/post_86.html

    ただし、↑のサイトの対処方法のレジストリの変更などは危険が伴いますので良く分からない場合は触らない方が良いかもしれませんね。

     |  Kuro
  26. 上記のサイトの方法で直りました。
    項目数も操作できたんですね。
    ご丁寧にありがとうございます!

     |  ミュ
  27. MeryがPC雑誌に掲載されてました(もはや珍しい事ではないですが)。

    「最強無料ソフト コンプリート・バイブル 2016」
    http://www.shinyusha.co.jp/media/freesoft-cb2016/

    ごく稀に便利そうなソフトを発見する事があるので、つい立ち読みしてしまいます(汗
    開発&サポートありがとうございます。

     |  saku
  28. ● saku さん

    ご連絡ありがとうございます。
    私もフリーソフトのまとめみたいな雑誌は割と好きですね^^

    しかしいくらフリーソフトだからと言って無許可で勝手に雑誌のコンテンツに収録されるのはいい気持ちがしませんね… たまに掲載依頼が来たら見本誌送付希望に「○」印をつけてるんですが、一度も送ってくれたことがないですしw

     |  Kuro
  29. いただきました、いつもお世話になっております。

    比較的最近から起こり始めた現象ですが、このバージョンからか分からですが現状起こってる不具合の可能性がある動きです。
    OSはWindows7sp1で、デュアルモニタ環境(A:1920x1080 + B:1050x1680)で、Aモニタを「メインディスプレイ(コントロールパネル以下「画面の解像度」より)、Bモニタ下部にタスクバーを配置しています。
     A   B
    ┌──┐┌─┐
    │Main││ │
    └──┘│ │
    タスク ├─┤
     バー→└─┘

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

    Mery.ini を観察したのですが
    ----
    [PrintPreviewForm]
    Left=25
    Top=-98
    Width=788
    Height=1178
    Maximized=0
    ----
    明らかにHeightの数字が悪さしてるなと書き換えて保存、終了、起動、プレビューでタイトルバーの件は解決しましたが、プレビュー画面サイズが適切な形で保存されてないような感じを受けます。

    現状(なぜに?)
    ----
    [PrintPreviewForm]
    Left=200
    Top=200
    Width=1440
    Height=790
    Maximized=0
    ----

    印刷することは多くないので個人的には急ぎませんが、念のため報告させていただきます。

    P.S. どうやら私にとって「恋に落ちてる」エディタはMeryのようですw

     |  盛焼
  30. ● 盛焼 さん

    ご報告ありがとうございます。
    たまたま私の環境も 1920x1080, 1680x1050 のデュアルモニタだったので現象再現できました。

    オプションの「ウィンドウ位置とサイズを復元」にチェックを入れた状態での初回プレビュー表示時に発生するようですね。一度ウィンドウサイズを変更してやればそのサイズが記憶されるので次からは大丈夫ですね。

    エディタウィンドウの方はマルチモニタにも対応するように作りこんでいるのですが、印刷プレビューの機能に関してはそもそもマルチモニタ対応の処理をまったくしていませんでした^^; (印刷機能、ほとんど使わないもので…)

    > P.S. どうやら私にとって「恋に落ちてる」エディタはMeryのようですw

    ありがとうございます!
    って、それ「S●blime Text」さんのキャッチコピーだったような…w

     |  Kuro
  31. >たまたま私の環境も 1920x1080, 1680x1050 のデュアルモニタだったので現象再現できました。

    よかったです、時代の流れでペーパーレスになってきてますが、個人的嗜好でテキスト印刷する時はMeryの2段組印刷が重宝するので…(さすがは「Vector Award 2011 文書作成・印刷部門賞受賞」です)。

    >って、それ「S●blime Text」さんのキャッチコピーだったような…w

    当然その辺りはご存知だろう、そう思いながら書きましたw

    今は構文ファイルを作っていますが、結構苦戦しています…

     |  盛焼
  32. Windows10で動いているぞ. ただしMery 2.2のままだが. 以下のようなtexのマクロも稼働中

    (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));

     |  Passers-by
  33. ● Passers-by さん

    Mery のご愛用ありがとうございます!長いッス!

     |  Kuro
  34. お久しぶりです。いつもありがたく使わせていただいてます。
    ほんとにMeryを使ってると他のエディタにはない安心感と感謝の念が立ち昇ります。
    いろいろな方のフリーソフトを拝借しておりますがこれほど愛着を持っているソフトはありませんねぇ……。
    これからもどうぞよろしく。尼アフィ踏むくらいしか出来てませんが

     |  Therry
  35. ● Therry さん

    ご無沙汰しております。Mery をご愛用くださりありがとうございます。
    純粋にお褒めのお言葉や応援メッセージのみを頂けることってあまりないので嬉しいです!

    おぉ、開発費捻出のご協力ありがとうございます。
    おかげさまで新たな開発環境で 64 ビット版の開発に着手しております^^

    あと、高解像度モニタ向けの開発も並行して行っており、つきましては大きいサイズのツールバーアイコン素材 (けっこーなお値段します) を狙っております…w

    今後ともよろしくお願いいたします!

     |  Kuro
  36. お世話になっております。一式入れ替えてから随分経ちますが
    安定動作しています。お騒がせしました。有り難う御座いました。

    そこで、機能の要望です。

    ・巨大ファイルを開くときに進捗状況を示すようなプログレスバーを
     ステータスバー等で表現されると分かりやすいです。(某エディタに
     ついていたものですが(汗)
    ・ウィンドウ位置とサイズを復元で、初期サイズを指定できますが
     ウィンドウ位置も固定出来るように指定出来るように出来ないでしょうか。

     |  tama
  37. 軽快に動作するので好んで使っています。

    印刷について要望があります。
    印刷するときに、3ページに収まる内容をN部(たとえば2部)、両面印刷で印刷すると、
    2枚目の裏側(4ページ目)は空白のページになってほしいのですが、次の部の1ページ目が印刷されます。
    つまり、1枚目は1ページ+2ページの内容が、2枚目は3ページ+2部目の1ページの内容が印刷されてしまいます。
    奇数ページのドキュメントを両面印刷するとき、かつ、2部以上出力するときは、空白ページを
    最後に挿入するのが良いかと思います。

    機能的に楽しい内容ではないかとおもいますが、対応してもらえますでしょうか。
    ※FAQやブログを確認したのですが既知でしたらすみません。

     |  bakedroy
  38. ● tama さん

    ご連絡ありがとうございます。
    安定動作するようになったとのことでホッとしました、良かったです!
    (やはりクリップボード監視と常駐アプリとの競合の可能性が高いかもですね)

    > 巨大ファイルを開くときに進捗状況を示すようなプログレスバー

    巨大なファイルを開くときはフリーズしてしまったように見えて不便ですが、残念ながらエディタエンジンが某エディタのように巨大なファイルを徐々に読み込めるような設計ではないため対応は厳しいです。すみません。

    > ウィンドウ位置も固定出来るように指定出来るように出来ないでしょうか

    こちらは対応可能ですが、ちょっとオプション画面のスペースが苦しそうなので検討してみますね。

    ● bakedroy さん

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

    > 印刷について要望があります。

    なるほど、おっしゃる通りです。
    部数って主に配布などが目的で指定するのに、これじゃあ意味がありませんね…
    一応、多機能な印刷がひとつのウリでもあるので対応したいところです。

    > 機能的に楽しい内容ではないかとおもいますが、対応してもらえますでしょうか。

    お気遣いありがとうございます。でも、割と楽しそうです^^
    次のバージョンでは対応できればと思います。

     |  Kuro
  39. いつもありがたく利用させていただいています。

    windowsのパッケージ管理ツールであるchocolatey(https://chocolatey.org/)
    が便利で利用しておりMeryのパッケージもあるのですが、昨年の10月から更新
    されていないようです。

    これはKuro様が作成されているオフィシャルというわけではないのですよね?

     |  rosolino
  40. ● rosolino さん

    Mery をご愛用くださりありがとうございます。

    chocolatey というツールは初耳ですね。パッケージは私が登録したものではありません。
    でも、コレなかなか面白そうなツールですね。ちょっと興味あります^^

     |  Kuro
  41. ぜひぜひ作者様がパッケージ登録していただけると、うれしいです!

     |  rosolino
  42. はじめまして。Win10移行にともない新たなエディタを探していてたどり着きました。
    まだ1ヶ月程度しか使ってないのですが少々要望させてください。

    ・PageUp/PageDownの移動量を半画面分に設定できるとうれしい
    →あるいはCTRLと併用すると半画面、みたいな

    ・VisualStudioのように上下に分割できるようになるとうれしい
    →上の方にある宣言部を表示しつつ下の方を編集する、とか。

    ご検討いただけるとありがたいです。
    よろしくお願い致します。

     |  hide
  43. ああ、すみません。上下分割はありましたね。
    もうしわけありません。

     |  hide
  44. ● hide さん

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

    > ・PageUp/PageDownの移動量を半画面分に設定できるとうれしい

    ご意見ありがとうございます。ご要望が多ければ検討させていただきます。
    もしかしたらマクロでも実装できるかもしれませんね。

    > ああ、すみません。上下分割はありましたね。

    ですね。次のバージョンでは左右に分割も実装する予定でございます。

     |  Kuro
  45. ● hide さん
    > ・PageUp/PageDownの移動量を半画面分に設定できるとうれしい
    マクロで実装してみました。

    # Document.Selection.PageDown(false, 0.5); はダメだった……

    PageDown
    =================================
    var withSelection = false;
    //var withSelection = true; // 選択処理有効時はこちらを有効に

    var s = Document.Selection;
    var sy = ScrollY;
    var cx = s.GetActivePointX(mePosView);
    var cy = s.GetActivePointY(mePosView);
    s.PageDown(withSelection);
    if (ScrollY == sy) {
    s.SetActivePoint(mePosView, cx, Document.GetLine(meGetLineView), withSelection);
    } else {
    var dy = ScrollY - sy;
    ScrollY = sy + dy / 2;
    s.SetActivePoint(mePosView, cy, cy + dy / 2, withSelection);
    }
    =================================

    PageUp
    =================================
    var withSelection = false;
    //var withSelection = true; // 選択処理有効時はこちらを有効に

    var s = Document.Selection;
    var sy = ScrollY;
    var cx = s.GetActivePointX(mePosView);
    var cy = s.GetActivePointY(mePosView);
    s.PageDown(withSelection);
    if (ScrollY == sy) {
    s.SetActivePoint(mePosView, cx, 1, withSelection);
    } else {
    var dy = sy - ScrollY;
    ScrollY = sy + dy / 2;
    s.SetActivePoint(mePosView, cy, cy + dy / 2, withSelection);
    }
    =================================

     |  ks
  46. Meryの愛用者の一人ですが、要望があります。

    1.「置換」機能に関して
    本をOCRソフトにかけて、txtファイル化する作業をしています。その後の校正中に、例えば、誤認識された「時問」は必ず「時間」に修正するので、「すべて置換」を使いたいのですが、カーソルが最後の対象文字の所に飛んでしまい、校正作業を続けるために後戻りするのが大変です。

    「すべて置換」を選んだ時は、カーソルが作業開始の位置に留まるようにしていただけませんか。

    一太郎だとカーソルが元の場所に留まってくれるので、校正作業の時はついつい一太郎を使ってしまいます。なら一太郎を使えと言われそうですが、一太郎への不満もあります。

    「ヘ」などの文字が、平仮名なのか片仮名なのか視認できない事です。Meryは表示色がカスタマイズできるので、文章を読みやすくするために、カタカナや半角文字の表示色を変えて使っています。だからせっかく校正が済んだ文書を、後でMeryで読み返すと、色の違う場違いの「へ」などが点在しているのに気づき、ドッと疲れます。

    2.お勧めフォント
    「へ」と「ヘ」などを、形で区別しやすいフォントをご存じでしたら、教えて下さい。
    ちなみに今、コメント欄に表示されているこの「へ」だと、かなorカナの区別が難しいでしょ?(笑)

    以上、宜しくお願いします。

     |  快適主義者
  47. ● ks さん

    ご対応ありがとうございます!
    私もマクロを作っていたのですが、スクロールのみでキャレット位置の計算は面倒臭そうだったのでくじけてました…

    ● 快適主義者 さん

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

    > 1.「置換」機能に関して

    置換後の挙動につきましては人それぞれ好みがあると思います。私はもっぱら「秀○」派なので置換後に最終箇所に移動してほしいタイプなもので…。カーソルが動かなかったら置換されたのかどうか不安になってしまいます^^

    これを仕様変更するとなると既存のマクロにも影響が出そうなのでちょっと簡単には対応できそうにありませんが、ご要望としていただいておきますね。

    > 2.お勧めフォント

    「ヘ」が区別しやすいフォントですか。
    Nasu フォントというのが、見た目が似ている文字を判別しやすいフォントということで人気があるようですが、いかがでしょうか?
    http://itouhiro.hatenablog.com/entry/20140917/font

     |  Kuro
  48. ● 快適主義者 さん

    OCR で入り込んだ片仮名と平仮名の「へ」ですが、次のワードを正規表現をオンにして検索してみてはどうでしょう。
    ^ヘ[^ア-ンー]|[^ア-ンー]ヘ[^ア-ンー]|[^ア-ンー]ヘ$|[ア-ンー]へ|へ[ア-ンー]

    前半が「前後に片仮名を含まない片仮名「ヘ」」を探す表現です。
    後半が「前後いずれかに片仮名が存在する平仮名「へ」」を探す表現です。

    問題が多いやり方ですが、少しは便利になるのではないかなーと思います。
    # 前半だと、「ヘ、ヘンタイ!」みたいに独立した片仮名が判別できない
    # 後半はそもそも「前後いずれかに片仮名の単語が来たときの助詞「へ」」がひっかかってしまう
    # どちらも「へ」だけじゃなくて前後の文字もハイライトされてしまうし……もっと良い表現ないかなぁ

     |  ks
  49. ● Kuro さん

    早速のレス、ありがとうございます。
    置換機能に関しては諦めます。
    Nasuフォントの方は、すぐにでも試してみたいと思います。

    ● ks さん

    関連したアドバイスをありがとうございます。すぐにでも試してみたいと思います。

    ベッキーの不倫騒動といい、人間は二股行為(Meryと一太郎の併用なども!?)が必要なんですねえ。(笑)
    お騒がせしました。(^_^;)

     |  快適主義者
  50. 快適主義者さん、こんばんは。

    置換の前後で文字列長が異なるとその分だけズレますけれど、
    こんなマクロで多少はラクになりますかね?

    var FindPattern = prompt( "検索する文字列(正規表現可)", "");
    if(FindPattern == "")Quit();
    var ReplacePattern = prompt( "置換後の文字列", "");

    var txt = Document.Text;
    var sel = Document.Selection;
    var pos = sel.GetActivePos();
    var regex = new RegExp(FindPattern, "ig");

    Document.Text = txt.replace(regex, ReplacePattern);
    sel.SetActivePos(pos);

    編集モードの強調文字列にカタカナの「ヘ」だけ色が付くように設定してはいかがでしょう。

    それでは。

     |  才石
  51. ● 才石 さん

    関連したアドバイスをありがとうございます。試してみたいと思います。マクロの知識が無いので、実行後の結果が、すぐにはイメージできませんが。
    (^_^;)

    それにしても腕に覚えありの方々が、いろいろおられるんですねえ。
    私もマクロを勉強して、すべて置換を実行後に「置換開始の位置に戻りますか? はい・いいえ」というメニューが出現・実行できるようなマクロを仕込めるようになりたいです。

     |  快適主義者
  52. お兄さんが簡単に説明付けちゃろ
    多分やで違うかも試練し盲目的に信用したらあかんで
    var FindPattern = prompt( "検索する文字列(正規表現可)", "");
    ダイアログで入力求めて入力された文字列を変数FindPatternに突っ込む
    if(FindPattern == "")Quit();
    入力が空ならそのまま何もせず終了
    var ReplacePattern = prompt( "置換後の文字列", "");
    ダイアログで入力求めて入力された文字列を変数ReplacePatternに突っ込む
    var txt = Document.Text;
    件の内容全体を変数txtに
    var sel = Document.Selection;
    選択文字列を変数selに
    var pos = sel.GetActivePos();
    その位置を変数posに
    var regex = new RegExp(FindPattern, "ig");
    正規表現regexにFindPatternを(大文字小文字の違いは無視、パターンに合うもの全部対象にする)
    Document.Text = txt.replace(regex, ReplacePattern);
    変数txtの内容を置換してそれを件の内容全体と差し替え
    sel.SetActivePos(pos);
    記憶させておいた選択位置を復元
    希望の動作してるもんだと仮定して、
    この直前に戻るかどうか選ばせれば仕込めるんじゃね

     |  クリ廃止
  53. >Twitter
    >記事書くのがまんどくせー
    とか、おっしゃらずに。次バージョン(と記事)楽しみです。

    写真はいい味出てますよ。
    海とか島の感じは、おだやかな湾とか内海かな、
    瀬戸内海をよく見るのですが、似た印象です
    (いえいえ、地域を特定するつもりはございません (^^; )

     |  通りすがり^2
  54. ● 通りすがり^2 さん

    コメントありがとうございます!
    次バージョンの準備、少しづつ進んでいます… (たぶん)

    写真、特に意味はないのですがフリー素材を使うと著作権表示とかめんどくさそうなので、自分で撮影するぜ!と気合いを入れていましたが、もう完全に飽きてますw 誰か一眼レフでもプレゼントしてくれたらやる気でるんですけどねー。チラ。

     |  Kuro
  55. ● クリ廃止 さん

    詳しい解説をありがとうございます。マクロの流れが見えた気がします。
    要は独自に置換マクロを作って、カーソルを元の場所に戻せばよいと。
    でも不具合が生じる可能性があるので、私は勝手な行動を取らず、後は全体統括者のKuroさんがなんとかして下さるでしょう。

    Kuroさんに紹介していただいたNasuフォントは、慣れるのに時間はかかりそうですが、文字の区別が容易ですね。Unicodeに頼る旧字体漢字も表示でき、使い勝手はいいので、皆さんにもお勧めです。

    来訪者の多いブログですね。Meryの人気ぶりがうかがえます。
    (^_^)v

     |  快適主義者
  56. いつも愛用してまっす。
    ブログの下書きとかでプロポーショナルフォントが使えるエディタをずっと求めていてたどり着いたのがMeryでして。

    64bit対応とか大変そうですが気長に取り組んで頂ければなぁと思います。
    テキストエディタは32bitでも全然問題なさそうなのですが、MSさんが
    次のOSで「もう32bit版出しません」とかアナウンスするかもしれませんですしね。
    んで全世界のデベロッパーさんたちが滝汗で64bit対応する的な・・・
    いあもう皆さんそういう世界を予測して、取り組んでおられるような気もしてますw

     |  アト
  57. ● アト さん

    ご愛用ありがとうございます。
    プロポーショナルフォント対応のエディタも最近は結構増えて来ましたね~。昔は貴重だったのに…

    OS が 64 ビット版だけになってもさすがに 32 ビットアプリが動く仕組みは残すと思いますが、32 ビットアプリが動かなくなってしまうと世界大混乱でしょうねw

    > 64bit対応とか大変そうですが気長に取り組んで頂ければなぁと思います。

    ありがとうございます。
    64 ビット版の開発は一応目処がついているのですが、現バージョンのメンテだけで手いっぱいな感じでなかなか本腰入れて 64 ビット版で遊べないんです…

    気長にお待ちいただければと思いますw

     |  Kuro
  58. また要望書き込もうと思ってたら半ページスクロールのマクロを作ってくださった方が。
    ありがとうございます。後ほど試してみたいと思いますが、マクロってどうすれば?(^^;

    私はakiraのv 2.97という超古いバージョンをずっと愛用しておりまして、
    いろいろカスタマイズしていることもありWin7までは騙し騙し使ってました。
    ですがWin10でIME関係が解決しないので乗り換えを決意し、Meryにたどり着いた次第です。

    ちなみにCapsLockをCtrlと入れ替えており、Ctrlを併用した操作をいろいろ設定しています。
    Meryでもオプションにキー設定があるのでいずれカスタマイズしてみたいです。
    (この設定のエクスポート・インポートってあります?)

    新たな要望

    1)「貼り付け時にカーソル位置を移動しない」設定
    文字通りなのですが、縦方向に貼り付けを連続するときに便利なので
    私は常にONにしています。

    2)ソートとマージ機能
    編集>選択範囲の変換あたりにあるかと思ったのですが。
    サクラエディタでいうところのALT+AとALT+Mです。
    これだけのためにサクラエディタをインストールしています。

    3)行の複製機能
    大抵のエディタですと
    「HOMEで行頭に移動し、SHIFT+下矢印で行選択、CTRL+C、CTRL+Vを2回」
    でしょうか。私のakiraではF2キーでこれが行われます。
    これもマクロで実現可能でしょうけどクリップボードが上書きされますね。

    その他に「単語単位での移動・選択・削除」「行末まで削除」などがコマンドとして
    用意されていればありがたいです。Meryでもマウスでダブルクリックで単語選択、
    トリプルクリックで行選択になるようですが、コマンドにはないですよね?
    あればキー設定できるのですが。

    長々と申し訳ないですがご検討のほどよろしくお願い致します。

     |  hide
  59. っマクロ→カスタマイズ
    1行なら行頭に移動する必要も選択する必要もないね >3
    マクロ使うならわざわざクリップボード使う必要もない
    それこそマクロでいくらでも>行末まで削除
    単語単位は空白が区切りになる言語とは違い日本語の特性上まあ無理だろうね

     |  クリ廃止
  60. ● hide さん、クリ廃止 さん

    コメントありがとうございます。
    マクロの使い方は割と簡単です。Mery のメニューで「マクロ」→「選択」でマクロファイルを選択するだけです。複数のマクロを一括で登録したい場合などは「マクロ」→「カスタマイズ」からできます。

    > 1)「貼り付け時にカーソル位置を移動しない」設定

    マクロだと簡単に実現できると思います。Mery ではこういった特定の人向けの細かい挙動の修正は必要に応じてマクロで行っていただくことで、本体側の機能をシンプルに、初心者でも扱いやすいようなエディタを目指して開発しておりますので、ご理解いただけると幸いです。

    > 2)ソートとマージ機能

    Mery をインストールしたフォルダの中の「Macros」フォルダの中に同梱されているマクロで対応できると思います。ソート機能は「昇順で並べ替え.js」「降順で並べ替え.js」、マージ機能は「連続する重複行を削除.js」ですね。

    Mery の上部メニューから「マクロ」→「カスタマイズ」→「新規作成」をクリックし、Mery の Macros フォルダに含まれている js ファイルをすべて選択して登録しておけば便利かと思います。登録したマクロはショートカットキーに割り当てることも可能です。

    > 3)行の複製機能

    これはマクロでも可能ですが、何も選択していない状態で「CTRL + C」→「CTRL + V」の順に押すと行の複製と同じことができます。(何も選択しない状態で CTRL + C で行コピーなので)

    > 「単語単位での移動・選択・削除」「行末まで削除」

    キーの設定はできませんが、CTRL を押しながら←・→のキーで移動すれば単語単位での移動になります。SHIFT + CTRL + ←・→ で単語単位で選択しながら移動します。これは Windows 標準のメモ帳と同じですね。

    > 「行末まで削除」

    SHIFT + DEL キーで行削除になります。

    このあたりの機能はショートカットキーの割り当てはできません。「これってこれとどう違うの?」みたいな機能が増えてしまうと初心者の方が扱いづらくなってしまうので、なるべく表に出さないように、知ってる人なら使える、みたいな感じで仕込んでます^^

     |  Kuro
  61. 追伸:マージ機能の「連続する重複行を削除.js」は、昇順・降順に並べ替えた後に使用してください。

     |  Kuro
  62. ● hide さん

    元々やりたいこと
    > 文字通りなのですが、縦方向に貼り付けを連続するときに便利なので
    を考えると、素直に連続貼り付けするマクロを使うのはいかがでしょうか。
    ボックス選択(ALTを押しながらドラッグ)で幅 0 で複数行選択した状態で実行すると、その列に連続貼り付けします。
    そうでない場合は普通の貼り付けをするので、Ctrl+V にキー割り当てしても良いと思います。

    # 当然だけど GetTopPointX とか文字数と表示幅が一致しないので、対応したら肥大化した……

    // タブ幅
    var TAB = 4;

    // 文字列の表示幅取得
    String.prototype.width = (function(){
    var reg = /[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\u0000-\u0080\uF8F0\uFF61-\uFF9F\uF8F1-\uF8F3]/g;
    return function(from, tab2space){
    from = from || 0;
    var a = this.split('\t');
    var n = a[0].replace(reg, ' ').length + from;
    for (var i=1, len=a.length; i<len; i++) {
    n += (TAB - n%TAB) + a[i].replace(reg, ' ').length;
    }
    return n - from;
    }
    })();

    var s = Document.Selection;
    var d = ClipboardData.GetData();
    if (d.indexOf("\n") < 0) {
    // ボックス選択判定
    var from = s.GetTopPointY(mePosView);
    var to = s.GetBottomPointY(mePosView);
    if ((to - from) != (s.Text.match(/\n/g) || []).length) {
    // 表示上の x 位置が一致するか確認
    var width = Document.GetLine(from, meGetLineView).substring(0, s.GetTopPointX(mePosView)-1).width();
    if (width == Document.GetLine(to, meGetLineView).substring(0, s.GetBottomPointX(mePosView)-1).width()) {
    // 表示上同じ x 位置に逐次貼り付け
    for (var i=from; i<=to; i++) {
    var t = Document.GetLine(i, meGetLineView);
    var w = 0;
    for (var j=0; j<t.length && w < width; j++) {
    w += t.charAt(j).width();
    }
    s.SetActivePoint(mePosView, j+1, i, false);
    s.Paste();
    }
    Quit();
    }
    }
    }
    s.Paste();

     |  ks
  63. なるほど、マクロはJScript/VBScriptなんですね。
    そしてマクロメニューに追加してALT+Mからの1で呼び出し、みたいな。
    あるいはそのALT+Mからの1をなんらかキー割り当てしていけばよいってことでしょうか。

    「貼り付け時にカーソル位置を移動しない」も、
    「カーソル位置を保存して貼り付けて保存した位置に移動する」
    というマクロを作って登録してそれをCTRL+Vに割り当てればよいってことですね。

    ソートとマージはご指摘の通り同梱マクロでOKです。
    マクロメニューに登録したら1と2と3に登録されました。
    というかF4で直近のマクロが起動するんですね。

    (何も選択しない状態で CTRL + C で行コピーなので)
    これでOKです。ありがとうございます。
    そして何も選択しない状態のCTRL+Xは行カットなんですね。

    CTRLと左右矢印での単語移動は知ってます。
    この移動単位での削除ができればよいのですが、これまたマクロで
    なんとかなりそうですね。(SHIFT+CTRL+→からの削除ってことですね)

    >SHIFT + DEL キーで行削除になります。
    これ、行カットになってません?貼り付けるとその消えた行が出ます。
    (前述の選択無し状態からのCTRL+Xと同じ)

    私の要望は「カーソル位置から行末までの削除」なのですが、
    これまたマクロで、ってことですね。
    (私の現エディタはCTRL+DELに割り当ててるのでそれにします))

     |  hide
  64. >素直に連続貼り付けするマクロ

    これまたありがとうございます。
    それほど頻繁に使うわけではなく、作業の種類によるので
    その場面が来たら試してみたいと思います。

     |  hide
  65. ● hide さん

    > CTRLと左右矢印での単語移動は知ってます。

    失礼しました、なるほど単語単位での削除ですね。
    サ○ラエディタや秀○エディタを見てみたところ標準で搭載されている機能のようなので対応してみようと思います。

    > これ、行カットになってません?貼り付けるとその消えた行が出ます。

    これまた失礼しました。SHIFT + DEL は行切り取りでした。
    なるほど、カーソル位置から行末までの削除ですか。標準で搭載されているエディタもあるようですし、実装してみようかなーと思います。

    ご意見ありがとうございました、参考にさせていただきます。

     |  Kuro
  66. あれから問題も発生することなく、すこぶる順調に利用させて頂いております。

    質問ですが、Meryは開けるファイルの最大サイズ等に制限はあるのでしょうか。

    あるシステムのトラブルで膨れあがったログファイルを見ようと思ったら、読み込んでいる
    ような雰囲気もない状態でエディタが起動しているだけ。となってしまいます。
    (対象のファイルは30Gほど…)

    宜しくお願いします。

     |  tama
  67. ● tama さん

    ご連絡ありがとうございます、順調ということで一安心です^^

    開けるファイルの最大サイズですが、Mery はファイルをすべてメモリに読み込んで編集するタイプのテキストエディタですので、お使いの PC に搭載されているメモリの容量次第です。

    また、32 ビットアプリケーションの制約がありますので、全体で 2GB までしかメモリを使用できないため、実際に開くことができるファイルのサイズはそれ未満となります。(開いているファイルの合計で 1GB ぐらいまでかも。でも実際は巨大なファイルを開くとすごく重くなるので数十メガぐらいが限界かもしれません…)

    30GB ほどの巨大なファイルを扱うためには専用のエディタを使用しないといけないと思いますが、多くのテキストエディタはメモリに読み込むタイプのものなので、数ギガをサクサク編集できるエディタは心当たりがありませんねぇ… 以前は Peggy Pad というのが巨大なファイルの編集に向いていましたが、開発・公開が終わってしまったようで。

     |  Kuro
  68. どうもです。当該ファイルについては、EmEditorで確認しました(^^;
    あちらはその辺りが得意なようで、指定したファイルサイズ分だけとか
    器用にサクサク読み込んでくれます。

    まぁ、高いので開けないと困るんですが(笑

    その辺りの作業はあちらに任せて、通常時はMeryで進めたいと思います。
    返信ありがとうございました。

     |  tama
  69. ● tama さん

    感覚として、強調表示がなければ実ファイルサイズの 3 倍程度、強調があると 5 倍程度のメモリが必要です。
    なので 100MB のファイルなら、単純なテキストで 300MB、ソースなど強調があると 500MB のメモリ消費量といったところでしょうか。
    実用的な最大値は 300MB あたりだと思います。

    ただ適度に行が分割されている必要があり、非常に一行が長いファイルだと数MBでも厳しいです。
    (Word とか Excel の XML を覗くと固まる……)

    巨大なファイルの扱いでは、専用機能を載せている EmEditor が現状最適だと思います。
    (個人的には 100MB ぐらいに分割するスクリプト回して、Mery で見たりしていますが……)

     |  ks
  70. 需要少ないかもしれないけどリッチテキストにも対応してほしいです

     |  優理
  71. ● 優理 さん

    ご意見ありがとうございます。
    申し訳ございません。Mery はワードプロセッサとは異なり純粋なテキストエディタですので、リッチテキストに対応する予定はございません。

     |  Kuro
  72. タブを無効化するのに,「ウィンドウ」→「タブを有効にする」のチェックを外そうとすると「すべてのダイアログを閉じてください。」というメッセージが出ますが,どうすればタブを無効化出来ますか?

     |  ASH_LYNX
  73. ● ASH_LYNX さん

    検索ダイアログなどが表示されている状態で「タブを有効にする」を切り替えるとそのメッセージが表示されます。検索ダイアログなどの他のウィンドウを閉じた状態で「タブを有効にする」を選択してみてください。

     |  Kuro
  74. Meryを「起動直後」にタブを無効化しようとしても再現するのでどうしたものかなぁ…と。

     |  ASH_LYNX
  75. ● ASH_LYNX さん

    何か他の常駐アプリケーションと競合しているのかもしれませんね…

     |  Kuro
  76. ini編集でおkなんだけど
    欧米語に別のフォント使う設定できますか?
    似た文字の区別のしやすさと等幅であること重視で試してみたんだけど
    アクセントとか点の付いた文字が入ってないようで小さい+になってしまう

    最悪2種類取り込んで新たなフォントにする
    という方法はあるとはいえそれはできれば避けたい

     |  クリ廃止
  77. とあるアプリケーションでPrintScreenを制御するため、キーのグローバルフックを利用しているのですが
    Meryがアクティブの場合、グローバルフックでのキーが拾えません(他のAPはそんなことないのですが・・・)
    Meryが内部でグローバルフックしていますか?場合によりCallNextHookExを呼び出さない等していますか?

     |  mikura
  78. ● クリ廃止 さん

    > 欧米語に別のフォント使う設定できますか?

    設定ないです。
    「表示」→「フォント」で最近使ったフォントの履歴が残るので、欧米語でアクセントが表示できないときは必要に応じて切り替えるとかではだめですかね?

    それとも、日本語はこのフォント、英語はこのフォントみたいに個別に設定したいということかな…
    これも設定とかはないのですが、Windows のフォントリンクの機能を使えばある程度は可能ですね。

    そもそも見当違いなこと言ってたらごめんなさい^^;

    ● mikura さん

    > Meryが内部でグローバルフックしていますか?

    してないです。(たぶん

    PrintScreen の制御とのことなので、クリップボード関連で問題が起きているのであれば、Mery の「ツール」→「オプション」→「履歴タブ」から「クリップボード履歴を有効にする」のチェックを外してみると治るかもしれません。

    とあるアプリケーションの名前と、再現条件を教えていただければこちらでも調査してみますので、差し支えなければご協力いただければと思います。

     |  Kuro
  79. >フォントリンク
    等幅同士でも結果として等幅でなくなる罠があったw
    普通にアルファベットベースだとそのためひどくばらばらになる
    逆に日本語フォントをベースにする方法では
    アクセント文字のような不足分だけを補完するので影響が極限定的になる
    それで概ねいけたぽい

     |  クリ廃止