Skip to content

Commit 326ea1a

Browse files
committed
ENH: Use rcParams savefig.directory on macosx backend
This adds the rcParams savefig.directory option into the macosx backend for the savefig dialog window.
1 parent 23cd7dd commit 326ea1a

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

lib/matplotlib/backends/backend_macosx.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import os
2+
13
import matplotlib as mpl
24
from matplotlib import cbook
35
from matplotlib._pylab_helpers import Gcf
@@ -118,10 +120,15 @@ def remove_rubberband(self):
118120
self.canvas.remove_rubberband()
119121

120122
def save_figure(self, *args):
123+
directory = os.path.expanduser(mpl.rcParams['savefig.directory'])
121124
filename = _macosx.choose_save_file('Save the figure',
125+
directory,
122126
self.canvas.get_default_filename())
123127
if filename is None: # Cancel
124128
return
129+
# Save dir for next time, unless empty str (which means use cwd).
130+
if mpl.rcParams['savefig.directory']:
131+
mpl.rcParams['savefig.directory'] = os.path.dirname(filename)
125132
self.canvas.figure.savefig(filename)
126133

127134
def prepare_configure_subplots(self):

src/_macosx.m

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -980,33 +980,24 @@ -(void)save_figure:(id)sender { gil_call_method(toolbar, "save_figure"); }
980980
{
981981
int result;
982982
const char* title;
983+
const char* directory;
983984
const char* default_filename;
984-
if (!PyArg_ParseTuple(args, "ss", &title, &default_filename)) {
985+
if (!PyArg_ParseTuple(args, "sss", &title, &directory, &default_filename)) {
985986
return NULL;
986987
}
987988
NSSavePanel* panel = [NSSavePanel savePanel];
988-
[panel setTitle: [NSString stringWithCString: title
989-
encoding: NSASCIIStringEncoding]];
990-
NSString* ns_default_filename =
991-
[[NSString alloc]
992-
initWithCString: default_filename
993-
encoding: NSUTF8StringEncoding];
994-
[panel setNameFieldStringValue: ns_default_filename];
989+
[panel setTitle: [NSString stringWithUTF8String: title]];
990+
[panel setDirectoryURL: [NSURL fileURLWithPath: [NSString stringWithUTF8String: directory]
991+
isDirectory: YES]];
992+
[panel setNameFieldStringValue: [NSString stringWithUTF8String: default_filename]];
995993
result = [panel runModal];
996-
[ns_default_filename release];
997994
if (result == NSModalResponseOK) {
998-
NSURL* url = [panel URL];
999-
NSString* filename = [url path];
995+
NSString *filename = [[panel URL] path];
1000996
if (!filename) {
1001997
PyErr_SetString(PyExc_RuntimeError, "Failed to obtain filename");
1002998
return 0;
1003999
}
1004-
unsigned int n = [filename length];
1005-
unichar* buffer = malloc(n*sizeof(unichar));
1006-
[filename getCharacters: buffer];
1007-
PyObject* string = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, buffer, n);
1008-
free(buffer);
1009-
return string;
1000+
return PyUnicode_FromString([filename UTF8String]);
10101001
}
10111002
Py_RETURN_NONE;
10121003
}

0 commit comments

Comments
 (0)