全角/半角変換

提供: MeryWiki
ナビゲーションに移動 検索に移動

選択範囲の文字列の 全角/半角変換

  • 選択範囲なしのときは、カーソル位置の単語を範囲選択する。
  • 選択範囲の文字列が変更されなかったときは履歴を巻き戻して「変更行」のマーキングを残さない。
  • マクロ実行時に Ctrl キーが押されていないときは、編集メニュー >> 選択範囲の変換 >> 「半角に変換」、Ctrl キーが押されているときは「全角に変換」をおこなう。


※このマクロは、基本的に ツールバーアイコン にして使用する想定で作ってあります。

  • 外部実行ファイル GetKeyState.exe を利用して Ctrl キー押し下げ判定をします。
あらかじめ "GetKeyState.zip" をダウンロードして、書庫内の "GetKeyState.exe" を Macros フォルダに配置してください。
  • ツールバーにアイコンを置いて実行する場合、アイコンをクリックするときの Ctrl キーの押し下げ状態(Ctrl+クリックか、ただのクリックか)で機能を切り替えます
  • Ctrl キーの押し下げ状態で「全角/半角変換」の機能を切り替えるので、 このマクロに ショートカットキー を割り当てる場合は、 Ctrl キーをふくむキーパターンと Ctrl キーをふくまないキーパターンの2つを登録する必要があります。
e.g. Ctrl+H と Alt+H  など
  • [マクロ]メニューや右クリックメニュー内から実行する場合も、マクロを実行するときの Ctrl キーの押し下げ状態(Ctrl+クリック or ただの左クリック、または Ctrl+Enter or Enter)で機能を切り替えます
  • 外部実行ファイルを呼び出すため、Ctrl+H キーなどや Ctrl+クリックが速すぎると Ctrl キーの押し下げ状態を正しく取得できないことがあります。
    「全角変換」がうまく機能しないときは、Ctrl キーを放すタイミングを遅らせてください(マクロが発動するまで、またはマクロの処理が終了するまで Ctrl キーを押し下げたままにする)。


選択範囲内の英数カナの全角/半角の相互変換(トグル)は >> 「全角/半角 トグル変換」マクロ
大文字/小文字の相互変換は >> 「大文字/小文字/頭文字 トグル変換」マクロ


ソースコード[編集]

ダウンロード: 「ファイル:全角/半角変換.zip」(アイコン入り)
  • 2019/05/11: 空行で実行すると無用にアンドゥするバグを修正
#title = "全角/半角変換"
#tooltip = "選択範囲を半角に変換 (+Ctrlで全角に変換)"
// #icon = "AA[4].ico"

// Ctrl キーの状態を取得
var $ctrl = 0;
var getKeyState = editor.FullName.replace( /mery\.exe$/i , "" )
                + "Macros\\GetKeyState.exe";
if ( new ActiveXObject( "Scripting.FileSystemObject" ).FileExists( getKeyState ) ) {
  var WshShell = new ActiveXObject( "WScript.Shell" );
  $ctrl = WshShell.Run( '"' + getKeyState + '" ctrl', 0, true );
}

var d = editor.ActiveDocument;
var s = editor.ActiveDocument.selection;

// 非選択時には単語を選択
if ( s.IsEmpty ) {
  var pos = s.GetActivePos();
  s.SelectWord();
}
var st = s.Text;
var sv = d.Saved;

// Ctrl キーなし(GetKeyState なし)なら半角に変換
if ( ! $ctrl ) {
  s.ChangeWidth( meWidthHalfWidth );
}
// Ctrl キー押し下げ時は全角に変換
else {
  s.ChangeWidth( meWidthFullWidth );
}
// 文字列の変更なしなら履歴をもどす
if ( st && s.Text == st ) {
  d.Undo();
  d.Saved = sv;
  if ( pos >= 0 ) {
    s.SetActivePos( pos );
  }
}

メモ[編集]

アルファベットや数字、記号、カタカナが混在していても使いやすいよう、「選択範囲なしのときは、カーソル位置の単語を範囲選択する」仕様にしてあります。
「行全体を自動選択する」仕様に変更したい場合は、ソースコード内の s.SelectWord(); の行を以下のように書き換えてください。

  s.SelectLine();
スポンサーリンク