diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-11-07 18:16:30 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-11-07 18:16:30 +0300 |
commit | 37c1fd2303742f1121718e423a72b08995c8d0cb (patch) | |
tree | 066f08ec1d501eb6eed8c89018e69506016691bb | |
parent | 8b2811d9d5539dd880bc78f05e303781511d657b (diff) |
[#17958] Windows path fix for image_edit.py script.
Modified to work in linux too, on my system subprocess.Popen(appstring) only works when appstring is a list.
Blenders __import__ didnt support keywords like pythons causing the subprocess module to fail for me.
added keywords to blenders c/api import to match pythons.
-rw-r--r-- | release/scripts/image_edit.py | 55 | ||||
-rw-r--r-- | source/blender/python/BPY_interface.c | 14 |
2 files changed, 40 insertions, 29 deletions
diff --git a/release/scripts/image_edit.py b/release/scripts/image_edit.py index a7132a4f986..fb0a82b8916 100644 --- a/release/scripts/image_edit.py +++ b/release/scripts/image_edit.py @@ -1,6 +1,6 @@ #!BPY """ -Name: 'Edit Externaly' +Name: 'Edit Externally' Blender: 242a Group: 'Image' Tooltip: 'Open in an application for editing. (hold Shift to configure)' @@ -9,22 +9,23 @@ Tooltip: 'Open in an application for editing. (hold Shift to configure)' __author__ = "Campbell Barton" __url__ = ["blender", "blenderartists.org"] __version__ = "1.0" - __bpydoc__ = """\ This script opens the current image in an external application for editing. -Useage: +Usage: Choose an image for editing in the UV/Image view. -To configure the application to open the image with, hold Shift as you click on -this menu item. +To configure the application to open the image with, hold Shift as you +click on this menu item. -For first time users try running the default application for your operating system. -If the application does not open you can type in the full path. -You can choose that the last entered application will be saved as a default. +For first time users try running the default application for your +operating system. If the application does not open you can type in +the full path. You can choose that the last entered application will +be saved as a default. -* Note, default commants for opening an image are "start" for win32 and "open" for macos. -This will use the system default assosiated application. +* Note, default commants for opening an image are "start" for win32 +and "open" for macos. This will use the system default associated +application. """ # ***** BEGIN GPL LICENSE BLOCK ***** @@ -48,17 +49,16 @@ This will use the system default assosiated application. # ***** END GPL LICENCE BLOCK ***** # -------------------------------------------------------------------------- +import Blender +from Blender import Image, sys, Draw, Registry try: - import os + import subprocess import sys as py_sys platform = py_sys.platform except: - Draw.PupMenu('Error, python not installed') - os=None - -import Blender -from Blender import Image, sys, Draw, Registry + Draw.PupMenu('Error: Recent version of Python not installed.') + subprocess=None def edit_extern(image=None): @@ -66,7 +66,7 @@ def edit_extern(image=None): image = Image.GetCurrent() if not image: # Image is None - Draw.PupMenu('ERROR: You must select an active Image.') + Draw.PupMenu('ERROR: Please select active Image.') return if image.packed: Draw.PupMenu('ERROR: Image is packed, unpack before editing.') @@ -94,7 +94,10 @@ def edit_extern(image=None): if new_text: pupblock.append('first time, set path.') if platform == 'win32': - appstring = 'start "" /B "%f"' + # Example of path to popular image editor... ;-) + # appstring = '"C:\\Program Files\\Adobe\\Photoshop CS\\photoshop.exe" "%f"' + # Have to add "cmd /c" to make sure we're using Windows shell. + appstring = 'cmd /c start "" /B "%f"' elif platform == 'darwin': appstring = 'open "%f"' else: @@ -103,7 +106,7 @@ def edit_extern(image=None): appstring_but = Draw.Create(appstring) save_default_but = Draw.Create(0) - pupblock.append(('editor: ', appstring_but, 0, 48, 'Path to application, %f will be replaced with the image path.')) + pupblock.append(('editor: ', appstring_but, 0, 99, 'Path to application, %f will be replaced with the image path.')) pupblock.append(('Set Default', save_default_but, 'Store this path in the blender registry.')) # Only configure if Shift is held, @@ -118,19 +121,23 @@ def edit_extern(image=None): Registry.SetKey('ExternalImageEditor', {'path':appstring}, True) if appstring.find('%f') == -1: - Draw.PupMenu('ERROR: The comment you entered did not contain the filename ("%f")') + Draw.PupMenu('ERROR: No filename specified! ("%f")') return # ------------------------------- + # evil trick, temp replace spaces so we can allow spaces in filenames + appstring = appstring.replace(' ', '\t') + appstring = appstring.replace('%f', imageFileName) - print '\tediting image with command "%s"' % appstring - os.system(appstring) + appstring = appstring.split('\t') + print 'Editing image with command "%s"' % appstring + p = subprocess.Popen(appstring) def main(): edit_extern() -if __name__ == '__main__' and os != None: - main()
\ No newline at end of file +if __name__ == '__main__' and subprocess: + main() diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c index 1c8b606ace3..331f72021f2 100644 --- a/source/blender/python/BPY_interface.c +++ b/source/blender/python/BPY_interface.c @@ -167,7 +167,7 @@ static void DoAllScriptsFromList( ListBase * list, short event ); static PyObject *importText( char *name ); static void init_ourImport( void ); static void init_ourReload( void ); -static PyObject *blender_import( PyObject * self, PyObject * args ); +static PyObject *blender_import( PyObject * self, PyObject * args, PyObject * kw); static void BPY_Err_Handle( char *script_name ); @@ -2849,24 +2849,28 @@ static PyObject *importText( char *name ) } static PyMethodDef bimport[] = { - {"blimport", blender_import, METH_VARARGS, "our own import"} + {"blimport", blender_import, METH_KEYWORDS, "our own import"} }; -static PyObject *blender_import( PyObject * self, PyObject * args ) +static PyObject *blender_import( PyObject * self, PyObject * args, PyObject * kw) { PyObject *exception, *err, *tb; char *name; PyObject *globals = NULL, *locals = NULL, *fromlist = NULL; PyObject *m; + //PyObject_Print(args, stderr, 0); #if (PY_VERSION_HEX >= 0x02060000) int dummy_val; /* what does this do?*/ + static char *kwlist[] = {"name", "globals", "locals", "fromlist", "level", 0}; - if( !PyArg_ParseTuple( args, "s|OOOi:bimport", + if( !PyArg_ParseTupleAndKeywords( args, kw, "s|OOOi:bimport", kwlist, &name, &globals, &locals, &fromlist, &dummy_val) ) return NULL; #else - if( !PyArg_ParseTuple( args, "s|OOO:bimport", + static char *kwlist[] = {"name", "globals", "locals", "fromlist", 0}; + + if( !PyArg_ParseTupleAndKeywords( args, kw, "s|OOO:bimport", kwlist, &name, &globals, &locals, &fromlist ) ) return NULL; #endif |