Changeset 226


Ignore:
Timestamp:
06/10/09 11:02:47 (3 years ago)
Author:
rkuck
Message:

Added edit() command to avango-inspect

This will open an editor defined via the AVANGO_EDITOR evironment variable
providing the file to edit as the first parameter. The editor should run in
the foreground. A shell script for the popular 'gvim' editor is provided as
an example.

Location:
trunk
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/avango-inspector/src/avango/inspector/__init__.py

    r225 r226  
    66import sys 
    77import cStringIO 
     8import subprocess 
     9import os 
     10import tempfile 
    811 
    912import avango.nodefactory 
    1013nodes = avango.nodefactory.NodeFactory(module=__name__) 
     14 
     15def _edit(data = ""): 
     16    result = data 
     17    editor = os.environ.get('AVANGO_EDITOR', '') 
     18    if not editor: 
     19        return result 
     20    try: 
     21        buffer = tempfile.mkstemp(suffix = '.py') 
     22        os.write(buffer[0], data) 
     23        os.close(buffer[0]) 
     24        subprocess.call([editor, buffer[1]]) 
     25        file = open(buffer[1]) 
     26        result = file.read() 
     27    finally: 
     28        os.unlink(buffer[1]) 
     29    return result 
    1130 
    1231class Instances(object): 
     
    2140        self.always_evaluate(True) 
    2241 
    23         self.sandbox = { 'inst': Instances() } 
     42        self.sandbox = { 'inst': Instances(), 'edit': self._edit } 
    2443 
    2544        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     
    85104        self.sandbox['field'] = field 
    86105 
     106        self._exec(self.entry_field.get_text()) 
     107        self.entry_field.set_text("") 
     108 
     109        self.update_model() 
     110 
     111    def _exec(self, cmd): 
     112        self.output.insert_with_tags(self.output.get_end_iter(), cmd+"\n", self.output_command_tag) 
     113 
    87114        stdout = sys.stdout  
    88115        redirected_stdout = cStringIO.StringIO() 
     
    93120 
    94121        try: 
    95             exec self.entry_field.get_text() in globals(), self.sandbox 
     122            exec cmd in globals(), self.sandbox 
    96123        except: 
    97124            cls, obj, traceback = sys.exc_info() 
     
    101128        sys.stderr = stderr 
    102129 
    103         self.output.insert_with_tags(self.output.get_end_iter(), self.entry_field.get_text()+"\n", self.output_command_tag) 
    104130        self.output.insert_with_tags(self.output.get_end_iter(), redirected_stderr.getvalue(), self.output_error_tag) 
    105131        self.output.insert(self.output.get_end_iter(), redirected_stdout.getvalue()) 
    106         self.entry_field.set_text("") 
    107  
    108         self.update_model() 
    109132 
    110133    def handle_output_scroll(self, widget, data=None): 
     
    132155        self.view.expand_all() 
    133156 
     157    def _edit(self): 
     158        cmds = _edit() 
     159        self._exec(cmds) 
     160 
    134161 
    135162    @avango.script.field_has_changed(Children) 
  • trunk/examples/inspector/SConscript

    r136 r226  
    3030files = Split(''' 
    3131              inspector.py 
     32              gvim-foreground.sh 
    3233              ''') 
    3334 
Note: See TracChangeset for help on using the changeset viewer.