表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
5/5

オートインデントの実装に対する考察

 どうも、小説が書けないのでソースコードを書いていた変態です。


 マイルストーンとしてオートインデントの機能を実装できたので書いておきます。

 

 なおこの文章はPythonを前提にしています。

 

 まず「インデント」って何? という話かもしれないですね。

 

 インデントとは字下げのことです、平たく言えば行頭に入れる空白です。

 

 本来であればプログラムのソースコードを読みやすくしたり一部言語ではそれ自体が意味を持っていますが小説にもあると便利だったりします。

 

 段落ごとに行頭に空白を入れるのって億劫じゃないですか? 面倒ですよね!

 

 そこで改行をすると自動で空白を一つ入れてくれると便利だなーと思いました。

 

 思ったは良いが実装は酷いものです、まずKeyPressイベントでキーが押されたときに空白を挿入するという素朴な実装を試しました。

 

 残念ですがコレは失敗、エンターを押すより早く押された時点で空白が先に挿入されるため行末に空白が追加されてしまいました。

 

 しかしめげずにじゃあもうちょっと遅らせてエンターが押された後に空白を入れればいいんじゃないかと感エタのが第二実装です。

 

 こちらではKeyReleaseイベントが起きたら空白を挿入する実装にしました。

 

 この試みは「半分」成功しました。確かに改行後に空白は入ります、しかしこれは日本語を書くためのエディタです。

 この安直な実装はキーが離されたときに空白を入れますがIMEでの候補決定時にもエンターが押されたと判断して変換のたびに空白が意図せず入ってしまいました。

 

 日本語の面倒くささと、なぜローカライズが後回しにされることが多いのか少し分かりました。

 

 結局この問題はあまり美しくない、所謂「ダーティーなハック」で対処しました。

 

 解決法の鍵はKeyPressのイベントは漢字変換の確定時には発動しないと言う特性を利用しました。

 

 ソースコードを貼ると怒られそうなのでざっくりと解決法を書くと

 

1.KeyPressで変換ではなく改行ならフラグnewlineを立てる

2.KeyReleaseでエンターが離されたのを検知

2.もしnewlineフラグが立っていればそれは改行なので空白を挿入

3.newlineフラグをおろす


 ざっくりこんな感じで力業の極みでした。

 もちろんあまり賢い解決法ではないので改行後エンターから指が離れるわずかなラグを感じます。

 

 吸いませんコレが限界でした。

 

 世の中のできる人はもっと良いやり方をするんでしょうが私には無理でした。

 

 で、このオートインデント機能ですが……割と便利です。

 

 なろうやカクヨム……というかWEB小説を書くなら昔の文豪のようにミッチリ詰めた文章ではないので改行を多用します。

 

 そのたびに行頭に空白を入れるのが地味に手間なのでこの機能を実装したんですね。

 

 と、まあコレが開発裏話でした。

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ