Feature #6626

Readline.delete_text

Added by Nobuyoshi Nakada almost 2 years ago. Updated 9 months ago.

[ruby-dev:45789]
Status:Closed
Priority:Normal
Assignee:Kouji Takao
Category:ext
Target version:next minor

Description

=begin
[Feature #5785]でinserttextなどが追加されましたが、linebufferを編集するためにはdelete_textも必要ではないでしょうか。

現状ではlinebufferから文字を削除するためには、testreadline.rbでやっているように、かなり周りくどい上にキーバインディングに依存する処理が必要になります。

パッチは(())です。

--- Readline.deletetext(start=0[, length]) -> self
startからlength文字を削除する。
lengthが省略された場合は末尾までを削除する。
startも省略された場合はすべてを削除する。
--- Readline.delete
text(start..end) -> self
startからendまでの範囲内の文字を削除する。
=end

0001-string.c-rb_str_subpos.patch Magnifier (1.09 KB) Nobuyoshi Nakada, 06/22/2012 03:20 PM

0002-ext-readline-readline.c-Readline.delete_text.patch Magnifier (4.32 KB) Nobuyoshi Nakada, 06/22/2012 03:20 PM

0003-test-readline-test_readline.rb-use-delete_text.patch Magnifier (1.2 KB) Nobuyoshi Nakada, 06/22/2012 03:20 PM

Associated revisions

Revision 42101
Added by Kouji Takao 9 months ago

  • ext/readline/readline.c (Initreadline): added Readline.deletetext. [Feature #6626]
  • ext/readline/extconf.rb: check for rldeletetext() in Readline library.

    Thanks, Nobuyoshi Nakada, for the patch.

Revision 42146
Added by Yui NARUSE 9 months ago

fix test of r42101 [Feature #6626]

rldeletetext removes characters in linebuffer, but it doesn't move rlpoint.
Therefore it may cause invalid rl_point.

On following case, testinputmetachar causes testinserttext failure.
(testinputmetachar_multibyte) is skipped because of locale)
http://c5664.rubyci.org/~chkbuild/ruby-trunk/log/20130723T133302Z.log.html.gz

History

#1 Updated by Shugo Maeda about 1 year ago

  • Tracker changed from Bug to Feature

#2 Updated by Shugo Maeda about 1 year ago

  • Target version changed from 2.0.0 to next minor

feature requestだと思うのでnext minorにしておきます。

#3 Updated by Kouji Takao 10 months ago

大変遅くなりましたが、これを取り込もうと思って作業しています。

手元の環境(Mac OS X 10.7, GNU Readline 6.2)での動作確認は終わりました。
あと、Mac OSに標準添付されているEditLine(libedit)での動作を確認したらcommitしようかなと思っていたのですが、
このパッチには、string.cで定義されているrbstrsubpos関数を非公開から公開にする修正が含まれています。これを取り込んでもいいものなのか私では判断できませんでした。rbstrsubpos関数と同様の処理をext/readline/readline.cで実装すればrbstrsubpos関数を非公開のままにできると思って、rbstrsubpos関数を見てみましたが、なかなか長い処理なのですね...

すみませんが、どなたかrbstrsubpos関数を非公開から公開に変更してもよいかどうか判断していただけないでしょうか?
修正したい理由は、Readlineモジュールに対して本チケットで提案されている機能を実現するために、Readlineモジュールからrbstrsubpos関数を利用したいためです。利用できない場合は、rbstrsubpos関数と同様の処理をReadlineモジュールにも実装することになり、コードの重複がうまれ、メンテナンス性が悪くなると考えています。

#4 Updated by Kouji Takao 9 months ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r42101.
Nobuyoshi, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • ext/readline/readline.c (Initreadline): added Readline.deletetext. [Feature #6626]
  • ext/readline/extconf.rb: check for rldeletetext() in Readline library.

    Thanks, Nobuyoshi Nakada, for the patch.

Also available in: Atom PDF