Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-11-07 18:16:30 +0300
committerCampbell Barton <ideasman42@gmail.com>2008-11-07 18:16:30 +0300
commit37c1fd2303742f1121718e423a72b08995c8d0cb (patch)
tree066f08ec1d501eb6eed8c89018e69506016691bb
parent8b2811d9d5539dd880bc78f05e303781511d657b (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.py55
-rw-r--r--source/blender/python/BPY_interface.c14
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