Some of the things I, Ray St. Marie changed in the excellent pydocs.py by Ka-Ping Yee that came with Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32 to get it to work as intended. And though this is the most basic of hacks - I just couldn't be more proud that I was able to find the problem and debug it myself. :) It was also written directly to the above mentioned gentlemen with the intention that he could do the least amount of work nessecary to impliment the changes until he has the time to do so in his own distributions. First, to enable the IDLE interpreter's online "help()" be sure that your autoexec.bat file has the PYTHONDOCS environment variable set to the proper file. My original installation of the IDLE interpreter was able to find the file with out the environment variable, but when I added the excelent Pythonwin - (Pythonwin - Python IDE and GUI Framework for Windows. Copyright 1994-2001 Mark Hammond (mhammond@skippinet.com.au)) to my machine, I could not get the "help()" in Pythonwin's IDLE to find the intended files. On my machine the line I added to the autoexec.bat is "set pythondocs=c:\python22\doc" to get pydoc.py to read the path to html document files. The links to certain python docs are in the document server link dictionary called "class Helper" about line 1377 to 1490' of pydoc.py . The corrected section of code is below. You should be able to cut and paste the code right over the original code and save the file to fix all your links. The individual changes I made follow the code. clip here______________________________________________________________ class Helper: keywords = { 'and': 'BOOLEAN', 'assert': ('ref/assert', ''), 'break': ('ref/break', 'while for'), 'class': ('ref/class', 'CLASSES SPECIALMETHODS'), 'continue': ('ref/continue', 'while for'), 'def': ('ref/function', ''), 'del': ('ref/del', 'BASICMETHODS'), 'elif': 'if', 'else': ('ref/if', 'while for'), 'except': 'try', 'exec': ('ref/exec', ''), 'finally': 'try', 'for': ('ref/for', 'break continue while'), 'from': 'import', 'global': ('ref/global', 'NAMESPACES'), 'if': ('ref/if', 'TRUTHVALUE'), 'import': ('ref/import', 'MODULES'), 'in': ('ref/comparisons', 'SEQUENCEMETHODS2'), 'is': 'COMPARISON', 'lambda': ('ref/lambdas', 'FUNCTIONS'), 'not': 'BOOLEAN', 'or': 'BOOLEAN', 'pass': 'PASS', 'print': ('ref/print', ''), 'raise': ('ref/raise', 'EXCEPTIONS'), 'return': ('ref/return', 'FUNCTIONS'), 'try': ('ref/try', 'EXCEPTIONS'), 'while': ('ref/while', 'break continue if TRUTHVALUE'), 'yield':('ref/yield',''), } topics = { 'TYPES': ('ref/types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS FUNCTIONS CLASSES MODULES FILES inspect'), 'STRINGS': ('ref/strings', 'str UNICODE SEQUENCES STRINGMETHODS FORMATTING TYPES'), 'STRINGMETHODS': ('lib/string-methods', 'STRINGS FORMATTING'), 'FORMATTING': ('lib/typesseq-strings', 'OPERATORS'), 'UNICODE': ('ref/types', 'encodings TYPES STRING'), 'NUMBERS': ('ref/numbers', 'INTEGER FLOAT COMPLEX TYPES'), 'INTEGER': ('ref/integers', 'int range'), 'FLOAT': ('ref/floating', 'float math'), 'COMPLEX': ('ref/imaginary', 'complex cmath'), 'SEQUENCES': ('lib/typesseq', 'STRINGMETHODS FORMATTING xrange LISTS'), 'MAPPINGS': 'DICTIONARIES', 'FUNCTIONS': ('lib/typesfunctions', 'def TYPES'), 'METHODS': ('lib/typesmethods', 'class def CLASSES TYPES'), 'CODEOBJECTS': ('lib/bltin-code-objects', 'compile FUNCTIONS TYPES'), 'TYPEOBJECTS': ('lib/bltin-type-objects', 'types TYPES'), 'FRAMEOBJECTS': 'TYPES', 'TRACEBACKS': 'TYPES', 'NONE': ('lib/bltin-null-object', ''), 'ELLIPSIS': ('lib/bltin-ellipsis-object', 'SLICINGS'), 'FILES': ('lib/bltin-file-objects', ''), 'SPECIALATTRIBUTES': ('lib/specialattrs', ''), 'CLASSES': ('ref/types', 'class SPECIALMETHODS PRIVATENAMES'), 'MODULES': ('lib/typesmodules', 'import'), 'PACKAGES': 'import', 'EXPRESSIONS': ('ref/summary', 'lambda or and not in is BOOLEAN COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES LISTS DICTIONARIES BACKQUOTES'), 'OPERATORS': 'EXPRESSIONS', 'PRECEDENCE': 'EXPRESSIONS', 'OBJECTS': ('ref/objects', 'TYPES'), 'SPECIALMETHODS': ('ref/specialnames', 'BASICMETHODS ATTRIBUTEMETHODS CALLABLEMETHODS SEQUENCEMETHODS1 MAPPINGMETHODS SEQUENCEMETHODS2 NUMBERMETHODS CLASSES'), 'BASICMETHODS': ('ref/customization', 'cmp hash repr str SPECIALMETHODS'), 'ATTRIBUTEMETHODS': ('ref/attribute-access', 'ATTRIBUTES SPECIALMETHODS'), 'CALLABLEMETHODS': ('ref/callable-types', 'CALLS SPECIALMETHODS'), 'SEQUENCEMETHODS1': ('ref/sequence-types', 'SEQUENCES SEQUENCEMETHODS2 SPECIALMETHODS'), 'SEQUENCEMETHODS2': ('ref/sequence-methods', 'SEQUENCES SEQUENCEMETHODS1 SPECIALMETHODS'), 'MAPPINGMETHODS': ('ref/sequence-types', 'MAPPINGS SPECIALMETHODS'), 'NUMBERMETHODS': ('ref/numeric-types', 'NUMBERS AUGMENTEDASSIGNMENT SPECIALMETHODS'), 'EXECUTION': ('ref/execmodel', 'NAMING EXCEPTIONS'), 'NAMING': ('ref/naming','EXECUTION DYNAMICFEATURES'), 'DYNAMICFEATURES': ('ref/node41',''), 'NAMESPACES': ('ref/naming', 'global ASSIGNMENT DELETION DYNAMICFEATURES'), 'SCOPING': 'NAMESPACES', 'FRAMES': 'NAMESPACES', 'EXCEPTIONS': ('ref/exceptions', 'try except finally raise'), 'COERCIONS': ('ref/coercion-rules',''), 'CONVERSIONS': ('ref/conversions', 'COERCIONS'), 'IDENTIFIERS': ('ref/identifiers', 'keywords SPECIALIDENTIFIERS'), 'SPECIALIDENTIFIERS': ('ref/id-classes', ''), 'PRIVATENAMES': ('ref/atom-identifiers', ''), 'LITERALS': ('ref/atom-literals', 'STRINGS BACKQUOTES NUMBERS TUPLELITERALS LISTLITERALS DICTIONARYLITERALS'), 'TUPLES': 'SEQUENCES', 'TUPLELITERALS': ('ref/exprlists', 'TUPLES LITERALS'), 'LISTS': ('lib/typesseq-mutable', 'LISTLITERALS'), 'LISTLITERALS': ('ref/lists', 'LISTS LITERALS'), 'DICTIONARIES': ('lib/typesmapping', 'DICTIONARYLITERALS'), 'DICTIONARYLITERALS': ('ref/dict', 'DICTIONARIES LITERALS'), 'BACKQUOTES': ('ref/string-conversions', 'repr str STRINGS LITERALS'), 'ATTRIBUTES': ('ref/attribute-references', 'getattr hasattr setattr ATTRIBUTEMETHODS'), 'SUBSCRIPTS': ('ref/subscriptions', 'SEQUENCEMETHODS1'), 'SLICINGS': ('ref/slicings', 'SEQUENCEMETHODS2'), 'CALLS': ('ref/calls', 'EXPRESSIONS'), 'POWER': ('ref/power', 'EXPRESSIONS'), 'UNARY': ('ref/unary', 'EXPRESSIONS'), 'BINARY': ('ref/binary', 'EXPRESSIONS'), 'SHIFTING': ('ref/shifting', 'EXPRESSIONS'), 'BITWISE': ('ref/bitwise', 'EXPRESSIONS'), 'COMPARISON': ('ref/comparisons', 'EXPRESSIONS BASICMETHODS'), 'BOOLEAN': ('ref/booleans', 'EXPRESSIONS TRUTHVALUE'), 'ASSERTION': 'assert', 'ASSIGNMENT': ('ref/assignment', 'AUGMENTEDASSIGNMENT'), 'AUGMENTEDASSIGNMENT': ('ref/augassign', 'NUMBERMETHODS'), 'DELETION': 'del', 'PRINTING': 'print', 'RETURNING': 'return', 'IMPORTING': 'import', 'CONDITIONAL': 'if', 'LOOPING': ('ref/compound', 'if for while break continue'), 'TRUTHVALUE': ('lib/truth', 'if while and or not BASICMETHODS'), 'DEBUGGING': ('lib/module-pdb', 'pdb'), 'PASS': ('ref/pass',''), } end clip_________________________________________________________________ changes to keywords: 'lambda': ('ref/lambdas', 'FUNCTIONS') add s to ref/lambda to make ref/lambdas because thats the name of the html page 'yield': ('ref/yield',''), this is a new keyword and prob'ly not in the original pydoc.py changes to topics: 'BOOLEAN': ('ref/booleans', 'EXPRESSIONS TRUTHVALUE'), change BOOLEAN take the 'lambda' referance out and put in 'booleans' this fixes all the BOOLEAN links found in keywords including "and, not, or" so that they will call the Boolean page and not lambda add: 'PASS': ('ref/pass',''), to facilitate the possible reason for Ka-Ping to make the original referance to pass in keywords to be linked to topics. He may have had a reason for putting it there and it works either way. change: COERCIONS CONVERSIONS to ref/coercion-rules 'COERCIONS': ('ref/coercion-rules',''), add: a link to COERCIONS in 'CONVERSIONS': ('ref/conversions', 'COERCIONS'), to reflect the reference in the text add references to the following 'EXECUTION': ('ref/execmodel', 'NAMING EXCEPTIONS') take out execframe put in execmodel and add refs 'NAMING': ('ref/naming','EXECUTION DYNAMICFEATURES'), 'DYNAMICFEATURES': ('ref/node41',''), add: 'LOOPING': ('ref/compound', 'if for while break continue'), added if to fit with text change: 'NAMESPACES': ('ref/naming', 'global ASSIGNMENT DELETION DYNAMICFEATURES'), this fixed FRAMES and SCOPING and reflects the text with dynamic freatures change: 'UNICODE': ('ref/types', 'encodings TYPES STRING'), As an aside: Can't the document server be programmed to serve the topics and keywords from all the documentation in the python manuals for that matter. I bet it's a matter of "Does someone want to do it?". Has anyone else noticed that ref\node41.html is ruffly the same page as ref\dynamic-features.html ;) This fix-hack was written by a 40 year old, self taught, extreeeemly novice programmer - which speaks to the brilliance of "THE" language for beginners - Python by Guido Van Rossum - and done in a way that any beginner could impliment the changes on their own machines right away and not have to wait for the next version of Python.