コード例 #1
0
 def onAutocomplete(self, args):
     '''Check if auto complete data can be added and displayed:
     "." after objects: show auto completion list with properties and methods
     "[" after dict: show auto completion list with keys
     "(" after functions: insert template and display a call tip with the doc string.'''
     if args['ch'] == 46 and args['code'] == 2001:  # character "."
         iPos = editor.getCurrentPos()
         autoCompleteList = self.interp.autoCompleteObject(
             self.getUncompleteLine(iPos))
         if autoCompleteList is None: return
         if autoCompleteList:
             editor.autoCSetSeparator(ord('\t'))
             editor.autoCSetIgnoreCase(False)
             editor.autoCSetCaseInsensitiveBehaviour(False)
             editor.autoCSetOrder(2)
             editor.autoCSetDropRestOfWord(True)
             editor.autoCShow(0, autoCompleteList)
     elif args['ch'] == 40 and args['code'] == 2001:  # character "("
         iPos = editor.getCurrentPos()
         r = self.interp.autoCompleteFunction(self.getUncompleteLine(iPos))
         if r is None: return
         n, funcParam, callTip = r
         if callTip:
             editor.callTipShow(max(0, iPos - n), callTip)
             editor.callTipSetHlt(0, max(0, callTip.find('\n')))
             self.activeCalltip = 'doc'
         if funcParam and iPos == editor.getCurrentPos():
             editor.insertText(iPos, funcParam + ')')
             editor.setSelectionStart(iPos)
             editor.setSelectionStart(iPos + len(funcParam) + 1)
             editor.setCurrentPos(iPos)
     elif args['ch'] == 91 and args['code'] == 2001:  # character "["
         iPos = editor.getCurrentPos()
         autoCompleteList = self.interp.autoCompleteDict(
             self.getUncompleteLine(iPos))
         if autoCompleteList:
             editor.autoCSetSeparator(ord('\t'))
             editor.autoCSetIgnoreCase(False)
             editor.autoCSetCaseInsensitiveBehaviour(False)
             editor.autoCSetOrder(0)
             editor.autoCSetDropRestOfWord(True)
             editor.autoCShow(0, autoCompleteList)
コード例 #2
0
 def showCalltip(self, pos=None):
     iStart = editor.getSelectionStart()
     iEnd = editor.getSelectionEnd()
     if pos is None:
         pos = editor.getCurrentPos()
         CT_unselected = True
         CT_expression = True
     else:
         CT_unselected = self.popupForUnselectedVariable
         CT_expression = self.popupForSelectedExpression
     if iEnd != iStart and iStart <= pos <= iEnd:
         if CT_expression and iEnd - iStart > 1:
             expression = editor.getTextRange(iStart, iEnd)
             if expression == 'False':
                 self.activeCalltip = False
                 editor.callTipShow(iStart, 'set to True')
             elif expression == 'True':
                 self.activeCalltip = True
                 editor.callTipShow(iStart, 'set to False')
             elif not '\n' in expression:
                 ret = self.interp.getCallTip(None, expression)
                 if ret and (CT_unselected or ret[-1] != 'value error'):
                     element, nHighlight, calltip = ret
                     self.activeCalltip = 'doc'
                     editor.callTipShow(iStart, ''.join(calltip))
                     editor.callTipSetHlt(0, int(nHighlight))
         else:
             iLineStart = editor.positionFromLine(
                 editor.lineFromPosition(iStart))
             var = editor.getTextRange(iStart, iEnd)
             line = editor.getTextRange(iLineStart, iEnd)
             if var == '.':
                 autoCompleteList = self.interp.autoCompleteObject(
                     self.getUncompleteLine(iStart + 1))
                 if autoCompleteList:
                     editor.autoCSetSeparator(ord('\t'))
                     editor.autoCSetIgnoreCase(False)
                     editor.autoCSetCaseInsensitiveBehaviour(False)
                     editor.autoCSetOrder(0)
                     editor.autoCSetDropRestOfWord(True)
                     editor.autoCShow(0, autoCompleteList)
             else:
                 ret = self.interp.getCallTip(line, var)
                 if ret:
                     element, nHighlight, calltip = ret
                     if element == var == 'False':
                         self.activeCalltip = False
                         editor.callTipShow(iStart, 'set to True')
                     elif element == var == 'True':
                         self.activeCalltip = True
                         editor.callTipShow(iStart, 'set to False')
                     elif ret[-1] != 'value error':
                         self.activeCalltip = 'doc'
                         editor.callTipShow(iStart, ''.join(calltip))
                         editor.callTipSetHlt(0, int(nHighlight))
     elif CT_unselected and iStart == iEnd and pos >= 0:
         iLine = editor.lineFromPosition(pos)
         line = editor.getLine(iLine)
         iLineStart = editor.positionFromLine(iLine)
         posInLine = pos - iLineStart
         iWordEnd = 0
         for iWordStart in range(posInLine, -1, -1):
             s = line[iWordStart]
             if not ('a' <= s <= 'z' or 'A' <= s <= 'Z' or '0' <= s <= '9'
                     or s == '_'):
                 iWordStart += 1
                 break
         if iWordStart <= posInLine:
             for iWordEnd in range(posInLine + 1, len(line)):
                 s = line[iWordEnd]
                 if not ('a' <= s <= 'z' or 'A' <= s <= 'Z'
                         or '0' <= s <= '9' or s == '_'):
                     iWordEnd -= 1
                     break
         var = line[iWordStart:iWordEnd + 1]
         if var:
             var = line[iWordStart:iWordEnd + 1]
             ret = self.interp.getCallTip(line[0:iWordEnd + 1], var)
             pos = iLineStart + iWordStart
             if ret:
                 element, nHighlight, calltip = ret
                 if calltip != 'value error':
                     self.activeCalltip = 'doc'
                     editor.callTipShow(pos, ''.join(calltip))
                     editor.callTipSetHlt(0, int(nHighlight))
コード例 #3
0
ファイル: __init__.py プロジェクト: djhargrove/PyPadPlusPlus
 def onMouseDwell(self, args):
     '''Show a call tip window about the current content
     of a selected variable'''
     if self.bufferBusy or self.interp.kernelBusy.isSet(): return
     if editor.callTipActive(): return
     p = editor.positionFromPoint(args['x'], args['y'])
     iStart = editor.getSelectionStart()
     iEnd = editor.getSelectionEnd()
     if iEnd != iStart and iStart <= p <= iEnd:
         if self.popupForSelectedExpression and iEnd - iStart > 1:
             expression = editor.getTextRange(iStart, iEnd)
             if expression == 'False':
                 self.activeCalltip = False
                 editor.callTipShow(iStart, 'set to True')
             elif expression == 'True':
                 self.activeCalltip = True
                 editor.callTipShow(iStart, 'set to False')
             elif not '\n' in expression:
                 ret = self.interp.getCallTip(None, expression)
                 if ret:
                     element, nHighlight, calltip = ret
                     self.activeCalltip = 'doc'
                     editor.callTipShow(iStart, ''.join(calltip))
                     editor.callTipSetHlt(0, int(nHighlight))
         else:
             iLineStart = editor.positionFromLine(
                 editor.lineFromPosition(iStart))
             var = editor.getTextRange(iStart, iEnd)
             line = editor.getTextRange(iLineStart, iEnd)
             if var == '.':
                 autoCompleteList = self.interp.autoCompleteObject(
                     self.getUncompleteLine(iStart + 1))
                 if autoCompleteList:
                     editor.autoCSetSeparator(ord('\t'))
                     editor.autoCSetIgnoreCase(False)
                     editor.autoCSetCaseInsensitiveBehaviour(False)
                     editor.autoCSetOrder(0)
                     editor.autoCSetDropRestOfWord(True)
                     editor.autoCShow(0, autoCompleteList)
             else:
                 ret = self.interp.getCallTip(line, var)
                 if ret:
                     element, nHighlight, calltip = ret
                     if element == var == 'False':
                         self.activeCalltip = False
                         editor.callTipShow(iStart, 'set to True')
                     elif element == var == 'True':
                         self.activeCalltip = True
                         editor.callTipShow(iStart, 'set to False')
                     else:
                         self.activeCalltip = 'doc'
                         editor.callTipShow(iStart, ''.join(calltip))
                         editor.callTipSetHlt(0, int(nHighlight))
     elif self.popupForUnselectedVariable and iStart == iEnd and p >= 0:
         iLine = editor.lineFromPosition(p)
         line = editor.getLine(iLine)
         iLineStart = editor.positionFromLine(iLine)
         posInLine = p - iLineStart
         iWordEnd = 0
         for iWordStart in range(posInLine, -1, -1):
             s = line[iWordStart]
             if not ('a' <= s <= 'z' or 'A' <= s <= 'Z' or '0' <= s <= '9'
                     or s == '_'):
                 iWordStart += 1
                 break
         if iWordStart <= posInLine:
             for iWordEnd in range(posInLine + 1, len(line)):
                 s = line[iWordEnd]
                 if not ('a' <= s <= 'z' or 'A' <= s <= 'Z'
                         or '0' <= s <= '9' or s == '_'):
                     iWordEnd -= 1
                     break
         var = line[iWordStart:iWordEnd + 1]
         if var:
             var = line[iWordStart:iWordEnd + 1]
             ret = self.interp.getCallTip(line[0:iWordEnd + 1], var)
             pos = iLineStart + iWordStart
             if ret:
                 element, nHighlight, calltip = ret
                 self.activeCalltip = 'doc'
                 editor.callTipShow(pos, ''.join(calltip))
                 editor.callTipSetHlt(0, int(nHighlight))
コード例 #4
0
    def __init__(self,
                 externalPython=None,
                 matplotlib_eventHandler=True,
                 cellHighlight=True,
                 popupForUnselectedVariable=True,
                 popupForSelectedExpression=False,
                 mouseDwellTime=200):
        '''Initializes PyPadPlusPlus to prepare Notepad++
        for interactive Python development'''
        console.show()
        editor.grabFocus()
        self.windowHandle = windll.user32.GetForegroundWindow()

        sys.stdout = PseudoFileOut(Npp.console.write)
        sys.stderr = PseudoFileOut(Npp.console.writeError)
        sys.stdout.outp = PseudoFileOut(Npp.console.write)

        self.matplotlib_eventHandler = matplotlib_eventHandler
        self.matplotlib_enabled = False
        self.popupForUnselectedVariable = popupForUnselectedVariable
        self.popupForSelectedExpression = popupForSelectedExpression
        self.mouseDwellTime = mouseDwellTime

        self.externalPython = bool(externalPython)
        if self.externalPython:
            from . import pyPadHost
            self.interp = pyPadHost.interpreter(externalPython,
                                                outBuffer=self.outBuffer)
        else:
            from . import pyPadClient
            self.interp = pyPadClient.interpreter()

        if cellHighlight:
            self.lexer = EnhancedPythonLexer()
            self.lexer.main()
        else:
            self.lexer = None

        self.thread = None
        self.threadMarker = None
        self.bufferActive = 1
        self.delayedMarker = False
        self.activeCalltip = None
        editor.setTargetStart(0)
        self.specialMarkers = None
        self.bufferMarkerAction = {}
        self.lastActiveBufferID = -1

        # Marker
        self.markerWidth = 3
        editor.setMarginWidthN(3, self.markerWidth)
        editor.setMarginMaskN(3, (256 + 128 + 64) * (1 + 2**3 + 2**6))
        self.markers = {}
        self.m_active, self.m_error, self.m_finish = [
            6 + 3 * i for i in [0, 1, 2]
        ]
        self.preCalculateMarkers()
        for iMarker in self.m_active, self.m_error, self.m_finish:
            self.drawMarker(iMarker)

        self.setCallbacks()

        editor.callTipSetBack((255, 255, 225))
        editor.autoCSetSeparator(ord('\t'))
        editor.autoCSetIgnoreCase(False)
        editor.autoCSetCaseInsensitiveBehaviour(False)
        editor.autoCSetCancelAtStart(False)
        editor.autoCSetDropRestOfWord(False)

        console.clear()
        console.editor.setReadOnly(0)

        self.tTimerFlush = 0.15
        self.tTimerMiddleButton = 0.1
        self.middleButton = 0

        self.bufferActive = 0
        self.onTimerFlush(
        )  # start periodic timer to check output of subprocess
        self.onTimerMiddleButton(
        )  # start periodic timer to check state of middleButton
コード例 #5
0
 def _show_completion_list(_completion_list):
     editor.autoCCancel()
     editor.autoCSetSeparator(ord('\n'))
     editor.autoCSetOrder(ORDERING.CUSTOM)
     editor.autoCShow(0, '\n'.join(_completion_list))