「行の表示方法を切り替える」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
箇条書きの順番を変更
MSY-07 (トーク | 投稿記録)
空行と改行の除去
 
(同じ利用者による、間の4版が非表示)
3行目: 3行目:
「オプション」ダイアログは自動的に閉じられて、「行の表示方法」の変更が適用されます。<br>
「オプション」ダイアログは自動的に閉じられて、「行の表示方法」の変更が適用されます。<br>


<br>
*非正規メソッド ''ExecuteCommandByID( 2177 )'' で「オプション」ダイアログを開き、VBScript 経由で「行の表示方法(&D)」のアクセラレータ '''Alt+D''' と、ドロップダウンリストのアイテムを選択するための矢印キー '''↑'''/'''↓''' のいずれかと、設定の変更を確定するための '''Enter''' キーを送信します。
*非正規メソッド ''ExecuteCommandByID( 2177 )'' で「オプション」ダイアログを開き、VBScript 経由で「行の表示方法(&D)」のアクセラレータ '''Alt+D''' と、ドロップダウンリストのアイテムを選択するための矢印キー '''↑'''/'''↓''' のいずれかと、設定の変更を確定するための '''Enter''' キーを送信します。
<br>
*マクロ本体となる JavaScript ファイルと、キーストロークを送信するための VBScript ファイル×2 が必要です。
*マクロ本体となる JavaScript ファイルと、キーストロークを送信するための VBScript ファイル×2 が必要です。
:※'''「マクロのカスタマイズ」に登録する必要があるのは、"行の表示方法を切り替える.js" ファイルだけです。'''
:※'''「マクロのカスタマイズ」に登録する必要があるのは、"行の表示方法を切り替える.js" ファイルだけです。'''
12行目: 10行目:
:※ VBScript ファイル×2 のファイル名を変更する場合は、"行の表示方法を切り替える.js" 内のコードも書き替えなければなりません。
:※ VBScript ファイル×2 のファイル名を変更する場合は、"行の表示方法を切り替える.js" 内のコードも書き替えなければなりません。
:※ VBScript ファイル×2 には、500 ミリ秒の遅延を仕込んでありますが、環境によってはもっと長い遅延が必要になる場合もあります(セキュリティソフトによるスクリプトチェック/ブロックなどが障害となる場合もあります)。<br> また、システムがビジー状態で「オプション」ダイアログが開かれるまでに 500 ミリ秒を経過してしまった場合も、「行の表示方法の切り替え」に失敗します。<br> → 失敗したときは「オプション」ダイアログが開かれたままになります。
:※ VBScript ファイル×2 には、500 ミリ秒の遅延を仕込んでありますが、環境によってはもっと長い遅延が必要になる場合もあります(セキュリティソフトによるスクリプトチェック/ブロックなどが障害となる場合もあります)。<br> また、システムがビジー状態で「オプション」ダイアログが開かれるまでに 500 ミリ秒を経過してしまった場合も、「行の表示方法の切り替え」に失敗します。<br> → 失敗したときは「オプション」ダイアログが開かれたままになります。
<br>
*<b style="color:#c00;">このマクロは、Mery.ini の「読み込み」と「書き換え」をします。</b>
*<b style="color:#c00;">このマクロは、Mery.ini の「読み込み」と「書き換え」をします。</b>
:※「'''読み込み'''」は、マクロ起動時点での「行の表示方法」を取得するためのものです。
:※「'''読み込み'''」は、マクロ起動時点での「行の表示方法」を取得するためのものです。
:※「'''書き込み'''」は、「オプション」ダイアログで「行の表示方法」の変更をして「OK」ボタンを押したさいに発生するものです(← VBScript からの Enter キーの送信で自動的に「OK」を適用します)。
:※「'''書き込み'''」は、「オプション」ダイアログで「行の表示方法」の変更をして「OK」ボタンを押したさいに発生するものです(← VBScript からの Enter キーの送信で自動的に「OK」を適用します)。
:※ 素早く 連続で このマクロを実行すると、ファイルアクセスに失敗してエラーを引き起こす可能性があります。
:※ 素早く 連続で このマクロを実行すると、ファイルアクセスに失敗してエラーを引き起こす可能性があります。
<br>
*将来的に Mery 本体の仕様変更によって「オプション」ダイアログの「行の表示方法」の変更のためのキー操作も変更される可能性があります。
*将来的に Mery 本体の仕様変更によって「オプション」ダイアログの「行の表示方法」の変更のためのキー操作も変更される可能性があります。


== ダウンロード ==
== ダウンロード ==
「[[ファイル:行の表示方法を切り替える.zip]]」 (2019/08/25 更新)
「[[ファイル:行の表示方法を切り替える.zip]]」 (2019-08-25 更新)
:*行の表示方法を切り替える.js
:*行の表示方法を切り替える.js
:*SendKeys( Alt+D, Up, Enter ).vbs
:*SendKeys( Alt+D, Up, Enter ).vbs
:*SendKeys( Alt+D, Down, Enter ).vbs
:*SendKeys( Alt+D, Down, Enter ).vbs


== ソースコード ==
== ソースコード ==
35行目: 29行目:


/**
/**
  * sukemaru, (2019/08/24 - 2019/08/25)
  * sukemaru, (2019-08-24 - 2019-08-25)
  *  
  *  
  * 「オプション」ダイアログを開いて「行の表示方法」の設定値を切り替える
  * 「オプション」ダイアログを開いて「行の表示方法」の設定値を切り替える
  *  
  *  
  * ※ 推奨要件: Mery ver 2.7.5 ~
  * ※ 推奨要件: Mery Ver 2.7.5 ~
  *  
  *  
  * ※ 別途、キーストロークを送信するための VBScript ファイル×2 が必要
  * ※ 別途、キーストロークを送信するための VBScript ファイル×2 が必要
159行目: 153行目:
</syntaxhighlight>
</syntaxhighlight>


=== 変更履歴 ===
== 変更履歴 ==
*2019/08/25:
* 1.0.1 (2019-08-25)
:・システムがビジー状態のときにキー送信がエディタ内に作用して改行してしまう不具合に対策
** システムがビジー状態のときにキー送信がエディタ内に作用して改行してしまう不具合に対策
:・VBS ファイルが拡張子「.VBS」の既定のプログラムではなく、WScript.exe で実行されるよう修正
** VBS ファイルが拡張子「.VBS」の既定のプログラムではなく、WScript.exe で実行されるよう修正
*2019/08/24:
* 1.0.0 (2019-08-24)
:初版
** 初版

2024年9月9日 (月) 11:15時点における最新版

概要[編集]

「オプション」ダイアログを開いて「行の表示方法」の設定を切り替えます。
「オプション」ダイアログは自動的に閉じられて、「行の表示方法」の変更が適用されます。

  • 非正規メソッド ExecuteCommandByID( 2177 ) で「オプション」ダイアログを開き、VBScript 経由で「行の表示方法(&D)」のアクセラレータ Alt+D と、ドロップダウンリストのアイテムを選択するための矢印キー のいずれかと、設定の変更を確定するための Enter キーを送信します。
  • マクロ本体となる JavaScript ファイルと、キーストロークを送信するための VBScript ファイル×2 が必要です。
「マクロのカスタマイズ」に登録する必要があるのは、"行の表示方法を切り替える.js" ファイルだけです。
VBScript ファイル×2 は、JS ファイルと同じディレクトリに配置してください。
※ VBScript ファイル×2 のファイル名を変更する場合は、"行の表示方法を切り替える.js" 内のコードも書き替えなければなりません。
※ VBScript ファイル×2 には、500 ミリ秒の遅延を仕込んでありますが、環境によってはもっと長い遅延が必要になる場合もあります(セキュリティソフトによるスクリプトチェック/ブロックなどが障害となる場合もあります)。
また、システムがビジー状態で「オプション」ダイアログが開かれるまでに 500 ミリ秒を経過してしまった場合も、「行の表示方法の切り替え」に失敗します。
→ 失敗したときは「オプション」ダイアログが開かれたままになります。
  • このマクロは、Mery.ini の「読み込み」と「書き換え」をします。
※「読み込み」は、マクロ起動時点での「行の表示方法」を取得するためのものです。
※「書き込み」は、「オプション」ダイアログで「行の表示方法」の変更をして「OK」ボタンを押したさいに発生するものです(← VBScript からの Enter キーの送信で自動的に「OK」を適用します)。
※ 素早く 連続で このマクロを実行すると、ファイルアクセスに失敗してエラーを引き起こす可能性があります。
  • 将来的に Mery 本体の仕様変更によって「オプション」ダイアログの「行の表示方法」の変更のためのキー操作も変更される可能性があります。

ダウンロード[編集]

ファイル:行の表示方法を切り替える.zip」 (2019-08-25 更新)

  • 行の表示方法を切り替える.js
  • SendKeys( Alt+D, Up, Enter ).vbs
  • SendKeys( Alt+D, Down, Enter ).vbs

ソースコード[編集]

行の表示方法を切り替える.js[編集]

#title = "行の表示方法を切り替える"
#tooltip = "論理行表示 と 物理行表示 を切り替える"

/**
 * sukemaru, (2019-08-24 - 2019-08-25)
 * 
 * 「オプション」ダイアログを開いて「行の表示方法」の設定値を切り替える
 * 
 * ※ 推奨要件: Mery Ver 2.7.5 ~
 * 
 * ※ 別途、キーストロークを送信するための VBScript ファイル×2 が必要
 * (このマクロの実体ファイルと同じフォルダに配置すること)
 * 
 * ※ CPU がビジー状態の場合は、キー送信までの遅延が不十分で失敗するかも
 */

// ---------- ▼ 設定項目 ▼ ----------

// Sleep(500) と SendKeys() を仕込んだ VBS のファイル名
var upVbs = "SendKeys( Alt+D, Up, Enter ).vbs";
var dnVbs = "SendKeys( Alt+D, Down, Enter ).vbs";

// ---------- ▲ 設定項目 ▲ ----------


// 行の表示方法を取得
var lineColumnView = ( GetIniOptionNum( "LineColumnView" ) == 1 );

// Sleep(500) と SendKeys() を仕込んだ VBS ファイルのフルパス
var vbs = ScriptFullName.slice( 0, - ScriptName.length )
        + ( lineColumnView ? dnVbs : upVbs );

var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
if ( Fso.FileExists( vbs ) ) {

  // キー送信のタイミング失敗時のための保険
  var d = editor.ActiveDocument;
  var s = d.selection;
  var act = s.GetActivePos();
  var anc = s.GetAnchorPos();
  var dReadOnly = d.ReadOnly;
  var dLength = d.Text.length;
  var requirement =  VersionCheck( "2.7.5" );
  // 書き込み禁止にしてエディタ内で改行(Enter)するのを防ぐ
  if ( requirement ) {
    d.ReadOnly = true;
  }

  // VBS ファイルを呼び出す
  var WshShell = new ActiveXObject( "WScript.Shell" );
  WshShell.Run( "WScript.exe \"" + vbs + "\"" );
  
  // 「オプション」パネルを開く
  editor.ExecuteCommandByID( MEID_TOOLS_OPTIONS = 2177 );

  // 保険を適用
  if ( requirement ) {
    d.ReadOnly = dReadOnly;
  }
  else if ( d.Text.length != dLength ) {
    d.Undo();
  }
  d.selection.SetActivePos( act );
  d.selection.SetAnchorPos( anc );
}


// 関数 GetIniOptionNum( key )
function GetIniOptionNum( key ) {
  // Mery.ini を探す
  var iniPath = editor.FullName.replace( /\.exe$/i, ".ini" );
  var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
  if ( ! Fso.FileExists( iniPath ) ) {
    var iniName = /\\([^\\]+)\.exe$/.exec( editor.FullName )[1];
    var WshShell = new ActiveXObject( "WScript.Shell" );
    iniPath = WshShell.SpecialFolders( "APPDATA" )
            + "\\Mery\\" + iniName + ".ini";
  }
  // 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();

  // ini から引数で指定したオプションの値を取得する
  var reg = new RegExp( "^" + key + "=[^\\r\\n]*$", "gm" );
  var value = iniText.match( reg )[0].substr( key.length + 1 );
  iniText = "";
  // Number 型で返す
  return Number( value );
}

// 関数 VersionCheck( versionStr )
function VersionCheck( versionStr ) {
  var Pad2 = function( str ) {
    return str.replace( /[0-9]+/g , function( digit ) {
      return digit.length < 2 ? "0" + digit : digit
    } )
  };
  var editorVer = + ( Pad2( editor.Version ).replace( /\./g, "" ).slice( 0, 6 ) );
  var requirement = + ( Pad2( versionStr ).replace( /\./g, "" ).slice( 0, 6 ) );
  return ( editorVer >= requirement );
}

SendKeys( Alt+D, Up, Enter ).vbs[編集]

set WshShell = WScript.CreateObject("WScript.Shell")

' 500 ミリ秒の遅延
WScript.Sleep 500
' Alt+D, Up, Enter
WshShell.SendKeys "%D{UP}~"

SendKeys( Alt+D, Down, Enter ).vbs[編集]

set WshShell = WScript.CreateObject("WScript.Shell")

' 500 ミリ秒の遅延
WScript.Sleep 500
' Alt+D, Up, Enter
WshShell.SendKeys "%D{DOWN}~"

変更履歴[編集]

  • 1.0.1 (2019-08-25)
    • システムがビジー状態のときにキー送信がエディタ内に作用して改行してしまう不具合に対策
    • VBS ファイルが拡張子「.VBS」の既定のプログラムではなく、WScript.exe で実行されるよう修正
  • 1.0.0 (2019-08-24)
    • 初版
スポンサーリンク