classification
Title: readline fails to parse some forms of .editrc under editline (libedit) emulation on Mac OS X
Type: behavior Stage: resolved
Components: macOS Versions: Python 3.8, Python 3.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: ronaldoussoren Nosy List: berker.peksag, eric.araujo, ned.deily, r.david.murray, ronaldoussoren, zvezdan
Priority: normal Keywords: needs review, patch

Created on 2011-12-19 04:05 by zvezdan, last changed 2018-05-17 07:33 by ned.deily. This issue is now closed.

Files
File name Uploaded Description Edit
readline-2.7.patch zvezdan, 2011-12-19 04:05 readline.c patch for python-2.7 review
readline-3.2.patch zvezdan, 2011-12-19 04:07 readline.c patch for python-3.2 review
Pull Requests
URL Status Linked Edit
PR 6915 merged python-dev, 2018-05-16 18:14
PR 6928 merged miss-islington, 2018-05-17 06:45
Messages (10)
msg149813 - (view) Author: Zvezdan Petkovic (zvezdan) * Date: 2011-12-19 04:05
Problem
=======

The changes in r87356 for py3k and r87358 for python-2.7 described in issue 9907 have broken parsing of the initialization file .editrc under editline emulation of readline on Mac OS X.

Background
==========

Both readline and editline allow settings customized per program.
For example, .inputrc file for readline::

    $if Python
        set editing-mode vi
    $endif

will be applied only to Python processes.

Similarly, .editrc file for editline::

    python:bind -v
    python:bind ^I rl_complete

will be applied only to Python processes on Mac OS X.

This works fine on python-2.6.

It's broken on 2.7 and 3.2 and later because the change in issue 9907 moved the rl_initialize() call towards the beginning of the setup function.

Solution
========

The rl_readline_name variable must be set to "python" **before** the call to rl_initialize().  Attached are patches for 2.7 and 3.2.
msg150945 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-01-09 16:09
Thanks for the analysis and patch.  Have you tested that your patch does not break the readline module when linking against GNU readline?  If not, I can do it.
msg150957 - (view) Author: Zvezdan Petkovic (zvezdan) * Date: 2012-01-09 17:39
I did not test against a readline build.
msg151133 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-01-12 16:04
I applied your patch and built the readline module against libreadline and imported it successfully.  (I did not try the special parsing feature, but I don’t think it’s needed.)
msg193093 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2013-07-15 12:38
I can confirm the problem and that the patch fixes the issue.

I'll try to commit a fix later this week.
msg219561 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2014-06-02 09:36
It appears that Apple's update to editline in OS X 10.9 Mavericks has also broken this patch; with refreshing, it still works with the system editline in 10.8. So, like the fix for Issue18458, we need to make sure that the fix works with either version of a dynamically loaded libedit.

Zvezdan, it would be good if you would be willing to sign the Python contributor agreement for your patch:  https://www.python.org/psf/contrib/contrib-form/
msg219735 - (view) Author: Zvezdan Petkovic (zvezdan) * Date: 2014-06-04 00:31
Ned,

I just signed the contributor agreement form.
msg316885 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2018-05-17 06:45
New changeset c2f082e9d164acfa8f96de9526f0f47ae92c426a by Ned Deily (Zvezdan Petkovic) in branch 'master':
bpo-13631: Fix the order of initialization for readline libedit on macOS. (GH-6915)
https://github.com/python/cpython/commit/c2f082e9d164acfa8f96de9526f0f47ae92c426a
msg316894 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2018-05-17 07:27
New changeset d504108a88bd14a560dec875df682f4e581490e5 by Ned Deily (Miss Islington (bot)) in branch '3.7':
bpo-13631: Fix the order of initialization for readline libedit on macOS. (GH-6915) (GH-6928)
https://github.com/python/cpython/commit/d504108a88bd14a560dec875df682f4e581490e5
msg316895 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2018-05-17 07:33
Thanks for the patch and PR, Zvezdan!  Merged for 3.7.0 and 3.8.0.
History
Date User Action Args
2018-05-17 07:33:38ned.deilysetstatus: open -> closed
versions: + Python 3.8, - Python 2.7, Python 3.5, Python 3.6
messages: + msg316895

resolution: fixed
stage: patch review -> resolved
2018-05-17 07:27:35ned.deilysetmessages: + msg316894
2018-05-17 06:45:25miss-islingtonsetpull_requests: + pull_request6599
2018-05-17 06:45:12ned.deilysetmessages: + msg316885
2018-05-16 18:14:36python-devsetpull_requests: + pull_request6583
2016-10-05 09:39:23berker.peksagsetnosy: + berker.peksag

versions: + Python 3.6, Python 3.7, - Python 3.4
2014-06-04 00:31:30zvezdansetmessages: + msg219735
2014-06-02 09:36:40ned.deilysetstage: commit review -> patch review
messages: + msg219561
versions: + Python 3.5, - Python 3.3
2013-07-15 12:38:35ronaldoussorensetmessages: + msg193093
versions: + Python 3.4, - Python 3.2
2012-01-12 16:04:48eric.araujosetmessages: + msg151133
2012-01-09 17:39:03zvezdansetmessages: + msg150957
2012-01-09 16:09:09eric.araujosetnosy: + eric.araujo, r.david.murray
messages: + msg150945

keywords: + needs review
stage: commit review
2011-12-19 08:07:34ned.deilysetnosy: + ned.deily
2011-12-19 04:07:23zvezdansetfiles: + readline-3.2.patch
2011-12-19 04:05:36zvezdancreate