Skip to content

IDLE - pasting text doesn't delete selection #49374

Closed

Description

@weeble
mannequin
BPO 5124
Nosy @terryjreedy, @ned-deily, @serwy, @bitdancer, @rovitotv, @serhiy-storchaka
Files
  • issue5124.patch
  • idle_paste_replace.patch
  • x11-paste.diff
  • x11-paste-36.diff
  • x11-paste-35.diff
  • x11-paste-27.diff
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/terryjreedy'
    closed_at = <Date 2016-06-11.23:42:59.539>
    created_at = <Date 2009-02-01.18:52:13.458>
    labels = ['expert-IDLE', 'type-feature']
    title = "IDLE - pasting text doesn't delete selection"
    updated_at = <Date 2016-06-12.04:37:15.907>
    user = 'https://bugs.python.org/weeble'

    bugs.python.org fields:

    activity = <Date 2016-06-12.04:37:15.907>
    actor = 'serhiy.storchaka'
    assignee = 'terry.reedy'
    closed = True
    closed_date = <Date 2016-06-11.23:42:59.539>
    closer = 'terry.reedy'
    components = ['IDLE']
    creation = <Date 2009-02-01.18:52:13.458>
    creator = 'weeble'
    dependencies = []
    files = ['30385', '43195', '43303', '43323', '43324', '43325']
    hgrepos = []
    issue_num = 5124
    keywords = ['patch']
    message_count = 40.0
    messages = ['80914', '80915', '91166', '190061', '190063', '190066', '190097', '190117', '190120', '190124', '190128', '192676', '267126', '267128', '267136', '267155', '267161', '267252', '267535', '267578', '267586', '267597', '267683', '267796', '267797', '268064', '268082', '268086', '268179', '268182', '268189', '268191', '268200', '268204', '268260', '268265', '268266', '268296', '268319', '268320']
    nosy_count = 11.0
    nosy_names = ['terry.reedy', 'gpolo', 'ned.deily', 'roger.serwy', 'weeble', 'r.david.murray', 'Todd.Rovito', 'Mark.Young', 'python-dev', 'serhiy.storchaka', 'Guilherme.Sim\xc3\xb5es']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue5124'
    versions = ['Python 2.7', 'Python 3.5', 'Python 3.6']

    Activity

    1. weeble commented on Feb 1, 2009

      weeblemannequin
      MannequinAuthor

      Steps to reproduce:

      1. Start IDLE.
      2. Enter some text:

      spam
      eggs

      1. Select the first line ("spam") and press control+c to copy.
      2. Select the second line ("eggs") and press control+v to paste.

      Expected result:

      spam
      spam

      (With the caret at the end of the second line and no selection.)

      Actual result (IDLE 2.6, Tk/Tcl 8.4, Linux):

      spam
      eggsspam

      (With "eggs" selected and the caret at the end of the second line.)

      I don't think this happens to me on Windows. It might be deliberate; I
      know that Tk has slightly different behaviour on Windows and Linux. But
      it doesn't seem to be consistent with other behaviour: for example, if
      instead of pasting I start typing, the selected text is erased and the
      typed text replaces it.

      I can look into this myself, but I would appreciate if someone else can
      confirm that this is not the expected behaviour, since perhaps it is
      only my Windows background that leads me to expect this.

    2. gpolo commented on Feb 1, 2009

      gpolomannequin
      Mannequin

      This is not really related to IDLE, it is how the Text widget behaves
      under Linux, you will notice the same with tcl/tk 8.5.

      Nevertheless, I would prefer to have the same results under Windows and
      Linux.

    3. gpolo commented on Aug 1, 2009

      gpolomannequin
      Mannequin

      btw, I just added a patch for bpo-3559 which could be easily adjusted
      to work as described in this issue.

    4. terryjreedy commented on May 26, 2013

      @terryjreedy
      Member

      On Win7, I get the replacement behavior. I get the same in Notepad and Firefox, so this may be standard Windows behavior. What is standard in other linex and mac apps? If the tk difference is a standard platform difference, I might think we should leave it alone.

    5. rovitotv commented on May 26, 2013

      rovitotvmannequin
      Mannequin

      "What is standard in other linex and mac apps?"
      -On Mac OS X 10.8.3 TextEdit I get the replacement behavior
      -On Linux CentOS 6.4 gedit I get the replacement behavior
      -On IDLE under the latest 3.4 pull I get the replacement behavior with Max OS X 10.8.3
      -On IDLE under the latest 3.4 pull I get the eggsspam behavior with Linux CentOS 6.4 as Weeble described in the original bug report

      So from my perspective Linux is behaving differently than Windows and Mac OS X.

    6. ned-deily commented on May 26, 2013

      @ned-deily
      Member

      X11-based Tk follows general X11 practice with regard to text pasting. See http://wiki.tcl.tk/3771 for some background. Old school X11 users expect pasting to work that way. This is yet another instance where Tk attempts to conform to the platform it is running on. I recommend closing this issue as X11 Tk (and, hence, IDLE) has behaved like this forever and changing it would be painful for many current X11 IDLE users.

    7. serwy commented on May 26, 2013

      serwymannequin
      Mannequin

      There are many X11 applications that replace the selection with pasted text. GTK and Qt widgets behave that way. Here's a brief list: gedit (GTK), gummi (GTK), kate (Qt), texmaker (Qt).

      Tkinter, for me, has become increasingly frustrating due to these subtle platform differences. (See bpo-14146, bpo-13582, and many more that deal with Tk on Mac.) For IDLE, I consider these behavior differences bugs.

      The attached patch "fixes" this issue.

    8. GuilhermeSimes commented on May 26, 2013

      GuilhermeSimesmannequin
      Mannequin

      I think IDLE should ignore general X11 practice. I used Linux for years and have never seen this behavior before because almost all programs behave in the Mac/Windows way.

    9. ned-deily commented on May 26, 2013

      @ned-deily
      Member

      Unfortunately, there is no one right answer to paste behavior on X11, unlike on native Windows and Mac implementations where there is essentially system-wide consistent paste behavior enforced by the underlying operating system. As the Tk Wiki points out (and the comments hers concur), different users are going to have different expectations. If we want to make this behavior available with X11 Tk, then it really should be a user configurable option. Without providing an option, the overriding design principle is that the status quo wins a stalemate (http://www.boredomandlaziness.org/2011/02/status-quo-wins-stalemate.html).

    10. terryjreedy commented on May 27, 2013

      @terryjreedy
      Member

      I agree that the paste replace should be added as an option on linux, but without a broader survey of Linux Idle users to convince me otherwise, I have to agree that the default should stay as it is. I do not see any call to make the x11 behavior an option on mac and windows.

    11. added
      type-featureA feature request or enhancement
      and removed
      type-bugAn unexpected behavior, bug, or error
      on May 27, 2013
    12. rovitotv commented on May 27, 2013

      rovitotvmannequin
      Mannequin

      I haver verified Roger's patch does indeed fix the problem on Linux CentOS 6.4 with IDLE 3.4.

      The Linux situation is complex. Basically as I see it over the years pure X11 applications are becoming extinct and most developers either use GTK (for GNOME) or QT (for KDE). I don't blame anybody for moving to one of these toolkits because writing a pure X11 application is painful. In the near future Wayland http://en.wikipedia.org/wiki/Wayland_(display_server_protocol) will take over and I wonder how many X11 applications will actually be ported. I agree with Roger we should try and make IDLE as consistent as possible across operating systems.

      +1 for applying the patch.

    13. 19 remaining items

    14. terryjreedy commented on Jun 11, 2016

      @terryjreedy
      Member

      I had some trouble committing and pushing these patches. After deleting TEntry and committed the 2.7 and 3.5 patches and tried to do the usual 3.5 to default forward merge in TortoiseHG. I got

      % hg merge --tool :merge --verbose 101861
      resolving manifests
      abort: case-folding collision between Lib/idlelib/pyshell.py and Lib/idlelib/PyShell.py
      [command returned code 255 Fri Jun 10 22:33:09 2016]

      This seems to be a known problem. After some effort to resolve the situation, I gave up and used my replaced my repository with a copy of my backup copy, to undo the things I had tried.

      Since the renames on 5/22, I have done other merges without problem, but I rechecked and none involved a file where case was the only difference. I will try again by temporarily renaming pyshell back to PyShell first.

    15. python-dev commented on Jun 11, 2016

      python-devmannequin
      Mannequin

      New changeset 99760b6a181e by Terry Jan Reedy in branch 'default':
      Issue bpo-5124: Temporary pyshell rename to avoid case-folding collision in merge.
      https://hg.python.org/cpython/rev/99760b6a181e

      New changeset 6c469b50e198 by Terry Jan Reedy in branch '2.7':
      Issue bpo-5124: Paste with selection should always replace.
      https://hg.python.org/cpython/rev/6c469b50e198

      New changeset f8b40e0d5913 by Terry Jan Reedy in branch '3.5':
      Issue bpo-5124: Paste with selection should always replace.
      https://hg.python.org/cpython/rev/f8b40e0d5913

    16. python-dev commented on Jun 11, 2016

      python-devmannequin
      Mannequin

      New changeset 095e79636663 by Terry Jan Reedy in branch 'default':
      Issue bpo-5124: rename PyShell back to pyshell and patch test for 3.6
      https://hg.python.org/cpython/rev/095e79636663

    17. python-dev commented on Jun 11, 2016

      python-devmannequin
      Mannequin

      New changeset 3017e41b0c99 by Terry Jan Reedy in branch '2.7':
      Issue bpo-5124: NEWS entries.
      https://hg.python.org/cpython/rev/3017e41b0c99

      New changeset 62b949a179cb by Terry Jan Reedy in branch '3.5':
      Issue bpo-5124: NEWS entries.
      https://hg.python.org/cpython/rev/62b949a179cb

      New changeset 2fc15579606b by Terry Jan Reedy in branch 'default':
      Merge Issue bpo-5124: NEWS entries.
      https://hg.python.org/cpython/rev/2fc15579606b

    18. serhiy-storchaka commented on Jun 11, 2016

      @serhiy-storchaka
      Member
      entry=entry in test is not needed.
    19. ned-deily commented on Jun 11, 2016

      @ned-deily
      Member

      Terry, the 2.7 version of the test changes is causing buildbot and test_idle failures when the "gui" condition is not met. See, for example, http://buildbot.python.org/all/builders/AMD64%20Snow%20Leop%202.7/builds/1400.

    20. python-dev commented on Jun 11, 2016

      python-devmannequin
      Mannequin

      New changeset 274308a3b8b6 by Terry Jan Reedy in branch '2.7':
      Issue bpo-5124: For 2.7, move requires('gui') from module level to setUpClass.
      https://hg.python.org/cpython/rev/274308a3b8b6

    21. terryjreedy commented on Jun 11, 2016

      @terryjreedy
      Member

      Oh right, requires('gui') does not work at module level in 2.7.
      This should fix. Will try to check next round of bot builds.

    22. terryjreedy commented on Jun 11, 2016

      @terryjreedy
      Member

      The two stable buildbots that failed on test_idle before do not now: AMD64 SnowLeapard 1403, AMD64 Win 7 2258.

    23. terryjreedy commented on Jun 12, 2016

      @terryjreedy
      Member

      Serhiy: entry=entry as much as any name=expression pair to print the value of variable entry on test failure, either "entry=<tkinter.Entry object .58910800>)" or "entry=<tkinter.ttk.Entry object .58911024>)", as in

      ======================================================================
      FAIL: test_paste_entry (main.PasteTest) (ans='two', end='end', entry=<tkinter.ttk.Entry object .58911024>)
      Test pasting into an entry with and without a selection.
      ----------------------------------------------------------------------

      Traceback (most recent call last):
        File "F:\Python\dev\36\lib\idlelib\idle_test\test_editmenu.py", line 53, in test_paste_entry
          self.assertTrue(False)
      AssertionError: False is not true
    24. serhiy-storchaka commented on Jun 12, 2016

      @serhiy-storchaka
      Member

      Ah, I looked on 3.5 change and missed that in 3.6 you test both tkinter.Entry and ttk.Entry.

    25. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions