「
コンパクトメニュー
」を編集中
2019年11月21日 (木) 01:56時点における
Sukemaru
(
トーク
|
投稿記録
)
による版
(第6版)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
== 機能 == <br> ;メニューバーの全項目をひとつのポップアップメニューにまとめて表示します。 <br> * [ ファイル(F) / 編集(E) / 検索(S) / 表示(V) / マクロ(M) / ツール(T) / ウィンドウ(W) / ヘルプ(H) ] の各メニュー項目とそれらのサブメニューを再現してあります。 * 「編集モード」 「マクロ」 「プラグイン」 「外部ツール」 「辞書」 「クリップボード履歴」 「タブ一覧」 は、自動で取得します(Mery.ini や Mery.his を読みこむ)。 * ショートカットキーまたはツールバーアイコンからの起動を想定しています。 : ※ このマクロを導入しても、エディタウインドウの「メニューバー」を非表示にすることはできません (Firefox や Thunderbird のアドオン CompactMenu2 の機能を再現するものではありません)。 * ポップアップメニューの表示位置は、ソースコード内の設定項目から変更可能です(デフォルト状態ではマウスポインタの位置に表示)。 : → キャレット位置にメニューを表示するなら <syntaxhighlight lang="javascript" inline>var menuPosMouse = false;</syntaxhighlight> * 標準メニューでは表示されない、ポップアップメニューやキーボードショートカット用のコマンドを表示できます(デフォルト状態では非表示)。 : → ソースコード内の設定項目 <syntaxhighlight lang="javascript" inline>var xMenuEnable = true;</syntaxhighlight> にする : ※ ベータバージョン 2.8.6 までで追加されたものを含めて、すべてのコマンドを表示可(Mery 本体のバージョンに応じた項目の 表示/非表示 を自動化)。 : ※ [ファイル] メニューに '''拡張サブメニュー''' も追加されて、「プロパティ」 「フルパスをコピー」 「親フォルダを開く」 などのコマンドを使用できます。 == 制限事項 == * 多分 Mery ver 2.6.7 以降であれば動作するはずです。 : 「編集モード」 「マクロ」 「プラグイン」 「外部ツール」 の一覧が表示されないときは、それぞれの設定ダイアログを開いて <kbd>OK</kbd> ボタンで閉じると表示されるようになるはず <br>(Mery を初期設定状態のまま使っている場合、それぞれの設定ダイアログを開いて [ OK ] で閉じたことがないと、Mery.ini に書きこまれない)。 * すべてのメニュー項目の '''完全な再現は無理''' です( "エディタの状態" について、マクロからは取得できない部分が多々あるため)。 :* <span style="color:#c00;">項目を <b style="color:#808080;">グレーアウト</b> させる条件の完全な再現は無理</span> :* <span style="color:#c00;">トグル項目などの左につける ✔ '''チェックマーク''' の完全な再現は無理</span> :* <span style="color:#c00;">メニュー右側の '''ショートカットキー''' の表示は無し</span> :: 「編集モード」 「マクロ」 「プラグイン」 「外部ツール」 などのショートカットキーを取得できないので、全部まとめて無視した :* ファイルメニューの '''「最近のファイル」の履歴''' の再現は無理 → <span style="color:#0000c0;">'''「最近閉じたファイル」の履歴''' で代替</span> :* 表示メニュー配下の '''「フォント」の履歴''' の表示は無理 :* ウインドウメニューの「タブ一覧」のアイテムの「'''無題'''-<x>」の連番の再現は無理 :* ツールメニュー >> HTML Tidy >> 「ドキュメントの整形」 が起動しない(ExecuteCommandByID 側の問題?) * 「'''マクロ名'''」の自動取得は困難なので、実体ファイルのファイル名(e.g. HogeHoge.js)で表示します。 * Mery Wiki に収録されている「'''プラグイン名'''」は表示できますが、DLL ファイルをリネームしている場合はファイルのベース名で表示します。 * スペルチェック用の「'''辞書名'''」は、実体ファイル(拡張子 AFF)のファイル名順で表示しますが、本来の表示順のルールが不明のため、辞書の切り替えが正しく機能しないかも。 * 「'''クリップボード履歴'''」は Mery ver 2.8.1 以降であれば 16 件まで表示されるはずです。<br> 2.8.0 以前のバージョンでは最新の 1 件しか表示できません(外部のアプリでテキスト以外のデータを「コピー」しているときは 0 件になる)。 <br> * 任意で項目の配置を変更しても差しつかえありませんが、Add() メソッドの第2引数(ExecuteCommandByID() メソッドに渡す定数)は変更しないで下さい。 == ダウンロード == >> 「[[ファイル:コンパクトメニュー.zip]]」 (アイコン入り) * 2019/11/21: (第6版) : ・メニューラベルのアンパサンド記号を補完 : ・バージョンチェック関数の使用を中止 : ・拡張メニューの ID を変更 ( 100 ~ ) * 2019/11/01:(修正第5版) : ・バージョンチェックによるグレーアウト処理を非表示化に変更 : ・項目のグレーアウト条件を精査 * 2019/10/30:(修正第4版) : ・拡張メニューを追加 : ・バージョンチェックによるグレーアウト処理を追加 : ・関数のエラーを修正 * 2019/10/29:(修正第3版) : 「クリップボード履歴」の取得はベータ版 2.8.1 以降でないとエラーになるので回避処理を追加 == ソースコード == <source lang="javascript" style="height:80em; overflow:auto;" highlight="14-15,20-21"> #title = "コンパクトメニュー2" #tooltip = "メニューバーの全アイテムを階層化表示" #icon = "menu+.ico" /** * --------------------------------------------------------- * コンパクトメニュー2 * sukemaru, 2019/10/25 - 2019/11/21 * --------------------------------------------------------- */ // ---------- ▼ 設定項目 ▼ ---------- // // ■ ポップアップメニューを表示する位置 var menuPosMouse = true; // true: マウス位置 / false: キャレット位置 // ■ クリップボード履歴で表示する文字数の目安 var menuWidth = 60; // ■ 拡張メニューを表示する (ファイルメニューの拡張と、非表示機能の可視化) var xMenuEnable = false; // true: 表示する / false: 表示しない // ---------- ▲ 設定項目 ▲ ---------- // // 【準備】 var start = new Date(); var d = editor.ActiveDocument, s = d.selection; var Fso = new ActiveXObject( "Scripting.FileSystemObject" ); var WshShell = new ActiveXObject( "WScript.Shell" ); // Mery フォルダとデータフォルダなど var meryPath = editor.FullName; var mery = Fso.GetBaseName( meryPath ); var meryDir = Fso.GetParentFolderName( meryPath ) + "\\"; var iniPath = meryDir + mery + ".ini"; var hisPath = meryDir + mery + ".his"; var dicsDir = meryDir + "Dicts\\"; var profileDir = meryDir; if ( ! Fso.FileExists( iniPath ) ) { profileDir = WshShell.SpecialFolders( "APPDATA" ) + "\\Mery\\"; iniPath = profileDir + mery + ".ini"; hisPath = profileDir + mery + ".his"; } var meryVer = + ( editor.Version.replace( /[0-9]+/g , function( digit ) { return digit.length < 2 ? "0" + digit : digit } ).replace( /\./g, "" ).slice( 0, 6 ) ); // Mery.ini から各種データを取得 // 戻り値は [ iniOptionArray, modeArray, macroArray, pluginArray, toolArray ]; var iniKey = [ "MaxRecentFile", "Untitled", "MacrosRunAction" , "AutoSaveFolder", "BackupFolder" ] ; var iniItem = GetIniOptionCM( iniKey, iniPath ); // 「最後に閉じたファイル」の準備 // 表示数は「オプション」の「最近のファイルの表示数」の設定値を利用する var maxRecentFile = Number( iniItem[0][0] ); var recentFiles = GetClosedFiles( maxRecentFile, hisPath ); var rfCount = recentFiles.length; var rfWidth = ( "" + rfCount ).length || 1; // 「編集モード」 「マクロ」 「プラグイン」 「外部ツール」 の準備 var dMode = d.Mode; var modeArray = iniItem[1]; var mdCount = modeArray.length; var macroArray = iniItem[2]; var mcCount = macroArray.length; var mcWidth = ( "" + mcCount ).length; var pluginArray = iniItem[3]; var plCount = pluginArray.length; var plWidth = ( "" + plCount ).length; var toolArray = iniItem[4]; var tlCount = toolArray.length; var tlWidth = ( "" + tlCount ).length; // 「クリップボード履歴」の準備 var cb = ClipboardData; var cbData = cb.GetData(); var cbArray = []; if ( meryVer >= 20801 ) { cbArray = GetClipboardData( cb ); } var cbCount = cbArray.length; var cbWidth = ( "" + cbCount ).length; var cbClearStr = "クリップボードのすべての履歴を削除しますか? "; // 「辞書」の準備 var dicsArray = GetDics( dicsDir ); var dcCount = dicsArray.length; var dcWidth = ( "" + dcCount ).length; // 「タブ一覧」の準備 var docus = editor.Documents; var dsCount = docus.Count; var dsWidth = ( "" + dsCount ).length; var untitled = iniItem[0][1] || "無題"; // 拡張メニューの準備 if ( xMenuEnable ) { var fullPath = Fso.FileExists( d.FullName ) ? d.FullName : ""; var fileName = fullPath ? d.Name : ""; var folderPath = fullPath ? d.Path : ""; var macroDir = meryDir + "macros\\"; var autoSaveDir = iniItem[0][3] || ""; var backupDir = iniItem[0][4] || ""; var desktoptDir = WshShell.SpecialFolders( "Desktop" ); var documentsDir = WshShell.SpecialFolders( "MyDocuments" ); var currentDir = WshShell.CurrentDirectory; var portableMode = ( profileDir == meryDir ); } // オプションフラグ var unnamed = d.FullName ? 0 : meMenuGrayed; // 無題タブ var saved = d.Saved ? meMenuGrayed : 0; // 保存済み var blank = d.Text ? 0 : meMenuGrayed; // 白紙の文書 var empty = s.IsEmpty ? meMenuGrayed : 0; // 選択範囲なし var readOnly = d.ReadOnly ? meMenuGrayed : 0; // 書き換え禁止 var multi = ( Editors.Count == 1 ) ? meMenuGrayed : 0; // 複数ウインドウ var sqlDll = Fso.FileExists( meryDir + "sqlfmt.dll" ); // SQL 整形 var eol = ( meryVer >= 20610 ) ? d.LineEnding : undefined; // 改行モード var dEnc = d.Encoding; // エンコード var utf8 = ( dEnc == 65001 || dEnc == 650011 || dEnc == 650010 ) ? meMenuChecked : 0; var utf16le = ( dEnc == 65537 || dEnc == 655371 || dEnc == 655370 ) ? meMenuChecked : 0; var utf16be = ( dEnc == 65538 || dEnc == 655381 || dEnc == 655380 ) ? meMenuChecked : 0; var v20609 = ( meryVer >= 20609 ); if ( xMenuEnable ) { var autoSave = ( autoSaveDir && Fso.FolderExists( autoSaveDir ) ) ? 0 : meMenuGrayed; var backup = ( backupDir && Fso.FolderExists( backupDir ) ) ? 0 : meMenuGrayed; var reg = /^\.(?:js|pls?|php|pys?|rbs?|vbs)$/i; var ext = fileName.substring( fileName.lastIndexOf( "\." ) ); var isScript = reg.test( ext ) ? 0 : meMenuGrayed; var runFlags = ( blank || unnamed || isScript ); } // 【ポップアップメニュー項目】 var menu = CreatePopupMenu(); var id, num, label; // 「ファイル」メニュー /* 「最近開いたファイル」の替わりに「最後に閉じたファイル」を表示 */ menu.AddPopup( "ファイル(&F)", fMenu = CreatePopupMenu() ); /* 拡張メニュー */ if ( xMenuEnable ) { var xMenu = XMenu( fullPath, mery, portableMode, v20609, autoSave, backup ); fMenu.AddPopup( "拡張メニュー(&X)**", xMenu ); // ** fMenu.Add( "-----", 0, meMenuSeparator ); // ** } fMenu.Add( "新規作成(&N)", 2061 ); fMenu.Add( "開く(&O)...", 2062 ); fMenu.Add( "閉じて開く(&D)...", 2063 ); fMenu.Add( "上書き保存(&S)", 2064, unnamed || saved ); fMenu.Add( "名前を付けて保存(&A)...", 2065 ); fMenu.Add( "すべて保存(&L)", 2066 ); fMenu.Add( "-----", 0, meMenuSeparator ); if ( v20609 ) { /* 「自動保存」ON/OFF の ✔ チェックマーク表示は不可 */ fMenu.Add( "自動保存(&U)", 2240 ); } fMenu.Add( "-----", 0, meMenuSeparator ); fMenu.Add( "挿入(&I)...", 2067 ); if ( unnamed ) { fMenu.Add( "読みなおし(&R)", 0, meMenuGrayed ); } else { fMenu.AddPopup( "読みなおし(&R)", rlMenu = CreatePopupMenu() ); rlMenu.Add( "自動選択(&A)", 2068 ); rlMenu.Add( "-----", 0, meMenuSeparator ); rlMenu.Add( "&UTF-16LE", 2069, utf16le ); rlMenu.Add( "UTF-1&6BE", 2070, utf16be ); rlMenu.Add( "UTF-&8", 2071, utf8 ); rlMenu.Add( "UTF-&7", 2072, ( dEnc == 65000 ) *1 ); rlMenu.Add( "-----", 0, meMenuSeparator ); rlMenu.Add( "アラビア語", 2073, ( dEnc == 1256 ) *1 ); rlMenu.Add( "バルト言語", 2074, ( dEnc == 1257 ) *1 ); rlMenu.Add( "中央ヨーロッパ言語", 2075, ( dEnc == 1250 ) *1 ); rlMenu.Add( "簡体中国語 (GB2312)", 2076, ( dEnc == 936 ) *1 ); rlMenu.Add( "繁体中国語 (Big5)", 2077, ( dEnc == 950 ) *1 ); rlMenu.Add( "キリル言語", 2078, ( dEnc == 1251 ) *1 ); rlMenu.Add( "ギリシャ語", 2079, ( dEnc == 1253 ) *1 ); rlMenu.Add( "ヘブライ語", 2080, ( dEnc == 1255 ) *1 ); rlMenu.Add( "日本語 (&EUC)", 2081, ( dEnc == 51932 ) *1 ); rlMenu.Add( "日本語 (&JIS)", 2082, ( dEnc == 50222 ) *1 ); rlMenu.Add( "日本語 (シフト JI&S)", 2083, ( dEnc == 932 ) *1 ); rlMenu.Add( "韓国語", 2084, ( dEnc == 949 ) *1 ); rlMenu.Add( "タイ語", 2085, ( dEnc == 874 ) *1 ); rlMenu.Add( "トルコ語", 2086, ( dEnc == 1254 ) *1 ); rlMenu.Add( "ベトナム語", 2087, ( dEnc == 1258 ) *1 ); rlMenu.Add( "西ヨーロッパ言語", 2088, ( dEnc == 1252 ) *1 ); } fMenu.AddPopup( "改行コード(&G)", leMenu = CreatePopupMenu() ); leMenu.Add( "CR+LF (&Windows)", 2089, ( eol === 0 ) *1 ); leMenu.Add( "CR (&Macintosh)", 2090, ( eol === 1 ) *1 ); leMenu.Add( "LF (&UNIX)", 2091, ( eol === 2 ) *1 ); fMenu.Add( "-----", 0, meMenuSeparator ); fMenu.Add( "印刷(&P)...", 2092 ); fMenu.Add( "印刷プレビュー(&W)...", 2093 ); fMenu.Add( "-----", 0, meMenuSeparator ); /* 最後に閉じたファイルを列挙 */ if ( maxRecentFile > 0 && rfCount ) { for ( var i = 0; i < rfCount; i ++ ) { id = i + 200; num = ( " " + ( i + 1 ) ).slice( - rfWidth ).replace( /\d$/, "&$&: " ); label = recentFiles[i].replace( /&/g, "&&" ); fMenu.Add( num + label, id ); } fMenu.Add( "-----", 0, meMenuSeparator ); } fMenu.Add( "保存して閉じる(&E)", 2094 ); fMenu.Add( "閉じる(&C)", 2095 ); fMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable && meryVer >= 20705 ) { fMenu.Add( "他のタブをすべて閉じる(&Z)*", 2249 ); // fMenu.Add( "左のタブをすべて閉じる(&H)*", 2250 ); // fMenu.Add( "右のタブをすべて閉じる(&M)*", 2251 ); // fMenu.Add( "-----", 0, meMenuSeparator ); // } fMenu.Add( "すべて保存して閉じる(&V)", 2096 ); fMenu.Add( "すべて閉じる(&X)", 2097 ); // 「編集」メニュー menu.AddPopup( "編集(&E)", eMenu = CreatePopupMenu() ); eMenu.Add( "元に戻す(&U)", 2098, readOnly ); eMenu.Add( "やり直し(&R)", 2099, readOnly ); eMenu.Add( "-----", 0, meMenuSeparator ); eMenu.Add( "切り取り(&T)", 2100, readOnly ); eMenu.Add( "コピー(&C)", 2101 ); eMenu.Add( "貼り付け(&P)", 2103, readOnly ); eMenu.Add( "引用つきコピー(&Q)", 2102 ); if ( xMenuEnable ) { eMenu.Add( "引用つき貼り付け(&W)*", 2200, readOnly ); // } eMenu.Add( "削除(&L)", 2104, readOnly ); eMenu.Add( "-----", 0, meMenuSeparator ); eMenu.Add( "すべて選択(&A)", 2105 ); eMenu.Add( "日付と時刻(&D)", 2106, readOnly ); eMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable ) { eMenu.Add( "リンクをコピー(&H)*", 2201 ); // eMenu.Add( "リンクを開く(&O)*", 2202 ); // eMenu.Add( "-----*", 0, meMenuSeparator ); // } eMenu.Add( "行へ移動(&G)...", 2107 ); if ( xMenuEnable ) { eMenu.Add( "ファイルへ移動(&F)*", 2108 ); // eMenu.Add( "-----*", 0, meMenuSeparator ); // if ( v20609 ) { eMenu.Add( "最後に編集した位置へ移動(&L)*", 2241 ); // } if ( meryVer >= 20612 ) { eMenu.Add( "次の変更行(&N)*", 2243 ); // eMenu.Add( "前の変更行(&M)*", 2244 ); // eMenu.Add( "-----*", 0, meMenuSeparator ); // } eMenu.Add( "挿入/上書の切り替え(&I)*", 2125 ); // } eMenu.Add( "書き換え禁止(&Y)", 2109, readOnly /2 ); eMenu.Add( "-----", 0, meMenuSeparator ); eMenu.AddPopup( "選択範囲の変換(&S)", cvMenu = CreatePopupMenu() ); cvMenu.Add( "改行を挿入(&R)", 2110, empty || readOnly ); cvMenu.Add( "改行を削除(&E)", 2111, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "行の分割(&S)", 2112, empty || readOnly ); cvMenu.Add( "行の統合(&J)", 2113, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable ) { cvMenu.Add( "行切り取り*", 2217, readOnly ); // cvMenu.Add( "行コピー*", 2218 ); // cvMenu.Add( "行削除*", 2219, readOnly ); // cvMenu.Add( "行右削除*", 2220, readOnly ); // cvMenu.Add( "行左削除*", 2221, readOnly ); // cvMenu.Add( "-----", 0, meMenuSeparator ); // cvMenu.Add( "単語の削除*", 2222, readOnly ); // cvMenu.Add( "単語の右削除*", 2223, readOnly ); // cvMenu.Add( "単語の左削除*", 2224, readOnly ); // cvMenu.Add( "-----", 0, meMenuSeparator ); // } cvMenu.Add( "大文字に変換(&U)", 2114, empty || readOnly ); cvMenu.Add( "小文字に変換(&L)", 2115, empty || readOnly ); cvMenu.Add( "単語の最初の文字を大文字に変換(&A)", 2116, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "半角に変換(&H)", 2117, empty || readOnly ); cvMenu.Add( "全角に変換(&F)", 2118, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "空白をタブに変換(&T)", 2119, empty || readOnly ); cvMenu.Add( "タブを空白に変換(&N)", 2120, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "インデント(&I)", 2121, empty || readOnly ); cvMenu.Add( "逆インデント(&D)", 2122, empty || readOnly ); cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "再変換(&V)", 2123, empty || readOnly ); if ( meryVer >= 20613 ) { cvMenu.Add( "文字コードの切り替え(&O)", 2245, blank || readOnly ); } cvMenu.Add( "-----", 0, meMenuSeparator ); cvMenu.Add( "Base64 デコード(&B)...", 2124, empty ); cvMenu.Add( "Base64 エンコード(&C)...", 2239 ); eMenu.AddPopup( "ブックマーク(&B)", bmMenu = CreatePopupMenu() ); bmMenu.Add( "ブックマークを設定/解除(&T)", 2126 ); bmMenu.Add( "次のブックマーク(&N)", 2127 ); bmMenu.Add( "前のブックマーク(&P)", 2128 ); bmMenu.Add( "-----", 0, meMenuSeparator ); bmMenu.Add( "ブックマークをクリア(&C)", 2129 ); eMenu.AddPopup( "スペルチェック(&E)", scMenu = CreatePopupMenu() ); /* スペルチェック配下の ✔ チェックマーク表示はすべて無理 */ scMenu.Add( "スペルチェック(&C)", 2130 ); scMenu.AddPopup( "スペルチェックを行う場所(&I)", spMenu = CreatePopupMenu() ); /* 「場所」のアイテムのグレーアウトは無理 */ spMenu.Add( "すべて(&A)", 2207 ); spMenu.Add( "-----", 0, meMenuSeparator ); spMenu.Add( "1重引用符で囲まれた文字列(&S)", 2208 ); spMenu.Add( "2重引用符で囲まれた文字列(&D)", 2209 ); spMenu.Add( "コメント(&C)", 2210 ); spMenu.Add( "スクリプト(&R)", 2211 ); spMenu.Add( "タグ(&T)", 2212 ); spMenu.Add( "強調文字列(&H)", 2213 ); spMenu.Add( "ハイパーリンク(&Y)", 2214 ); spMenu.Add( "その他(&E)", 2215 ); scMenu.AddPopup( "辞書(&D)", dicMenu = CreatePopupMenu() ); /* 辞書一覧を列挙 */ for ( var i = 0; i < dcCount; i ++ ) { id = i + 4096; label = /([^\\]+)\.aff$/i.exec( dicsArray[i] )[1]; num = ( " " + ( i + 1 ) ).slice( - dcWidth ).replace( /\d$/, "&$&: " ); dicMenu.Add( num + label, id ); } scMenu.Add( "-----", 0, meMenuSeparator ); scMenu.Add( "次のスペルミス(&N)", 2131 ); scMenu.Add( "前のスペルミス(&P)", 2132 ); // 「検索」メニュー menu.AddPopup( "検索(&S)", sMenu = CreatePopupMenu() ); sMenu.Add( "検索(&F)...", 2133 ); sMenu.Add( "次を検索(&N)", 2134 ); sMenu.Add( "前を検索(&P)", 2135 ); sMenu.Add( "次の文字列を検索(&X)", 2136 ); sMenu.Add( "前の文字列を検索(&V)", 2137 ); sMenu.Add( "-----", 0, meMenuSeparator ); sMenu.Add( "置換(&R)...", 2138, readOnly ); sMenu.Add( "-----", 0, meMenuSeparator ); sMenu.Add( "検索文字列の強調を解除(&E)", 2139 ); sMenu.Add( "-----", 0, meMenuSeparator ); sMenu.Add( "ファイルから検索(&I)...", 2140 ); sMenu.Add( "ファイルから置換(&L)...", 2141 ); sMenu.Add( "-----", 0, meMenuSeparator ); sMenu.Add( "Google 検索(&G)", 2142, empty ); sMenu.Add( "Wikipedia 検索(&W)", 2143, empty ); // 「表示」メニュー /* トグル項目の ✔ チェックマーク表示は無理 */ menu.AddPopup( "表示(&V)", vMenu = CreatePopupMenu() ); vMenu.AddPopup( "編集モード(&M)", mdMenu = CreatePopupMenu() ); mdMenu.Add( "現在の編集モードのプロパティ(&P)...**", 19 ); // ** mdMenu.Add( "-----**", 0, meMenuSeparator ); // ** /* 編集モード一覧を列挙 Add() の第2引数 id は 5120 からの連番 */ for ( var i = 0; i < mdCount; i ++ ) { id = i + 5120; label = modeArray[i]; mdMenu.Add( "&" + label, id, ( dMode == label ) *1 ) } mdMenu.Add( "-----", 0, meMenuSeparator ); mdMenu.Add( "編集モードの設定(&C)...", 2144 ); vMenu.Add( "-----", 0, meMenuSeparator ); vMenu.Add( "折り返さない(&N)", 2146 ); vMenu.Add( "指定文字数で折り返し(&C)", 2147 ); vMenu.Add( "ウインドウの右端で折り返し(&W)", 2148 ); vMenu.Add( "-----", 0, meMenuSeparator ); vMenu.Add( "縦書き(&V)", 2238 ); vMenu.Add( "色の反転(&I)", 2145 ); vMenu.Add( "-----", 0, meMenuSeparator ); vMenu.Add( "行番号(&L)", 2149 ); vMenu.Add( "ルーラ(&R)", 2150 ); vMenu.AddPopup( "記号(&A)", sgMenu = CreatePopupMenu() ); sgMenu.Add( "改行(&L)", 2151 ); sgMenu.Add( "折り返し(&R)", 2152 ); sgMenu.Add( "EOF(&E)", 2153 ); sgMenu.Add( "タブ(&T)", 2154 ); sgMenu.Add( "半角空白(&S)", 2155 ); sgMenu.Add( "全角空白(&W)", 2156 ); sgMenu.Add( "CR と LF を区別して表示(&D)", 2157 ); if ( v20609 ) { sgMenu.Add( "変更行を強調表示(&H)", 2242 ); } vMenu.Add( "-----", 0, meMenuSeparator ); vMenu.AddPopup( "ツールバー(&T)", tbMenu = CreatePopupMenu() ); tbMenu.Add( "標準ツールバー(&S)", 2158 ); tbMenu.Add( "マクロバー(&M)", 2159 ); tbMenu.Add( "マーカーバー(&K)", 2227 ); tbMenu.Add( "プラグインバー(&P)", 2160 ); tbMenu.Add( "外部ツールバー(&E)", 2161 ); tbMenu.Add( "-----", 0, meMenuSeparator ); tbMenu.Add( "ツールバーのタイトル(&O)", 2162 ); tbMenu.Add( "ツールバーを固定する(&L)", 2163 ); if ( meryVer >= 20800 ) { tbMenu.Add( "マクロバーのラベルを表示(&B)", 2252 ); } tbMenu.Add( "-----", 0, meMenuSeparator ); tbMenu.Add( "小アイコン(&A)", 2228 ); tbMenu.Add( "中アイコン(&D)", 2229 ); tbMenu.Add( "大アイコン(&R)", 2230 ); tbMenu.Add( "特大アイコン(&X)", 2231 ); tbMenu.Add( "-----", 0, meMenuSeparator ); tbMenu.Add( "カスタマイズ(&C)...", 2164 ); vMenu.Add( "ステータスバー(&S)", 2165 ); vMenu.Add( "アウトプット(&O)", 2166, OutputBar.Visible *1 ); vMenu.Add( "全画面表示(&U)", 2203 ); if ( meryVer >= 20615 ) { vMenu.Add( "Zen モード(&Z)", 2246 ); vMenu.Add( "タイプライタースクロール(&Y)", 2247 ); } vMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable && meryVer >= 20700 ) { vMenu.Add( "スクロールバーのマーカー表示(&B)*", 2248 ); // vMenu.Add( "-----", 0, meMenuSeparator ); // } vMenu.AddPopup( "マーカー(&K)", mkMenu = CreatePopupMenu() ); mkMenu.Add( "マーカーに追加/削除(&A)", 2232 ); mkMenu.Add( "-----", 0, meMenuSeparator ); mkMenu.Add( "すべて有効(&E)", 2233 ); mkMenu.Add( "すべて無効(&D)", 2234 ); mkMenu.Add( "-----", 0, meMenuSeparator ); mkMenu.Add( "すべて削除(&L)", 2235 ); mkMenu.Add( "-----", 0, meMenuSeparator ); mkMenu.Add( "自動マーカー(&T)", 2236 ); mkMenu.Add( "-----", 0, meMenuSeparator ); mkMenu.Add( "マーカーの設定(&C)...", 2237 ); vMenu.Add( "-----", 0, meMenuSeparator ); vMenu.AddPopup( "フォント(&F)", ftMenu = CreatePopupMenu() ); /* フォントの履歴の取得は無理 */ ftMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable ) { ftMenu.Add( "大きいフォントサイズ(&L)*", 2167 ); // ftMenu.Add( "小さいフォントサイズ(&S)*", 2168 ); // ftMenu.Add( "フォントサイズをリセット(&R)*", 2205 ); // ftMenu.Add( "現在のフォントサイズを規定に設定(&D)*", 2206 ); // ftMenu.Add( "-----*", 0, meMenuSeparator ); // } ftMenu.Add( "フォントの設定(&C)...", 2169 ); // 「マクロ」メニュー /* 記録/停止(S) による一時マクロがらみの項目の 表示/非表示 の切り替えは無理。 */ menu.AddPopup( "マクロ(&M)", mMenu = CreatePopupMenu() ); mMenu.Add( "記録/停止(&S)", 2170 ); mMenu.Add( "実行(&R) " + ScriptName.replace( /&/g, "&&" ), 2171 ); if ( xMenuEnable ) { mMenu.Add( "一時オプションを設定してマクロ実行(&O)...*", 2204 ); // } mMenu.Add( "-----", 0, meMenuSeparator ); mMenu.Add( "名前を付けて保存(&A)...", 2172 ); mMenu.Add( "編集(&E) " + ScriptName.replace( /&/g, "&&" ), 2173 ); mMenu.Add( "選択(&L)...", 2174 ); mMenu.Add( "これを選択(&T)", 2175, blank || unnamed ); if ( xMenuEnable && fullPath != ScriptFullName && iniItem[0][2] == "F4" ) { mMenu.Add( "このマクロを実行(&G)** " + fileName, 20, runFlags ); // ** } mMenu.Add( "カスタマイズ(&C)...", 2176 ); mMenu.Add( "-----", 0, meMenuSeparator ); /* マクロのファイル名一覧を列挙 ※ 非表示マクロをサブメニュー化 */ if ( xMenuEnable ) { mMenu.AddPopup( "非表示マクロ(&H)**", smMenu = CreatePopupMenu() ); // ** mMenu.Add( "-----", 0, meMenuSeparator ); // ** } for ( var i = 0, j = 1, k = 1; i < mcCount; i ++ ) { id = i + 6144; label = /([^\\]+)[01]$/.exec( macroArray[i] )[1].replace( /&/g, "&&" ); if ( macroArray[i].slice( -1 ) == "1" ) { num = ( " " + ( j ++ ) ).slice( - mcWidth ).replace( /\d$/, "&$&: " ); mMenu.Add( num + label, id ); } else if ( xMenuEnable ) { num = ( " " + ( k ++ ) ).slice( - mcWidth ).replace( /\d$/, "&$&: " ); smMenu.Add( num + label, id ); } } // 「ツール」メニュー menu.AddPopup( "ツール(&T)", tMenu = CreatePopupMenu() ); tMenu.Add( "オプション(&O)...", 2177 ); tMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable ) { tMenu.Add( "単語補完(&A)*", 2178 ); // tMenu.Add( "-----", 0, meMenuSeparator ); // } if ( readOnly ) { tMenu.Add( "HTML Tidy(&H)", 0, readOnly ); } else { tMenu.AddPopup( "HTML Tidy(&H)", htMenu = CreatePopupMenu() ); htMenu.Add( "ドキュメントの整形(&C)", 2180 ); htMenu.Add( "ドキュメントのエラーをチェック(&F)", 2225 ); } if ( sqlDll ) { tMenu.Add( "SQL 整形(&S)", 2179, empty || readOnly ); } tMenu.Add( "-----", 0, meMenuSeparator ); /* クリップボード履歴を列挙 */ tMenu.AddPopup( "クリップボード履歴(&C)", cbMenu = CreatePopupMenu() ); if ( cbCount ) { for ( var i = 0; i < cbCount; i ++ ) { id = i + 1; label = MenuKey( cbArray[i], id, cbWidth, menuWidth ); cbMenu.Add( label, id, readOnly ); } cbMenu.Add( "", 0, meMenuSeparator ); cbMenu.Add( "すべての履歴を削除する(&E)**", 18 ); // ** } else if ( cbData.length ) { cbMenu.Add( MenuKey( cbData, 1, 1, menuWidth ), 17, readOnly ); // ** } else { cbMenu.Add( "※ クリップボードにテキストデータはありません ※" , 0, meMenuGrayed ); // ** } tMenu.Add( "-----", 0, meMenuSeparator ); tMenu.AddPopup( "プラグイン(&I)", plMenu = CreatePopupMenu() ); /* プラグイン名一覧を列挙 有効/無効の ✔ チェックマーク表示は無理 */ for ( var i = 0; i < plCount; i ++ ) { id = i + 7168; label = GetPluginName( pluginArray[i] ).replace( /&/g, "&&" ); num = ( " " + ( i + 1 ) ).slice( - plWidth ).replace( /\d$/, "&$&: " ); plMenu.Add( num + label, id ); } plMenu.Add( "-----", 0, meMenuSeparator ); plMenu.Add( "プラグインの設定(&C)...", 2181 ); tMenu.AddPopup( "外部ツール(&E)", etMenu = CreatePopupMenu() ); /* 外部ツール名一覧を列挙 */ for ( var i = 0; i < tlCount; i ++ ) { id = i + 8192; label = toolArray[i].replace( /&/g, "&&" ); num = ( " " + ( i + 1 ) ).slice( - tlWidth ).replace( /\d$/, "&$&: " ); etMenu.Add( num + label, id ); } etMenu.Add( "-----", 0, meMenuSeparator ); etMenu.Add( "外部ツールの設定(&C)...", 2182 ); etMenu.Add( "-----", 0, meMenuSeparator ); etMenu.Add( "ツールジョブの中止(&J)", 2183 ); tMenu.Add( "-----", 0, meMenuSeparator ); tMenu.Add( "ポップアップメニューの設定(&P)...", 2184 ); // 「ウインドウ」メニュー /* トグル項目の ✔ チェックマーク表示は無理 */ menu.AddPopup( "ウインドウ(&W)", wMenu = CreatePopupMenu() ); wMenu.Add( "常に最上位(&A)", 2185 ); wMenu.Add( "-----", 0, meMenuSeparator ); wMenu.Add( "上下に分割(&S)", 2186 ); wMenu.Add( "左右に分割(&L)", 2226 ); wMenu.Add( "-----", 0, meMenuSeparator ); if ( xMenuEnable ) { wMenu.Add( "次のペイン*", 2187 ); // wMenu.Add( "前のペイン*", 2188 ); // wMenu.Add( "アクティブなペイン*", 2189, ( d == document ) *3 ); // wMenu.Add( "-----*", 0, meMenuSeparator ); // } wMenu.Add( "タブを有効にする(&T)", 2190, editor.EnableTab *1 ); wMenu.Add( "-----", 0, meMenuSeparator ); wMenu.Add( "重ねて表示(&C)", 2191, multi ); wMenu.Add( "上下に並べて表示(&H)", 2192, multi ); wMenu.Add( "左右に並べて表示(&V)", 2193, multi ); wMenu.Add( "すべて最小化(&M)", 2194 ); wMenu.Add( "-----", 0, meMenuSeparator ); wMenu.Add( "次の文書(&N)", 2195 ); wMenu.Add( "前の文書(&P)", 2196 ); wMenu.Add( "-----", 0, meMenuSeparator ); /* タブ一覧を列挙 */ for ( var i = 0, docu; i < dsCount; i ++ ) { id = i + 300; docu = docus.Item( i ); num = ( " " + ( i + 1 ) ).slice( - dsWidth ).replace( /\d$/, "&$&: " ); label = docu.FullName || untitled; wMenu.Add( num + label, id, ( docu == d ) *1 ); } // 「ヘルプ」メニュー menu.AddPopup( "ヘルプ(&H)", hMenu = CreatePopupMenu() ); hMenu.Add( "オンラインヘルプ(&O)...", 2197 ); hMenu.Add( "キーボードマップ(&K)...", 2198 ); hMenu.Add( "-----", 0, meMenuSeparator ); hMenu.Add( "バージョン情報(&A)...", 2199 ); // 【ポップアップメニューを表示】 Status = " 「コンパクトメニュー」 マクロ" + ( xMenuEnable ? " 【 ** メニュー拡張 ** 】" : "" ); var r = menu.Track( menuPosMouse ); // 【コマンドを実行】 Status = " " + menu.GetText( r ).replace( /^ *\d*&\d: |^&| ?\(&.\)|\*+/g, "" ); if ( r == 0 ) { ; } // クリップボード履歴の文字列を貼り付け else if ( r <= 16 ) { d.Write( cbArray[ r -1 ] ); } else if ( r == 17 ) { d.Write( cbData ); } // クリップボード履歴をすべて削除する ** else if ( r == 18 && Confirm( cbClearStr ) ) { for ( var i = 0; i < cbCount; i ++ ) { cb.ClearData( i ); } Status = " クリップボード履歴からすべてのアイテムを削除しました。"; } // 現在の編集モードのプロパティ ** else if ( r == 19 ) { Status = " \"" + dMode + "\" のプロパティ"; WshShell.SendKeys( "%P" ); editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 ); } // このマクロを実行 ** (※ F4 キー限定) else if ( r == 20 ) { Status = " \"" + fileName + "\" を実行します。"; editor.ExecuteCommandByID( MEID_MACROS_SELECT_THIS = 2175 ); // これを選択 // editor.ExecuteCommandByID( MEID_MACROS_RUN = 2171 ); // マクロの実行 WshShell.SendKeys( "{" + iniItem[0][2] + "}" ); // マクロの実行 } // 拡張メニュー項目 ** else if ( r >= 100 && r < 200 ) { switch ( r ) { case 100: // ファイルのプロパティを開く Status = " \"" + fullPath + "\" のプロパティ"; var ShellApp = new ActiveXObject( "Shell.Application" ); ShellApp.NameSpace( folderPath.replace( /\\+$/g, "" ) ) .ParseName( fileName ) .InvokeVerb( "プロパティ(&R)" ); break; case 101: case 102: case 103: case 104: // パスをコピー var data = ( r == 101 ) ? fileName // ファイル名をコピー : ( r == 102 ) ? fullPath // フルパスをコピー : ( r == 103 ) ? folderPath // 親フォルダのパスをコピー :/* r == 104 */ meryPath; // Mery のフルパスをコピー cb.SetData( data.replace( /\\+$/, "" ) ); Status = " " + cb.GetData(); break; case 105: case 106: case 107: // フォルダを開く var path = ( r == 105 ) ? fullPath // 親フォルダ : ( r == 106 ) ? meryPath // Mery フォルダ :/* r == 107 */ iniPath; // ユーザーフォルダ Status = " " + path; WshShell.Run( "explorer /select,\"" + path + "\"" ); break; case 108: case 109: case 110: case 111: case 112: case 113: var folder = ( r == 108 ) ? macroDir // Macros フォルダ : ( r == 109 ) ? autoSaveDir // 自動保存フォルダ : ( r == 110 ) ? backupDir // バックアップフォルダ : ( r == 111 ) ? desktoptDir // デスクトップフォルダ : ( r == 112 ) ? documentsDir // マイドキュメントフォルダ :/* r == 113 */ currentDir; // 作業フォルダ Status = " " + folder; WshShell.Run( "\"" + folder + "\""); break; case 114: // 作業フォルダを確認 Status = " 作業フォルダ: " + currentDir; break; case 115: // メモ帳で開く var command = "notepad.exe \"" + fullPath + "\""; Status = " " + command; WshShell.Run( command ); break; } } // 最後に閉じたファイルのアイテムを開く else if ( r >= 200 && r < 300 ) { if ( ! unnamed || ! blank ) { editor.NewFile(); } editor.OpenFile( recentFiles[ r - 200 ] ); } // 選択したタブをアクティブ化 else if ( r >= 300 && r < 400 ) { docus.Item( r - 300 ).Activate(); } // 標準コマンド else { editor.ExecuteCommandByID( r ); } // ---------- ▼ 関数 ▼ ---------- // /** * 関数 XMenu( docuPath, meryName, portableMode, versionCheck_2_6_9, autoSaveFlag, backupFlag ) * ファイルメニュー拡張 */ function XMenu( fullPath, mery, portableMode, v20609, autoSave, backup ) { var xMenu = CreatePopupMenu(); if ( fullPath ) { xMenu.Add( "プロパティ(&R)...", 100 ); xMenu.Add( "-----", 0, meMenuSeparator ); xMenu.Add( "ファイル名をコピー(&N)", 101 ); xMenu.Add( "フルパスをコピー(&P)", 102 ); xMenu.Add( "メモ帳で開く(&O)", 115 ); xMenu.Add( "-----", 0, meMenuSeparator ); xMenu.Add( "親フォルダのパスをコピー(&F)", 103 ); xMenu.Add( "親フォルダを開く(&D)", 105 ); xMenu.Add( "-----", 0, meMenuSeparator ); } xMenu.Add( mery + ".exe のフルパスをコピー(&E)", 104 ); xMenu.Add( mery + ".exe の親フォルダを開く(&M)", 106 ); xMenu.Add( "Macros フォルダを開く(&S)", 108 ); if ( ! portableMode ) { xMenu.Add( "ユーザーフォルダを開く(&U)", 107 ); } if ( v20609 ) { xMenu.Add( "自動保存フォルダを開く(&A)", 109, autoSave ); xMenu.Add( "バックアップフォルダを開く(&B)", 110, backup ); } xMenu.Add( "-----", 0, meMenuSeparator ); xMenu.Add( "デスクトップフォルダを開く(&H)", 111 ); xMenu.Add( "マイドキュメントフォルダを開く(&D)", 112 ); xMenu.Add( "作業フォルダを開く(&U)", 113 ); xMenu.Add( "作業フォルダを確認(&V)", 114 ); return xMenu; } /** * 関数 GetIniOptionCM( keyArray, iniPath ) * ※「コンパクトメニュー」マクロ用 魔改造版 * * 引数 keyArray で指定した INI オプション項目の値と * 「編集モード」 「マクロ」 「プラグイン」 「外部ツール」 の * 一覧をそれぞれ配列で返す * * 第1引数: INI オプション項目を指定する配列 * 第2引数: Mery.ini のフルパス */ function GetIniOptionCM( keyArray, iniPath ) { // Mery.ini を読みこむ var Adodb = new ActiveXObject( "ADODB.Stream" ); var adTypeText = 2, adReadAll = -1; Adodb.Type = adTypeText, Adodb.Charset = "UTF-8"; Adodb.Open(); Adodb.LoadFromFile( iniPath ); var iniText = Adodb.ReadText( adReadAll ); Adodb.Close(); // GetIniOption() バージョン // 引数の配列をループ処理して ini からオプションの値を取得する var reg1, value, iniOptionArray = []; for ( var i = 0, len = keyArray.length; i < len; i ++ ) { reg1 = new RegExp( "^" + keyArray[i] + "=([^\\r\\n]*?)$" , "m" ); if ( reg1.test( iniText ) ) { value = reg1.exec( iniText )[1]; } else { value = 0; } iniOptionArray.push( value ); } // 編集モード名を取得する // \r\n [Modes\Mode##] \r\n Caption=ModeName を抽出 var reg2 = /\r\n\[Modes\\Mode\d+\]\r\nCaption=[^\r\n]+/g; var modeArray = iniText.match( reg2 ) || []; // 抽出結果の配列 // ModeName を抽出 var reg3 = /Caption=([^\r\n]+)/; for ( var i = 0, len = modeArray.length; i < len; i ++ ) { modeArray[i] = reg3.exec( modeArray[i] )[1]; } // マクロのパスを取得する(末尾に Visible キーの値を付加する) // \r\n [Macros\Macro##] \r\n FileName=MacroPath \r\n Visible=# を抽出 var reg4 = /\r\n\[Macros\\Macro\d+\]\r\nFileName=[^\r\n]+\r\nVisible=\d/g; var macroArray = iniText.match( reg4 ) || []; // 抽出結果の配列 // MacroPath を抽出 var reg5 = /\r\nFileName=([^\r\n]+)\r\n/; for ( var i = 0, len = macroArray.length; i < len; i ++ ) { macroArray[i] = reg5.exec( macroArray[i] )[1] + macroArray[i].slice( -1 ); } // プラグインのパスを取得する // \r\n [Plugins\Plugin##] \r\n FileName=PluginPath を抽出 var reg6 = /\r\n\[Plugins\\Plugin\d+\]\r\nFileName=[^\r\n]+/g; var pluginArray = iniText.match( reg6 ) || []; // 抽出結果の配列 // PluginPath を抽出 var reg7 = /FileName=(?:[^\\]+\\)*([^\r\n]+)/; for ( var i = 0, len = pluginArray.length; i < len; i ++ ) { pluginArray[i] = reg7.exec( pluginArray[i] )[1]; } // 外部ツール名を取得する // \r\n [Tools\Tool##] \r\n Caption=ToolName を抽出 var reg8 = /\r\n\[Tools\\Tool\d+\]\r\nCaption=[^\r\n]+/g; var toolArray = iniText.match( reg8 ) || []; // 抽出結果の配列 // ToolName を抽出 var reg9 = /Caption=([^\r\n]+)/; for ( var i = 0, len = toolArray.length; i < len; i ++ ) { toolArray[i] = reg9.exec( toolArray[i] )[1]; } return [ iniOptionArray, modeArray, macroArray, pluginArray, toolArray ]; } /** * 関数 GetClosedFiles( num, hisPath ) * 「最後に閉じたファイル」のフルパスの配列を返す * * 第1引数: 「最後に閉じたファイル」の件数を指定 * 第2引数: Mery.his のフルパス */ function GetClosedFiles( num, hisPath ) { var closedFile = "", closedFileArray = []; var Fso = new ActiveXObject( "Scripting.FileSystemObject" ); if ( ! num || ! Fso.FileExists( hisPath ) ) { return closedFile; } // Mery.his を読みこむ var Adodb = new ActiveXObject( "ADODB.Stream" ); var adTypeText = 2, adReadAll = -1; Adodb.Type = adTypeText, Adodb.Charset = "UTF-8"; Adodb.Open(); Adodb.LoadFromFile( hisPath ); var hisText = Adodb.ReadText( adReadAll ); Adodb.Close(); // Mery.his からファイルパスを抽出し、後ろから順にチェック var hisArray = hisText.match( /^\[.+\]$/gm ); if ( ! hisArray ) { return closedFile; } hisArray.reverse(); var hCount = hisArray.length; var eCount = Editors.Count; var docus, dCount, hit; outerLoop: for ( var i = 0; i < hCount && closedFileArray.length < num; i ++ ) { closedFile = hisArray[i].slice( 1, -1 ); for ( var ee = 0, hit = false; ee < eCount; ee ++ ) { docus = Editors.Item( ee ).Documents; dCount = docus.Count; for ( var dd = 0; dd < dCount; dd ++ ) { if ( docus.Item( dd ).FullName == closedFile ) { hit = true; continue outerLoop; } } } // 現在開いていないものを「最後に閉じたファイル」に追加する if ( ! hit && Fso.FileExists( closedFile ) ) { closedFileArray.push( closedFile ); } } return closedFileArray; } /** * 関数 GetDics( dicsDir ) * 辞書ファイルのフルパスの配列を返す * * 引数: Dics フォルダのフルパス */ function GetDics( dir ) { var dics = new Enumerator( Fso.GetFolder( dir ).Files ); var dicsArray = []; for ( ; ! dics.atEnd(); dics.moveNext() ) { if ( /\.aff$/i.test( dics.item() ) ) { dicsArray.push( dics.item() ); } } return dicsArray; } /** * 関数 GetPluginName( dllName ) * プラグイン.DLL のファイル名から「プラグイン名」を返す */ function GetPluginName( dll ) { if ( dll.indexOf( "Outline" ) > -1 ) return "アウトライン"; if ( dll.indexOf( "KureiKei" ) > -1 ) return "プロ生ちゃん"; if ( dll.indexOf( "EditorConfig" ) > -1 ) return "EditorConfig"; if ( dll.indexOf( "LiveStyle" ) > -1 ) return "Emmet LiveStyle"; if ( dll.indexOf( "AlphaBlend" ) > -1 ) return "半透明"; if ( dll.indexOf( "ClassView" ) > -1 ) return "クラスビュー"; if ( dll.indexOf( "Conversion" ) > -1 ) return "半角/全角 変換"; if ( dll.indexOf( "Favorites" ) > -1 ) return "お気に入り"; if ( dll.indexOf( "HSPRun" ) > -1 ) return "HSPコンパイル実行"; if ( dll.indexOf( "Snippets" ) > -1 ) return "スニペット"; if ( dll.indexOf( "WebPreview" ) > -1 ) return "Webプレビュー"; if ( dll.indexOf( "ClipboardHistory" ) > -1 ) return "クリップボード履歴"; if ( dll.indexOf( "PathPaste" ) > -1 ) return "コピーしたファイルやフォルダのパスを貼り付け"; if ( dll.indexOf( "RectangleInput" ) > -1 ) return "矩形選択範囲の各行の先頭に文字を挿入"; if ( dll.indexOf( "OutputBarHook" ) > -1 ) return "OutputBar拡張"; if ( dll.indexOf( "MeryRelay2Plugin" ) > -1 ) return "プロセス中継"; if ( dll.indexOf( "MeryRelay" ) > -1 ) return "別プロセスで編集"; if ( dll.indexOf( "CheckModified" ) > -1 ) return "文書の変更をチェック"; if ( dll.indexOf( "CloseSplitEditor" ) > -1 ) return "分割されたエディタを閉じる"; if ( dll.indexOf( "IPMessenger" ) > -1 ) return "IPメッセンジャー"; if ( dll.indexOf( "MeryCsvList" ) > -1 ) return "MeryCsvList"; if ( dll.indexOf( "SearchToolbar" ) > -1 ) return "検索バー"; else return dll.replace( /\.dll$/, "" ); } /** * 関数 GetClipboardData( objClipboardData ) * クリップボード履歴を配列で返す * ※ ベータ版 2.8.1 以降 */ function GetClipboardData( cb ) { var cbArray = []; for ( var i = 0, cbItem; ; i ++ ) { cbItem = cb.GetData( i ) || ""; if ( ! cbItem ) { break; } deleteLoop: // 重複するアイテムを履歴から削除 for ( var j = i + 1, cbNextItem; ; j ++ ) { cbNextItem = cb.GetData( j ) || ""; if ( ! cbNextItem ) { break deleteLoop; } if ( cbItem == cbNextItem ) { cb.ClearData( j -- ); } } cbArray.push( cbItem ); // 履歴のアイテムを配列に追加 } return cbArray; } /** * 関数 MenuKey( str, num, numWidth, menuWidth ) * クリップボード履歴のラベルを整形する * * ・行頭空白を除去、空白文字を圧縮: →「›」(U+203A) * ・改行記号を可視化: →「↲」(U+21B2) または「⏎」(U+23CE) * ・削られてしまう「&」を補完 * ・「¥」(U+005C) を「∖」に置換: →「∖」(U+2216) * ・ゼロ幅や特殊な空白文字を豆腐に置換: →「⊠」(U+22A0) または「▯」(U+25AF) * ・判別しづらいメタ文字を全角に置換: !"%'(),.:;@[]`{|} * ・「a-z」を全角に置換 * ・行番号を空白でケタ埋め: EN SPACE「 」(U+2002) * ・文字数を切り詰め */ function MenuKey( str, num, numWidth, menuWidth ) { var reg = /[\u00A0\u1680\u180E\u2000-\u200E\u2028\u2029\u202F\u205F\u2062\u2063\uFEFF]/g; var menuKey = str.replace( /(?:\t|[ ]{3,}|[ ]{2,})+/g, " › " ) .slice( 0, menuWidth + 1 ) .replace( /(?:\r?\n|\r)/g, " ↲ " ) .replace( /[&]/g, "&&" ) .replace( /[\\]/g, "∖" ) .replace( reg, "▯" ) .replace( /[!"%'(),.:;@\[\]`a-z{|}]/g, function( tmp ) { return String.fromCharCode( tmp.charCodeAt( 0 ) + 0xFEE0 ) } ); num = ( " " + num ).slice( - numWidth ).replace( /\d$/, "&$&: " ); menuKey = ( menuKey.length > menuWidth ) ? menuKey.slice( 0, menuWidth ) + " ..." : menuKey; return num + menuKey; } </source> == メモ == * 2019/10/29 (sukemaru) : ベータ版 2.8.1 以降でないとエラーになる「クリップボード履歴」の取得コードを使っているのを忘れていました…。 : 第3版で修正しておきました。 * 2019/10/30 (sukemaru) : 初期設定状態からほとんど弄っていない Mery だと設定項目のいくつかは Mery.ini に反映されていない状態らしく、扱いが難しいです。
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク