diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index b0ba0f1384..65828b35d2 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -495,6 +495,8 @@ public: void request_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI); void request_locate (samplepos_t sample, bool force = false, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI); + bool request_locate_to_mark (std::string const&, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI); + void request_play_loop (bool yn, bool leave_rolling = false); bool get_play_loop () const { return play_loop; } diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 7e73f15a1c..42503e4a17 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -3109,6 +3109,7 @@ LuaBindings::common (lua_State* L) .addFunction ("timecode_frames_per_second", &Session::timecode_frames_per_second) .addFunction ("timecode_drop_frames", &Session::timecode_drop_frames) .addFunction ("request_locate", &Session::request_locate) + .addFunction ("request_locate_to_mark", &Session::request_locate_to_mark) .addFunction ("request_roll", &Session::request_roll) .addFunction ("request_stop", &Session::request_stop) .addFunction ("request_play_loop", &Session::request_play_loop) diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index b82bd982db..b3d7026dcf 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -994,6 +994,21 @@ Session::force_locate (samplepos_t target_sample, LocateTransportDisposition ltd queue_event (ev); } +bool +Session::request_locate_to_mark (std::string const& name, LocateTransportDisposition ltd, TransportRequestSource origin) +{ + for (auto const& l : locations()->list()) { + if (!l->is_mark() || l->is_hidden() || l->is_session_range()) { + continue; + } + if (l->name () == name) { + request_locate (l->start_sample(), false, ltd, origin); + return true; + } + } + return false; +} + void Session::unset_preroll_record_trim () {