Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python35/lib64/python3.5/idlelib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python35/lib64/python3.5/idlelib/AutoExpand.py
'''Complete the current word before the cursor with words in the editor.

Each menu selection or shortcut key selection replaces the word with a
different word with the same prefix. The search for matches begins
before the target and moves toward the top of the editor. It then starts
after the cursor and moves down. It then returns to the original word and
the cycle starts again.

Changing the current text line or leaving the cursor in a different
place before requesting the next selection causes AutoExpand to reset
its state.

This is an extension file and there is only one instance of AutoExpand.
'''
import string
import re

###$ event <<expand-word>>
###$ win <Alt-slash>
###$ unix <Alt-slash>

class AutoExpand:

    menudefs = [
        ('edit', [
            ('E_xpand Word', '<<expand-word>>'),
         ]),
    ]

    wordchars = string.ascii_letters + string.digits + "_"

    def __init__(self, editwin):
        self.text = editwin.text
        self.state = None

    def expand_word_event(self, event):
        "Replace the current word with the next expansion."
        curinsert = self.text.index("insert")
        curline = self.text.get("insert linestart", "insert lineend")
        if not self.state:
            words = self.getwords()
            index = 0
        else:
            words, index, insert, line = self.state
            if insert != curinsert or line != curline:
                words = self.getwords()
                index = 0
        if not words:
            self.text.bell()
            return "break"
        word = self.getprevword()
        self.text.delete("insert - %d chars" % len(word), "insert")
        newword = words[index]
        index = (index + 1) % len(words)
        if index == 0:
            self.text.bell()            # Warn we cycled around
        self.text.insert("insert", newword)
        curinsert = self.text.index("insert")
        curline = self.text.get("insert linestart", "insert lineend")
        self.state = words, index, curinsert, curline
        return "break"

    def getwords(self):
        "Return a list of words that match the prefix before the cursor."
        word = self.getprevword()
        if not word:
            return []
        before = self.text.get("1.0", "insert wordstart")
        wbefore = re.findall(r"\b" + word + r"\w+\b", before)
        del before
        after = self.text.get("insert wordend", "end")
        wafter = re.findall(r"\b" + word + r"\w+\b", after)
        del after
        if not wbefore and not wafter:
            return []
        words = []
        dict = {}
        # search backwards through words before
        wbefore.reverse()
        for w in wbefore:
            if dict.get(w):
                continue
            words.append(w)
            dict[w] = w
        # search onwards through words after
        for w in wafter:
            if dict.get(w):
                continue
            words.append(w)
            dict[w] = w
        words.append(word)
        return words

    def getprevword(self):
        "Return the word prefix before the cursor."
        line = self.text.get("insert linestart", "insert")
        i = len(line)
        while i > 0 and line[i-1] in self.wordchars:
            i = i-1
        return line[i:]

if __name__ == '__main__':
    import unittest
    unittest.main('idlelib.idle_test.test_autoexpand', verbosity=2)
Name
Size
Permissions
Options
Icons
--
drwxr-xr-x
__pycache__
--
drwxr-xr-x
idle_test
--
drwxr-xr-x
AutoComplete.py
8.985 KB
-rw-r--r--
AutoCompleteWindow.py
17.323 KB
-rw-r--r--
AutoExpand.py
3.315 KB
-rw-r--r--
Bindings.py
3.038 KB
-rw-r--r--
CREDITS.txt
1.822 KB
-rw-r--r--
CallTipWindow.py
5.894 KB
-rw-r--r--
CallTips.py
5.793 KB
-rw-r--r--
ChangeLog
55.066 KB
-rw-r--r--
ClassBrowser.py
6.835 KB
-rw-r--r--
CodeContext.py
8.161 KB
-rw-r--r--
ColorDelegator.py
10.35 KB
-rw-r--r--
Debugger.py
18.318 KB
-rw-r--r--
Delegator.py
1.019 KB
-rw-r--r--
EditorWindow.py
64.058 KB
-rw-r--r--
FileList.py
3.724 KB
-rw-r--r--
FormatParagraph.py
7.116 KB
-rw-r--r--
GrepDialog.py
5.004 KB
-rw-r--r--
HISTORY.txt
10.07 KB
-rw-r--r--
HyperParser.py
12.575 KB
-rw-r--r--
IOBinding.py
20.116 KB
-rw-r--r--
IdleHistory.py
3.957 KB
-rw-r--r--
MultiCall.py
18.136 KB
-rw-r--r--
MultiStatusBar.py
1.316 KB
-rw-r--r--
NEWS.txt
15.172 KB
-rw-r--r--
NEWS2x.txt
26.535 KB
-rw-r--r--
ObjectBrowser.py
3.882 KB
-rw-r--r--
OutputWindow.py
4.291 KB
-rw-r--r--
ParenMatch.py
6.557 KB
-rw-r--r--
PathBrowser.py
3.132 KB
-rw-r--r--
Percolator.py
3.104 KB
-rw-r--r--
PyParse.py
19.981 KB
-rw-r--r--
PyShell.py
57.467 KB
-rwxr-xr-x
README.txt
7.706 KB
-rw-r--r--
RemoteDebugger.py
11.726 KB
-rw-r--r--
RemoteObjectBrowser.py
0.941 KB
-rw-r--r--
ReplaceDialog.py
7.306 KB
-rw-r--r--
RstripExtension.py
1.025 KB
-rw-r--r--
ScriptBinding.py
7.872 KB
-rw-r--r--
ScrolledList.py
4.272 KB
-rw-r--r--
SearchDialog.py
3.054 KB
-rw-r--r--
SearchDialogBase.py
6.845 KB
-rw-r--r--
SearchEngine.py
7.31 KB
-rw-r--r--
StackViewer.py
4.322 KB
-rw-r--r--
TODO.txt
8.279 KB
-rw-r--r--
ToolTip.py
3.099 KB
-rw-r--r--
TreeWidget.py
14.672 KB
-rw-r--r--
UndoDelegator.py
10.723 KB
-rw-r--r--
WidgetRedirector.py
6.776 KB
-rw-r--r--
WindowList.py
2.414 KB
-rw-r--r--
ZoomHeight.py
1.27 KB
-rw-r--r--
__init__.py
0.327 KB
-rw-r--r--
__main__.py
0.155 KB
-rw-r--r--
aboutDialog.py
6.823 KB
-rw-r--r--
config-extensions.def
2.896 KB
-rw-r--r--
config-highlight.def
2.456 KB
-rw-r--r--
config-keys.def
7.595 KB
-rw-r--r--
config-main.def
2.503 KB
-rw-r--r--
configDialog.py
63.536 KB
-rw-r--r--
configHandler.py
31.69 KB
-rw-r--r--
configHelpSourceEdit.py
6.657 KB
-rw-r--r--
configSectionNameDialog.py
3.913 KB
-rw-r--r--
dynOptionMenuWidget.py
1.943 KB
-rw-r--r--
extend.txt
3.557 KB
-rw-r--r--
help.html
42.394 KB
-rw-r--r--
help.py
10.695 KB
-rw-r--r--
help.txt
17.48 KB
-rw-r--r--
idle.py
0.442 KB
-rw-r--r--
idle.pyw
0.557 KB
-rw-r--r--
idlever.py
0.405 KB
-rw-r--r--
keybindingDialog.py
12.125 KB
-rw-r--r--
macosxSupport.py
8.48 KB
-rw-r--r--
rpc.py
20.297 KB
-rw-r--r--
run.py
13.544 KB
-rw-r--r--
tabbedpages.py
17.986 KB
-rw-r--r--
textView.py
3.339 KB
-rw-r--r--