classification
Title: Idle: updata fixwordbreaks() for unicode identifiers
Type: enhancement Stage: needs patch
Components: IDLE Versions: Python 3.7, Python 3.6
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: terry.reedy Nosy List: serhiy.storchaka, terry.reedy
Priority: normal Keywords: easy

Created on 2014-05-12 01:27 by terry.reedy, last changed 2017-06-19 23:36 by terry.reedy.

Messages (4)
msg218307 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2014-05-12 01:27
EditorWindow.py has this function, applied to editor and shell windows, which is obsolete for Python3 and unicode identifiers.

def fixwordbreaks(root):
    # Make sure that Tk's double-click and next/previous word
    # operations use our definition of a word (i.e. an identifier)
    tk = root.tk
    tk.call('tcl_wordBreakAfter', 'a b', 0) # make sure word.tcl is loaded
    tk.call('set', 'tcl_wordchars', '[a-zA-Z0-9_]')
    tk.call('set', 'tcl_nonwordchars', '[^a-zA-Z0-9_]')

Double clicking selects a contiguous sequence of 'word' or 
'nonword' characters.
"Control-backspace deletes word left, Control-DEL deletes word right."
"Control-left/right Arrow moves by words in a strange but useful way."

It might be more useful if the REs were expanded.
msg218316 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-05-12 07:03
I think it is enough to get rid of this function.
msg218980 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2014-05-23 17:35
Deleting the function and calls to it would be easy. But my memory, which could be off, is that I left fixwordbreaks(root) in the test function now called _editor_window (at the end of the file) because the test did not work right without it. I willhave to recheck.

Beyond that, my first experiments were aimed at discovering the functions affected and therefor what would have to be tested with any changes.

To properly test this requires simulating keystrokes, like control-backspace, as opposed to inserting characters. Are there any tk/tkinter tests that do this, that I could use as a model?
msg218992 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-05-23 19:33
word.tcl in Tcl library contains following lines:

if {$::tcl_platform(platform) eq "windows"} {
    # Windows style - any but a unicode space char
    set ::tcl_wordchars {\S}
    set ::tcl_nonwordchars {\s}
} else {
    # Motif style - any unicode word char (number, letter, or underscore)
    set ::tcl_wordchars {\w}
    set ::tcl_nonwordchars {\W}
}

So by default all works as expected in Motif style, but not in Windows style.

If you want to have same behavior in both styles, defines word chars as:

    tk.call('set', 'tcl_wordchars', r'\w')
    tk.call('set', 'tcl_nonwordchars', r'\W')

GUI tests are not needed, it is enough to test relevant Tcl commands: tcl_wordBreakAfter, tcl_wordBreakBefore, tcl_endOfWord, tcl_startOfNextWord, and tcl_startOfPreviousWord or TextSelectTo. It's interesting, there are no tests for these functions in Tcl test suite.
History
Date User Action Args
2017-06-19 23:36:44terry.reedysetassignee: terry.reedy
components: + IDLE
versions: + Python 3.6, Python 3.7, - Python 3.4, Python 3.5
2014-05-23 19:33:22serhiy.storchakasetmessages: + msg218992
2014-05-23 17:35:51terry.reedysetmessages: + msg218980
2014-05-23 15:47:08serhiy.storchakasetkeywords: + easy
stage: test needed -> needs patch
2014-05-12 07:03:04serhiy.storchakasetmessages: + msg218316
2014-05-12 01:27:43terry.reedycreate