[GRASS-SVN] r58690 - grass/branches/releasebranch_6_4/gui/wxpython/gui_core

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Jan 12 15:04:03 PST 2014


Author: annakrat
Date: 2014-01-12 15:04:03 -0800 (Sun, 12 Jan 2014)
New Revision: 58690

Modified:
   grass/branches/releasebranch_6_4/gui/wxpython/gui_core/prompt.py
Log:
wxGUI/prompt: fix #1963 ('ls -' error); improve autocompletion just after command (merge from trunk, r58689)

Modified: grass/branches/releasebranch_6_4/gui/wxpython/gui_core/prompt.py
===================================================================
--- grass/branches/releasebranch_6_4/gui/wxpython/gui_core/prompt.py	2014-01-12 23:03:05 UTC (rev 58689)
+++ grass/branches/releasebranch_6_4/gui/wxpython/gui_core/prompt.py	2014-01-12 23:04:03 UTC (rev 58690)
@@ -857,54 +857,51 @@
         """!Determines which part of command (flags, parameters) should
         be completed at current cursor position"""
         entry = self.GetTextLeft()
-        toComplete = dict()
+        toComplete = dict(cmd=None, entity=None)
         try:
             cmd = entry.split()[0].strip()
         except IndexError:
-            return None
+            return toComplete
         
         try:
             splitted = utils.split(str(entry))
         except ValueError: # No closing quotation error
-            return None
-        if len(splitted) > 1:
-            if cmd in globalvar.grassCmd:
-                toComplete['cmd'] = cmd
-                if entry[-1] == ' ':
-                    words = entry.split(' ')
-                    if any(word.startswith('-') for word in words):
-                        toComplete['entity'] = 'params'
+            return toComplete
+        if len(splitted) > 0 and cmd in globalvar.grassCmd:
+            toComplete['cmd'] = cmd
+            if entry[-1] == ' ':
+                words = entry.split(' ')
+                if any(word.startswith('-') for word in words):
+                    toComplete['entity'] = 'params'
+                else:
+                    toComplete['entity'] = 'params+flags'
+            else:
+                # get word left from current position
+                word = self.GetWordLeft(withDelimiter = True)
+                
+                if word[0] == '=' and word[-1] == '@':
+                    toComplete['entity'] = 'mapsets'
+                elif word[0] == '=':
+                    # get name of parameter
+                    paramName = self.GetWordLeft(withDelimiter = False, ignoredDelimiter = '=').strip('=')
+                    if paramName:
+                        try:
+                            param = self.cmdDesc.get_param(paramName)
+                        except (ValueError, AttributeError):
+                            return toComplete
                     else:
-                        toComplete['entity'] = 'params+flags'
-                else:
-                    # get word left from current position
-                    word = self.GetWordLeft(withDelimiter = True)
+                        return toComplete
                     
-                    if word[0] == '=' and word[-1] == '@':
-                        toComplete['entity'] = 'mapsets'
-                    elif word[0] == '=':
-                        # get name of parameter
-                        paramName = self.GetWordLeft(withDelimiter = False, ignoredDelimiter = '=').strip('=')
-                        if paramName:
-                            try:
-                                param = self.cmdDesc.get_param(paramName)
-                            except (ValueError, AttributeError):
-                                return None
-                        else:
-                            return None
-                        
-                        if param['values']:
-                            toComplete['entity'] = 'param values'
-                        elif param['prompt'] == 'raster' and param['element'] == 'cell':
-                            toComplete['entity'] = 'raster map'
-                        elif param['prompt'] == 'vector' and param['element'] == 'vector':
-                            toComplete['entity'] = 'vector map'
-                    elif word[0] == '-':
-                        toComplete['entity'] = 'flags'
-                    elif word[0] == ' ':
-                        toComplete['entity'] = 'params'
-            else:
-                return None
+                    if param['values']:
+                        toComplete['entity'] = 'param values'
+                    elif param['prompt'] == 'raster' and param['element'] == 'cell':
+                        toComplete['entity'] = 'raster map'
+                    elif param['prompt'] == 'vector' and param['element'] == 'vector':
+                        toComplete['entity'] = 'vector map'
+                elif word[0] == '-':
+                    toComplete['entity'] = 'flags'
+                elif word[0] == ' ':
+                    toComplete['entity'] = 'params'
         else:
             toComplete['entity'] = 'command'
             toComplete['cmd'] = cmd
@@ -954,7 +951,14 @@
             self.toComplete = self.EntityToComplete()
             try:
                 if self.toComplete['entity'] == 'command': 
-                    self.autoCompList = self.moduleList[entry.strip()]
+                    for command in globalvar.grassCmd:
+                        try:
+                            if command.find(self.toComplete['cmd']) == 0:
+                                dotNumber = list(self.toComplete['cmd']).count('.') 
+                                self.autoCompList.append(command.split('.',dotNumber)[-1])
+                        except UnicodeDecodeError, e: # TODO: fix it
+                            sys.stderr.write(DecodeString(command) + ": " + unicode(e))
+                            
             except (KeyError, TypeError):
                 return
             self.ShowList()
@@ -983,14 +987,13 @@
             self.InsertText(pos, '=')
             self.CharRight()
             self.toComplete = self.EntityToComplete()
-            if self.toComplete and 'entity' in self.toComplete:
-                if self.toComplete['entity'] == 'raster map':
-                    self.autoCompList = self.mapList['raster']
-                elif self.toComplete['entity'] == 'vector map':
-                    self.autoCompList = self.mapList['vector']
-                elif self.toComplete['entity'] == 'param values':
-                    param = self.GetWordLeft(withDelimiter = False, ignoredDelimiter='=').strip(' =')
-                    self.autoCompList = self.cmdDesc.get_param(param)['values']
+            if self.toComplete['entity'] == 'raster map':
+                self.autoCompList = self.mapList['raster']
+            elif self.toComplete['entity'] == 'vector map':
+                self.autoCompList = self.mapList['vector']
+            elif self.toComplete['entity'] == 'param values':
+                param = self.GetWordLeft(withDelimiter = False, ignoredDelimiter='=').strip(' =')
+                self.autoCompList = self.cmdDesc.get_param(param)['values']
             self.ShowList()
         
         # complete mapset ('@')
@@ -1000,7 +1003,7 @@
             self.CharRight()
             self.toComplete = self.EntityToComplete()
             
-            if self.toComplete and self.toComplete['entity'] == 'mapsets':
+            if self.toComplete['entity'] == 'mapsets':
                 self.autoCompList = self.mapsetList
             self.ShowList()
             



More information about the grass-commit mailing list