Closed tats-u closed 1 year ago
タイプ別設定のスクリーンのレイアウトの枠内にある「SPACEの挿入」というチェックですが、レイアウトというよりインデントに関わる設定に思えます。
インデント/逆インデント時にカーソル周辺行のインデントスタイルに合わせた処理を行うようにするオプションを用意するというのはどうでしょうか?
オプションは必須です。将来EditorConfigにより上書きできるようにする必要があります。
ファイル全体(または広範囲領域)ではなく、あえて周辺行だけに限定する実装上の制約はありますか?
ファイル全体(または広範囲領域)ではなく、あえて周辺行だけに限定する実装上の制約はありますか?
1ファイルの中で複数のインデントスタイルが併用される事もあるので、それに対応するとなるとカーソル周辺行のインデントスタイルに合わせられるようにした方が良いと思います。ただ周辺行からインデントスタイルが判断出来ない場合もあると思うので、まずは1ファイル全体のインデントスタイルの検出を実装してから考慮した方が良いかもしれないですね。
Emacsがデフォで混合インデントすることは知っていますが、他はありますか?
その場合はひとまず現在のようにタブキーでタブ文字が入力されるような実装にするとよいのでしょうか? スペースインデントのコードにタブ文字が新規で入らないようにするのが最優先ですので
あるべき設定構造はこんな感じだと思います。
今回やりたいのはたぶん6。
どうあるべきか?どうあったら便利か?を考えるところが、 一番大変な部分ですが、一番面白い部分だとも思うのでこのへんで止めときます。
他のエディタは5.の実装しか知りません。6.の実装例はご存知ですか?
6.の実装例はご存知ですか?
検索してみたんですが全然見つかりませんでした。という事で世の中的に需要は特に無いのかもしれません。
@tats-u @berryzplus 「SPACEの挿入」設定を切り替えるマクロ関数を追加しました。
編集ファイルのインデント検出はマクロでも行えると思うので、既存の ChangeTabWidth
マクロ関数と追加した ChangeInsertSpace
マクロ関数で編集中ドキュメントの一時設定を変えられると思います。
もし #1929 がmergeされたら、編集ファイルのインデントスタイルに合わせた一時設定を行うようにするマクロを書いてみようと思います。サクラエディタ本体に機能を実装するのはその後でも良いのではないかと思います。
組み込みマクロということですか?
WSH系→セキュリティ上の問題から無効化しているケースあり。(https://qiita.com/akilab/items/cbcb1ba8621f8cc3aef4・https://www.softwareisac.jp/ipa/index.php?Windows+Script+Host%E3%81%AE%E5%88%B6%E5%BE%A1%E8%A8%AD%E5%AE%9A)JScriptはIE搭載のエンジンベースなのでES6以降非対応。 他→別途インストールが必要。VS Codeと違い、リモートから何か取ってこなくてもフル機能なのが本エディタの売りなので、依存を増やすのは❌
マクロの他にプラグインにするという手もありそうです。 http://sakura.qp.land.to/?Plugin マクロと同じくJScript/VBScriptになりそうですが…。JScript/VBScriptを使いたくない場合はDLLプラグインにするか、もしくはWebView2を使ったりしてWSHではなくてES6に対応させる手もあるとは思います。
本体機能として最初から付いてた方が使う方は手間が掛からないのは確かですね。試しに実装してみます。
Enterキー押下時に次行をインデントするか判定するために行頭をチェックしているので、走査範囲を拡張したら実現できないかな?と思って書きました。5と6は無効にできたほうが便利かな?と思っていたので「ハナから要らん」ならそれで良いです。
Enterキー押下時に次行をインデントするか判定するために行頭をチェックしているので、走査範囲を拡張したら実現できないかな?と思って書きました。
サクラエディタのスマートインデントを強化して色々なインデントスタイルへの対応度が上がると良いなとはなんとなく思ってます。
6.の編集行周辺から自動判別が出来ると有用なシチュエーションは色々思いつきますが、実装の優先度はファイル全体からの自動判別と比較すると落ちると思います。
同意です。基本的にEditorConfigなど含めて、ファイル全体でタブ/スペースのどちらかに統一するパターンが多いです。
マクロの他にプラグインにするという手もありそうです。 http://sakura.qp.land.to/?Plugin マクロと同じくJScript/VBScriptになりそうですが…。JScript/VBScriptを使いたくない場合はDLLプラグインにするか、もしくはWebView2を使ったりしてWSHではなくてES6に対応させる手もあるとは思います。
よく考えたらコア機能のためにわざわざJSエンジンを呼び出しに行くのはどうなのかなと思いました(DLLはまだマシだがWikiには未安定と書かれていた)
タイプ別設定の支援タブの画面下のチェックボックスで機能の有効無効を設定できます。
ビルドして確認してみましたがデフォでオフですか・・・ リリース版でしばらく様子見て不具合がなければオンでもいいのではないでしょうか?
ビルドして確認してみましたがデフォでオフですか・・・ リリース版でしばらく様子見て不具合がなければオンでもいいのではないでしょうか?
おっしゃる通りですね。しばらく待って不具合報告が無ければデフォルト値をオンにするPRを作成します。
問題内容
https://github.com/sakura-editor/sakura/issues/786 の前提となる問題として。
本エディタはVS Code等と異なり、半角スペースでインデントされたファイルに対し、プログラマーがTabキーでインデントしようとしても、忖度一切なしに不適切であるタブ文字を挿入します。
開いたテキストファイルのインデントスタイルを検知し、Tabキーを押した際に挿入される文字の種類や個数を変えるのが、ソースコードをいじる資格があるテキストエディタの最低要件です。
これを解決しないと https://github.com/sakura-editor/sakura/issues/786 はいつまで経っても解決できません。
Q. あとからスペースに変換すればいいのでは?
A. フールプルーフ。VS Codeではなくあえてこちらを使ってソースコードをいじろうとする人間にそんな思考は及びません。
再現手順
Tabが挿入されるのは不適切です。開いたファイルをスキャンし、インデント幅に合ったスペースを挿入してください。
再現頻度
100%
問題のカテゴリ
環境情報
Windows 11 Pro 64bit
2.4.2
特定環境固有ではありません。
スクリーンショット
Video.webm
Safari以外で再生可能