Kindleで英語学習によさそうな本を見つけたので、例文を暗記するためにプリントアウトしようと思い、Windows版のKindleから例文をコピーしたら、改行がなかったり、日本語の文字と文字の間にスペースが入ってたりと、非常にそのままでは使用しにくい状態でした。
ひとまず改行は文章を見ながら、手作業で入れるとして、問題は文字と文字の間のスペースです。
こ れ は ペン で す 。
普段、テキストエディタはVisual Studio CodeやNotePad++を使用しているのですが、Visual Studio Codeはマクロ機能がなく、NotePad++のマクロ機能では実現できそうにありませんでした。
いろいろ調べたところ、サクラエディタはマクロをJavaScriptで記載することができることがわかり、初めて使用することにしました。
サクラエディタでJavaScriptについてはいろいろなブログで取り上げられているので、取り上げませんが、初めて使うにおいてわかりにくかったことを書きます。
コマンドについて
基本的にはキーマクロの記録で保存されるマクロに、Editor.をつければ実行できるようですし、キーマクロの記録をやりながらのほうが、効率も良いです。
ヘルプファイルをみれば、コマンドに参照できるので、記録されたコマンドみてわからなかったら調べるという進め方がよさそうです。
記録されない特殊コマンド
メニューやツールバーからは直接利用できないマクロ専用関数があるそうで、ヘルプファイルでマクロ専用関数から調べることができます。
スクリプトの作成
選択した行のスペースを削除して置き換えるプログラムを作り、DeleteLineSpace.jsというファイル名で保存しました。
var str = Editor.GetLineStr(0); // 選択行を読み込む
Editor.GoLineTop(0); // 行頭に移動(折り返し単位)
Editor.GoLineEnd_Sel(0); // (選択)行末に移動(折り返し単位)
Editor.Delete(0); // 選択範囲を削除
var str2 = str.replace(/\s+/g,''); // スペースを削除
Editor.InsText(str2); // 文字列を書き込み
プログラムの流れとしては
- カーソルのある行を読み込む
- カーソルのある行を削除
- replaceでスペースを削除
- スペースを削除した文字列を書き込み
* 文字列宣言でletは使えなかったので、ES6には対応してないようです。
選択行の読み込みはGetLineStrを使いました。
■ function GetLineStr( int1 :Integer ): String; [↑] 引数 int1 取得したい行の行番号を改行単位(1開始)で指定します。 0 を指定すると、カーソル行の文字列を取得できます。 戻り値 改行コードを含む1行の文字列です。 解説 取得する文字列も改行単位です。 戻り値の文字列が長さ 0 のだった場合、その行は存在しなかったことを意味します。 int1 がマイナス値だと、エラーが発生します。 sakura:1.4.2.0以降
作成したマクロの実行方法
作成したマクロは「ツール→名前を指定してマクロ実行」で実行することができます。

しかしこの方法だと、いちいちメニューを開きファイルを選択しなければならないので、ショートカットで実行するようにしました。
手順としては、
登録済みマクロに登録
「設定 → 共通設定」のマクロタブで番号にマクロ名とファイル名を選び、「設定」ボタンを押します。

キー割り当て
「設定 → 共通設定」のキー割り当てタブで、種別から外部マクロを選びます。
今回はCtrl + 0に設定しました。キーを選んで割付ボタンを押すと設定することができます。

最後に
せっかくマクロを作り、例文を編集していきましたが、Kindleにはコピー制限がありせっかく作ったマクロが使えませんでした。

逃げ道はありましたが・・・