+int
+LuaInstance::load_state ()
+{
+ std::string uiscripts;
+ if (!find_file (ardour_config_search_path(), ui_scripts_file_name, uiscripts)) {
+ return -1;
+ }
+ XMLTree tree;
+
+ info << string_compose (_("Loading user ui scripts file %1"), uiscripts) << endmsg;
+
+ if (!tree.read (uiscripts)) {
+ error << string_compose(_("cannot read ui scripts file \"%1\""), uiscripts) << endmsg;
+ return -1;
+ }
+
+ if (set_state (*tree.root())) {
+ error << string_compose(_("user ui scripts file \"%1\" not loaded successfully."), uiscripts) << endmsg;
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+LuaInstance::save_state ()
+{
+ if (!_session) {
+ /* action scripts are un-registered with the session */
+ return -1;
+ }
+
+ std::string uiscripts = Glib::build_filename (user_config_directory(), ui_scripts_file_name);
+
+ XMLNode* node = new XMLNode (X_("UIScripts"));
+ node->add_child_nocopy (get_action_state ());
+ node->add_child_nocopy (get_hook_state ());
+
+ XMLTree tree;
+ tree.set_root (node);
+
+ if (!tree.write (uiscripts.c_str())){
+ error << string_compose (_("UI script file %1 not saved"), uiscripts) << endmsg;
+ return -1;
+ }
+ return 0;
+}
+
+void
+LuaInstance::set_dirty ()
+{
+ if (!_session || _session->deletion_in_progress()) {
+ return;
+ }
+ save_state ();
+ _session->set_dirty (); // XXX is this reasonable?
+}
+