summaryrefslogtreecommitdiff
path: root/share/scripts/_sort_tracks_by_name.lua
diff options
context:
space:
mode:
Diffstat (limited to 'share/scripts/_sort_tracks_by_name.lua')
-rw-r--r--share/scripts/_sort_tracks_by_name.lua36
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