saveUndo = undo.editToBeUndone();
	public boolean save(final View view, String path)	{		if(getFlag(LOADING) || getFlag(SAVING))		{			GUIUtilities.error(view,"buffer-multiple-io",null);			return false;		}		if(path == null && getFlag(NEW_FILE))			return saveAs(view);		if(path == null && file != null)		{			long newModTime = file.lastModified();			if(newModTime != modTime)			{				Object[] args = { this.path };				int result = JOptionPane.showConfirmDialog(view,					jEdit.getProperty("filechanged-save.message",args),					jEdit.getProperty("filechanged.title"),					JOptionPane.YES_NO_OPTION,					JOptionPane.WARNING_MESSAGE);				if(result != JOptionPane.YES_OPTION)					return false;			}		}		setFlag(SAVING,true);		EditBus.send(new BufferUpdate(this,BufferUpdate.SAVING));		if(path == null)			path = this.path;		if(!vfs.save(view,this,path))		{			setFlag(SAVING,false);			return false;		}		final String oldPath = this.path;		setPath(path);		// Once save is complete, do a few other things		VFSManager.runInAWTThread(new Runnable()		{			public void run()			{				if(autosaveFile != null)					autosaveFile.delete();				setFlag(AUTOSAVE_DIRTY,false);				setFlag(READ_ONLY,false);				setFlag(NEW_FILE,false);				setFlag(UNTITLED,false);				setFlag(DIRTY,false);				setFlag(SAVING,false);				if(getFlag(NEW_FILE) || mode.getName().equals("text"))					setMode();				if(file != null)					modTime = file.lastModified();				if(!getPath().equals(oldPath))					jEdit.updatePosition(Buffer.this);				// getPath() used since 'path' in containing				// method isn't final				if(getPath().toLowerCase().endsWith(".macro"))					Macros.loadMacros();				EditBus.send(new BufferUpdate(Buffer.this,					BufferUpdate.DIRTY_CHANGED));			}		});		return true;	}