Skip to content

SakuraVz - テキストスタックなどの VZ Editor の機能を組み込んだサクラエディタ fork

License

Notifications You must be signed in to change notification settings

yoshinrt/SakuraVz

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sakura Editor VZ 化 fork

License: Zlib build sakura Star History

サクラエディタに VZ Editor (以下,Vz と表記) の機能のいくつか (と追加で細かい機能) を実装するプロジェクトです.現在以下の機能が追加されています.下記以外の細かい修正点は issues を参照してください.

機能の on/off を GUI で設定する機能はありませんので,sakura.ini を直接編集してください.本 fork のビルドでは,デフォルトで全て有効になっています.

最新バイナリは GitHub Actions の Artifacts にあります (運が良ければ).

一覧

テキストスタック

  • クリップボードにデータを格納するコマンドはすべて,テキストスタックに PUSH 動作を行います.
  • クリップボードからデータを貼り付けるコマンドはすべて,テキストスタックからの POP 動作を行います.
  • 「貼り付け(スタックPOPなし)」コマンドを追加しています (マクロ命令: CopyPaste()).Vz で Shift+F8 に割り当てられていた機能です.

sakura.ini: bVzModeEnableTextStack=1 で有効になります

改行をまたぐ検索・置換

正規表現で改行をまたぐ検索・置換に対応しました.ただし以下の制限があります.

  • 検索の「該当行マーク」でマッチ結果が改行をまたぐ場合,先頭行のみマークされます.
  • 検索でマッチ結果が改行をまたぐ場合,検索ヒット位置 (つまりカーソル位置) 以外は色付けされません.
  • Grep 検索の結果出力が「非該当行」の場合,改行をまたぐ検索はできません.
  • アウトラインの正規表現,正規表現キーワード では改行をまたぐ検索はできません.

また検索・置換の仕様を以下のように変更しています.

  • 正規表現エンジンとして PCRE2 を内蔵しています.bregonig.dll 等の外部 DLL は使用できません.
  • サクラエディタ標準の「単語単位で検索」仕様は削除されました.正規表現を使用してください.
  • 上記に代わり Vz 互換の「単語単位で検索」仕様を追加しました.* で単語境界のチェックをキャンセルします.
    • 例: AB* で,AB から始まる単語にマッチします
  • 置換の「置換対象」は削除されました.正規表現を使用してください.
  • 置換の「すべて置換は置換の繰り返し」は削除されました.

ファイルオープンの高速化

特に大きなファイルで,ファイルオープンを高速化しました.

  • 一部の処理に並列処理を導入しました.
  • 巨大なファイル (10MB 以上,設定可能) では高速モードになり,一部の機能を制限することにより更に高速化します.高速モードでは,以下の動作に制限が入ります.
    • 折り返し設定は 5120文字で固定され,他の折り返し設定は使用できません.全角・半角にかかわらず 5120文字なので,全角・半角が混在する文書では折り返し位置が揃わないことになります.
    • ブロックコメントや文字列リテラル等の一部のカラーリングが,ごく稀に不正確になります.

1GB のファイルオープンに要する時間 (秒) は以下のとおりです.(使用 PC: AMD Ryzen5 5600G (12スレッド) Mem:16GB)

折返し設定 Sakura本家 v2.4.2.6109 SakuraVz (非高速モード) SakuraVz (高速モード)
折返さない 42.6 25.4 6.3
右端で折返す 52.1 23.5 6.3
(強制的に折返さない)

sakura.ini: nVzModeLargeFileSize にファイルサイズ (MB単位) を設定することにより,このファイルサイズ以上のファイルは高速モードでオープンします.nVzModeLargeFileSize=0 で高速モードは無効になります.

Grep検索・Grep置換のマルチスレッド化

Grep検索・Grep置換 をマルチスレッド化することにより,高速化しました.

サクラエディタの GitHub リポジトリで 'CNative' を検索時の時間 (秒) は以下のとおりです.(使用 PC: AMD Ryzen5 5600G (12スレッド) Mem:16GB)

Sakura本家 v2.4.2.6109 SakuraVz
4.7 1.1

方向感応式の行単位・文字単位選択切り替え

選択中にカーソル移動 または マウスドラッグによる選択で,↑↓で行単位の選択,←→で文字単位の選択に切り替えます.

sakura.ini: nVzModeSelectMode=1 で有効になります

「ラインモード貼付けを可能にする」の対象コマンドを拡大

以下の,行単位の Cut or Copy を行う操作に対し,共通設定→編集→ラインモード貼付けを可能にする オプションの設定が反映されるようになりました.

  • 選択中にカーソル↑↓
  • マウス操作による行選択
  • メニューの編集→高度な操作→範囲選択内全行~コピー

改行混在を許可しないモード

標準では一つの文書内で CRLF, LF, CR 等の改行コードを混在させることができますが,メニューの 設定→共通設定→編集→改行コードを変換して貼り付ける を有効にすることで,改行コードの混在を許可しないモードになります.これにより,挙動が以下のように変更されます.

  • 開いたファイルは,エディタ内部ですべて LF に統一され,保存時に元の改行に統一してから保存します.これにより,
    • 正規表現やマクロの InsText() で改行を示す文字列は,ファイルの改行コードによらず,( \r\n 等ではなく ) \n に統一されます.
    • メニューの「入力改行コードの指定」,マクロの GetLineCode(), ChgmodEOL() は,入力時の改行コードではなく,保存時の改行コードの設定・取得になります.入力時に LF 以外を入力することはできません.
  • 貼り付け時に,クリップボードに格納された文字列は,改行コードが LF に統一されてから貼り付けられます.
  • コピー時にクリップボードに格納される文字列は,改行コードが CRLF に統一されます.
  • 改行が混在している (例: InsText( "\r" ) を実行した) ファイルを保存する場合,ユーザに問い合わせすることなく,設定された改行コードに統一してから保存します.

直前の置換を再実行

直前の置換を再実行する機能 (Vz で Shift+F7) を追加しました.ReplaceAll() で,引数が 0 個のとき,直前の置換条件で置換を再実行します.

コマンドではなくマクロ関数として実装されていますので,キーに割り当てるためには次のマクロを組む必要があります.

ReplaceAll();

他アプリで編集されたときの問い合わせダイアログボックス抑制

オープン中のファイルが他アプリで変更されたとき,サクラエディタで未編集状態であれば,問い合わせなしで再読込するオプションを追加しました.

sakura.ini: bVzModeNoAskWhenFileUpdate=1 で有効になります

JavaScriptファイルを共通にするためのマクロ関数

標準では 1マクロ = 1 JavaScript ファイル ですが,マクロファイル管理の容易化のため,1 JavaScript ファイルを複数のマクロ・プラグインで共有することができる仕組みを追加しました.

  • 実行中のマクロ情報を取得する関数 GetMacroInfo( mode ) を追加しました.mode には以下の値のいずれかを指定します.
    • 0: 「共通設定」→「マクロ」の「マクロ名」に設定された文字列を取得します.
    • 1: 「共通設定」→「マクロ」の「番号」を取得します.
    • 2: 「共通設定」→「マクロ」の「ファイル名」を取得します.
  • プラグインとして呼ばれたときのジャック名を取得する関数 Plugin.GetPluginInfo( 0 ) を追加しました.引数は 0 を指定してください.

以下のようなマクロを組むことで,1つの *.js ファイルを複数のマクロで共有することができます.共通設定→マクロ の設定で,「マクロ名」に Hoge または Fuga を指定し,ファイル名は同じものを指定します.

var FuncTable = {};

// 個別のマクロ
FuncTable.Hoge = function(){
  MessageBox( "Hoge" );
}

FuncTable.Fuga = function(){
  MessageBox( "Fuga" );
}

// DocumentOpen プラグイン
FuncTable.PluginDocumentOpen = function(){
  MessageBox( "Plugin: DocumentOpen" );
}

// 個別のマクロにジャンプ
var FuncName = typeof( Plugin ) != "undefined" ?
  "Plugin" + Plugin.GetPluginInfo( 0/*JackName*/ ) : GetMacroInfo();

if( FuncTable[ FuncName ]) FuncTable[ FuncName ]();
else throw new Error( "見つかりません: " + FuncName + "\nfile:" + GetMacroInfo( 2 ));

カーソル位置に関するマクロ関数

カーソル位置に関するマクロ関数を追加しました.

  • GetCursorPosX(): カーソル位置の行頭からのレイアウト桁位置 (行頭 = 0) を返します.
  • GetCursorPosXLogic(): カーソル位置の行頭からの論理桁位置 (行頭 = 0) を返します.
  • GetCursorPosY(): カーソル位置のファイル先頭からの表示行位置 (先頭行 = 0) を返します.
  • GetCursorPosYLogic(): カーソル位置のファイル先頭からの論理行位置 (先頭行 = 0) を返します.
  • GetLayoutXWidth(): レイアウト 1桁分の幅を返します.
  • GetScreenTop(): スクリーン上端のレイアウト行位置 (先頭行 = 0) を返します.
  • GetScreenLeft(): スクリーン左端のレイアウト桁位置 (行頭 = 0) を返します.
  • GetCursorChar(): カーソル位置の 1文字を取得します.
  • IsCursorEOL(): カーソル位置が EOL の場合,非 0 を返します.
  • IsCursorEOF(): カーソル位置が EOF の場合,非 0 を返します.
  • MoveTo( line, col [, sel] ): レイアウト座標 line 行,col 桁に移動します.sel に 1 を指定した場合,選択状態を維持します.
  • MoveScreen( line, col ): 画面表示の左上が line 行,col 桁になるようにスクロールします.

検索・置換ダイアログのオプション,デフォルトボタンを固定できるパラメータ追加

SearchDialog( mode ), ReplaceDialog( mode ) に引数を追加しました.mode には以下の値のいくつかを | で繋げて指定します.

  • 0x00000001 / 0x00000002:「単語単位で探す」チェックボックス クリア / セット
  • 0x00000004 / 0x00000008:「英大文字と小文字を区別する」チェックボックス クリア / セット
  • 0x00000010 / 0x00000020:「正規表現」チェックボックス クリア / セット
  • 0x00000040 / 0x00000080:「見つからないときにメッセージを表示」チェックボックス クリア / セット
  • 0x00000100 / 0x00000200:「検索 (置換) ダイアログを自動的に閉じる」チェックボックス クリア / セット
  • 0x00000400 / 0x00000800:「先頭(末尾)から再検索する」チェックボックス クリア / セット
  • 0x00001000 / 0x00002000:「クリップボードから貼り付ける」チェックボックス クリア / セット
  • 0x10000000:「上検索」ボタンをデフォルトにする
  • 0x20000000:「下検索」ボタンをデフォルトにする
  • 0x30000000:「該当行マーク」ボタンをデフォルトにする
  • 0x40000000:「置換」ボタンをデフォルトにする
  • 0x50000000:「すべて置換」ボタンをデフォルトにする
  • 0x60000000: 検索ダイアログにおいて「上検索」「下検索」が押されたとき,検索条件のみセットし,検索動作は行いません.
  • 0x70000000: 検索ダイアログを表示せず,カーソル位置の単語を検索語に設定します.

コマンドラインオプションでGREP置換ダイアログ呼び出し

コマンドラインオプションで,-grepdlg-grepr= オプションを同時に指定することで,GREP 置換ダイアログを呼び出せるようになりました.

例:

sakura.exe -grepmode -grepdlg -GREPR="a"

以下は,サクラエディタ本家の README になります.本 fork には適用されない情報もありますので,ご了承ください.


Sakura Editor

Build status Github Releases All License: Zlib CodeFactor Build Status build sakura Quality Gate Status Star History

A free Japanese text editor for Windows

Hot topic

Project(カンバン)運用を始めます。

Web Site

開発参加ポリシー

開発ポリシーを以下にまとめていきます。開発にご参加いただける方はこちらご参照ください。
https://github.com/sakura-editor/sakura/wiki

Build Requirements

Sakura Editor をコンパイルするためには、 Community または Professional エディション以上の Visual Studio 2017 または Visual Studio 2019 が必要です。

正式バイナリは Visual Studio Community 2017 でビルドされます。

Visual Studio Install options required

  • Windows 10 SDK

Visual Studio 2019 対応に関して

Visual Studio 2017/2019 の両対応に関しては #866 で対処済みです。
仕組みに関してはこちらを参照

.vsconfig に関して

Sakura Editor のコンパイルに必要なコンポーネントを Visual Studio 2017/2019 にインストールするために .vsconfig という設定ファイルを用意しています。

#1162.vsconfig というファイルを sakura.sln と同じディレクトリに配置しています。

Visual Studio 2017/2019 共通

vs_community__XXXXX.exe でインストールする際に、--config オプションをつけてインストールする。 あるいは構成変更することにより、必要なコンポーネントを自動的にインストールします。

vs_community__XXXXX.exe --config <.vsconfig のファイルパス>

Visual Studio 2019 のみ

sakura.sln と同じディレクトリに .vsconfig が存在するので、 Visual Studio 2019 で sakura.sln を開くと必要なコンポーネントが足りない場合、インストールを促す表示が出るので、インストールをクリックすると自動的にインストールする。

参照

How to build

  • 7Zip のインストールして 7z.exe へのパスを通します。
  • Visual Studio で sakura.sln を開いてビルドします。

詳細情報

詳しくは こちら を参照

CI Buildおよびローカルビルドの環境変数

こちら を参照してください。

PR(Pull Request) を簡単にローカルに取得する方法

CI Build (Azure Pipelines)

ビルドの仕組み (Azure Pipelines)

azure-pipelines.md でビルドの仕組みを説明しています。

CI Build (AppVeyor)

ビルドの仕組み (AppVeyor)

AppVeyor では、 build-all.bat を使用してビルドを行っています。 ビルドに使用されるバッチファイルについては build-batchfiles.md を参照してください。

ビルド成果物を利用する上での注意事項

これ を読んでからご利用ください。

x64 版は alpha 版です。
対応中のため予期せぬ不具合がある可能性があります。

ビルド成果物のダウンロード(バイナリ、インストーラなど)

master の 最新

  1. https://ci.appveyor.com/project/sakuraeditor/sakura/branch/master にアクセスする
  2. 右端にある Jobs をクリックします。
  3. 自分がダウンロードしたいビルド構成 (例: Configuration: Release; Platform: Win32) をクリックします。
  4. 右端にある ARTIFACTS をクリックします。
  5. 自分がダウンロードしたいものをクリックしてダウンロードします。
    • (ユーザー用) 末尾に Exe がついてるのが実行ファイルのセットです。
    • (ユーザー用) 末尾に Installer がついてるのがインストーラのセットです。
    • (すべて欲しい人向け) All がついてるのがバイナリ、インストーラ、ビルドログ、アセンブラ出力のフルセットです。 (#514 の軽減のため無効化中)
    • (開発者用) 末尾に Log がついてるのがビルドログのセットです。
    • (開発者用) 末尾に Asm がついてるのがアセンブラ出力セットです。

master の 最新以外

以下から取得したいビルドを選択後、同様にしてダウンロードできます。
https://ci.appveyor.com/project/sakuraeditor/sakura/history

開発情報

単体テスト

こちら を参照してください。

デバッグ方法

変更履歴

マクロのサンプル

こちらでマクロのサンプルを提供してます。
もしサンプルを作ってもいいよ~という方がおられましたら PR の作成お願いします。

静的コード解析

  • CodeFactor を利用しています。
    • cpplint.py で cpp のスタイルのチェックを行っています。

About

SakuraVz - テキストスタックなどの VZ Editor の機能を組み込んだサクラエディタ fork

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 75.0%
  • HTML 20.1%
  • C 1.8%
  • Inno Setup 1.1%
  • Batchfile 0.8%
  • C# 0.6%
  • Other 0.6%