-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
gh-112105: Make completer delims work on libedit #112106
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
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
Misc/NEWS.d/next/Library/2023-11-15-04-53-37.gh-issue-112105.I3RcVN.rst
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Make :func:`readline.set_completer_delims` work with libedit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -576,6 +576,13 @@ readline_set_completer_delims(PyObject *module, PyObject *string) | |
if (break_chars) { | ||
free(completer_word_break_characters); | ||
completer_word_break_characters = break_chars; | ||
#ifdef WITH_EDITLINE | ||
rl_basic_word_break_characters = break_chars; | ||
#else | ||
if (using_libedit_emulation) { | ||
rl_basic_word_break_characters = break_chars; | ||
} | ||
#endif | ||
rl_completer_word_break_characters = break_chars; | ||
Py_RETURN_NONE; | ||
} | ||
|
@@ -1267,6 +1274,15 @@ setup_readline(readlinestate *mod_state) | |
completer_word_break_characters = | ||
strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); | ||
/* All nonalphanums except '.' */ | ||
#ifdef WITH_EDITLINE | ||
// libedit uses rl_basic_word_break_characters instead of | ||
// rl_completer_word_break_characters as complete delimiter | ||
rl_basic_word_break_characters = completer_word_break_characters; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
#else | ||
if (using_libedit_emulation) { | ||
rl_basic_word_break_characters = completer_word_break_characters; | ||
} | ||
#endif | ||
rl_completer_word_break_characters = completer_word_break_characters; | ||
|
||
mod_state->begidx = PyLong_FromLong(0L); | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay so it's kinds of implementation detail.
Since we enable the flag for libedit in following way.
cpython/configure.ac
Line 5916 in 2e632fa
What about changing the code for the libedit implementation only?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From the comments in the file:
It seems like we are not able to detect if
libedit
is used at compile time. I doubt if the macro protection would actually work in all cases.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do our official binaries build with libedit ever?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure when the comment was added.
But we can detect editline at build-time from Python 3.10
https://docs.python.org/3/using/configure.html?highlight=with_editline#cmdoption-with-readline
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#24189
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Even if our official build does not use it, we should consider downstream distros :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's actually not what I meant. What I meant is - we could have been using
libedit
withoutWITH_EDITLINE
. So even if we do not defineWITH_EDITLINE
, we could still be usinglibedit
. I just confirmed on my mac that this change will break the test.The reason I quoted that comment was that I believed such case exists - where we don't know if
libedit
is being used at compile time.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, then should we consider using both
using_libedit_emulation
andWITH_EDITLINE
?If you think that we don't have to consider side effect from the implementation detail, then we can just add a comment why we do this.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I checked that following suggestion pass the test on my macOS.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry I did not use your suggestion directly. I do like the brackets for the if statement. I applied the protection to avoid side effects for GNU readline on both cases.