Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

スペースインデントされたファイルに対してはTabキーでスペースインデントするように自動で切り替えるべき #1924

Closed
tats-u opened this issue Jun 25, 2023 · 16 comments
Labels
enhancement ■機能追加

Comments

@tats-u
Copy link
Contributor

tats-u commented Jun 25, 2023

問題内容

#786 の前提となる問題として。
本エディタはVS Code等と異なり、半角スペースでインデントされたファイルに対し、プログラマーがTabキーでインデントしようとしても、忖度一切なしに不適切であるタブ文字を挿入します。
開いたテキストファイルのインデントスタイルを検知し、Tabキーを押した際に挿入される文字の種類や個数を変えるのが、ソースコードをいじる資格があるテキストエディタの最低要件です。
これを解決しないと #786 はいつまで経っても解決できません。

Q. あとからスペースに変換すればいいのでは?
A. フールプルーフ。VS Codeではなくあえてこちらを使ってソースコードをいじろうとする人間にそんな思考は及びません。

再現手順

  1. 半角スペースインデントされたソースコードファイルを開く
  2. Tabキーを押す

Tabが挿入されるのは不適切です。開いたファイルをスキャンし、インデント幅に合ったスペースを挿入してください。

再現頻度

100%

問題のカテゴリ

  • 仕様の問題

環境情報

  • OS バージョン

Windows 11 Pro 64bit

  • サクラエディタバージョン

2.4.2

  • PC情報

特定環境固有ではありません。

スクリーンショット

Video.webm

Safari以外で再生可能

@tats-u tats-u changed the title スペースインデントされたファイルに対してはTabキーでスペースインデントすべき スペースインデントされたファイルに対してはTabキーでスペースインデントするように自動で切り替えるべき Jun 25, 2023
@beru beru added the enhancement ■機能追加 label Jun 26, 2023
@beru
Copy link
Contributor

beru commented Aug 5, 2023

image

タイプ別設定のスクリーンのレイアウトの枠内にある「SPACEの挿入」というチェックですが、レイアウトというよりインデントに関わる設定に思えます。

インデント/逆インデント時にカーソル周辺行のインデントスタイルに合わせた処理を行うようにするオプションを用意するというのはどうでしょうか?

@tats-u
Copy link
Contributor Author

tats-u commented Aug 6, 2023

オプションは必須です。将来EditorConfigにより上書きできるようにする必要があります。

  • 手動設定(現行)
  • 内容から自動判別
  • EditorConfigによる自動設定(将来)

ファイル全体(または広範囲領域)ではなく、あえて周辺行だけに限定する実装上の制約はありますか?

@beru
Copy link
Contributor

beru commented Aug 6, 2023

ファイル全体(または広範囲領域)ではなく、あえて周辺行だけに限定する実装上の制約はありますか?

1ファイルの中で複数のインデントスタイルが併用される事もあるので、それに対応するとなるとカーソル周辺行のインデントスタイルに合わせられるようにした方が良いと思います。ただ周辺行からインデントスタイルが判断出来ない場合もあると思うので、まずは1ファイル全体のインデントスタイルの検出を実装してから考慮した方が良いかもしれないですね。

@tats-u
Copy link
Contributor Author

tats-u commented Aug 7, 2023

Emacsがデフォで混合インデントすることは知っていますが、他はありますか?

その場合はひとまず現在のようにタブキーでタブ文字が入力されるような実装にするとよいのでしょうか?
スペースインデントのコードにタブ文字が新規で入らないようにするのが最優先ですので

@berryzplus
Copy link
Contributor

あるべき設定構造はこんな感じだと思います。

  1. 共通設定(実装なし)
  2. タイプ別設定(実装あり)
  3. 編集中ドキュメントの一時設定(基本的に実装なし、部分的に実装あり)
  4. EditorConfigを検出して編集中ドキュメントの一時設定を動的に更新する機能(実装なし)
  5. ドキュメント全体から自動判別して編集中ドキュメントの一時設定を動的に更新する機能(実装なし)
  6. 編集行周辺から自動判別して編集中ドキュメントの一時設定を動的に更新する機能(実装なし)

今回やりたいのはたぶん6。

どうあるべきか?どうあったら便利か?を考えるところが、
一番大変な部分ですが、一番面白い部分だとも思うのでこのへんで止めときます。

@tats-u
Copy link
Contributor Author

tats-u commented Aug 12, 2023

  1. デフォルトの文字コードをUTF-8に一括変更する方法の提供 #1928
  2. 既存
  3. 下3つが依存
  4. EditorConfig に対応できないか検討する #786
  5. 個人的にはこれをメインにしてほしい
  6. 5.がダメな場合の代替

他のエディタは5.の実装しか知りません。6.の実装例はご存知ですか?

@beru
Copy link
Contributor

beru commented Aug 12, 2023

6.の実装例はご存知ですか?

検索してみたんですが全然見つかりませんでした。という事で世の中的に需要は特に無いのかもしれません。

@beru
Copy link
Contributor

beru commented Aug 12, 2023

@tats-u @berryzplus 「SPACEの挿入」設定を切り替えるマクロ関数を追加しました。

編集ファイルのインデント検出はマクロでも行えると思うので、既存の ChangeTabWidth マクロ関数と追加した ChangeInsertSpace マクロ関数で編集中ドキュメントの一時設定を変えられると思います。

もし #1929 がmergeされたら、編集ファイルのインデントスタイルに合わせた一時設定を行うようにするマクロを書いてみようと思います。サクラエディタ本体に機能を実装するのはその後でも良いのではないかと思います。

@tats-u
Copy link
Contributor Author

tats-u commented Aug 13, 2023

組み込みマクロということですか?

WSH系→セキュリティ上の問題から無効化しているケースあり。(https://qiita.com/akilab/items/cbcb1ba8621f8cc3aef4https://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と違い、リモートから何か取ってこなくてもフル機能なのが本エディタの売りなので、依存を増やすのは❌

@beru
Copy link
Contributor

beru commented Aug 13, 2023

マクロの他にプラグインにするという手もありそうです。
http://sakura.qp.land.to/?Plugin
マクロと同じくJScript/VBScriptになりそうですが…。JScript/VBScriptを使いたくない場合はDLLプラグインにするか、もしくはWebView2を使ったりしてWSHではなくてES6に対応させる手もあるとは思います。

本体機能として最初から付いてた方が使う方は手間が掛からないのは確かですね。試しに実装してみます。

@berryzplus
Copy link
Contributor

  1. 編集行周辺から自動判別はボツですか(笑)

Enterキー押下時に次行をインデントするか判定するために行頭をチェックしているので、走査範囲を拡張したら実現できないかな?と思って書きました。5と6は無効にできたほうが便利かな?と思っていたので「ハナから要らん」ならそれで良いです。

@beru
Copy link
Contributor

beru commented Aug 13, 2023

  1. の編集行周辺から自動判別が出来ると有用なシチュエーションは色々思いつきますが、実装の優先度はファイル全体からの自動判別と比較すると落ちると思います。

Enterキー押下時に次行をインデントするか判定するために行頭をチェックしているので、走査範囲を拡張したら実現できないかな?と思って書きました。

サクラエディタのスマートインデントを強化して色々なインデントスタイルへの対応度が上がると良いなとはなんとなく思ってます。

@tats-u
Copy link
Contributor Author

tats-u commented Aug 19, 2023

6.の編集行周辺から自動判別が出来ると有用なシチュエーションは色々思いつきますが、実装の優先度はファイル全体からの自動判別と比較すると落ちると思います。

同意です。基本的にEditorConfigなど含めて、ファイル全体でタブ/スペースのどちらかに統一するパターンが多いです。

マクロの他にプラグインにするという手もありそうです。
http://sakura.qp.land.to/?Plugin
マクロと同じくJScript/VBScriptになりそうですが…。JScript/VBScriptを使いたくない場合はDLLプラグインにするか、もしくはWebView2を使ったりしてWSHではなくてES6に対応させる手もあるとは思います。

よく考えたらコア機能のためにわざわざJSエンジンを呼び出しに行くのはどうなのかなと思いました(DLLはまだマシだがWikiには未安定と書かれていた)

@beru
Copy link
Contributor

beru commented Sep 10, 2023

#1931 がmergeされてこのissueの要求は満たせたと思うのでcloseします。

タイプ別設定の支援タブの画面下のチェックボックスで機能の有効無効を設定できます。

image

@beru beru closed this as completed Sep 10, 2023
@tats-u
Copy link
Contributor Author

tats-u commented Sep 13, 2023

ビルドして確認してみましたがデフォでオフですか・・・
リリース版でしばらく様子見て不具合がなければオンでもいいのではないでしょうか?

@beru
Copy link
Contributor

beru commented Sep 13, 2023

ビルドして確認してみましたがデフォでオフですか・・・
リリース版でしばらく様子見て不具合がなければオンでもいいのではないでしょうか?

おっしゃる通りですね。しばらく待って不具合報告が無ければデフォルト値をオンにするPRを作成します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ■機能追加
Projects
None yet
Development

No branches or pull requests

3 participants