diff options
Diffstat (limited to 'share/scripts/_sort_tracks_by_name.lua')
-rw-r--r-- | share/scripts/_sort_tracks_by_name.lua | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/share/scripts/_sort_tracks_by_name.lua b/share/scripts/_sort_tracks_by_name.lua new file mode 100644 index 0000000000..36dfdc970c --- /dev/null +++ b/share/scripts/_sort_tracks_by_name.lua @@ -0,0 +1,36 @@ +ardour { + ["type"] = "EditorAction", + name = "Track Sort", + author = "Ardour Lua Taskforce", + description = [[Sort tracks alphabetically by name]] +} + +function factory () return function () + + -- sort compare function + -- a,b here are http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Route + -- return true if route "a" should be ordered before route "b" + function tsort (a, b) + return a:name() < b:name() + end + + -- create a sortable list of tracks + local tracklist = {} + for t in Session:get_tracks():iter() do + table.insert(tracklist, t) + end + + -- sort the list using the compare function + table.sort(tracklist, tsort) + + -- traverse the sorted list and assign "presentation-order" to each track + local pos = 1; + for _, t in ipairs(tracklist) do + t:set_presentation_order(pos) + pos = pos + 1 + end + + -- drop all track references + tracklist = nil + collectgarbage () +end end |