Based on Selection
To end of all selected media
local i
local media_item, media_item_pos, media_item_len, media_item_end
local current_pos
local max_media_item_end = -1
current_pos = reaper.GetCursorPosition()
for i = 0,1000 do -- assuming fewer than 1000 media items selected
media_item = reaper.GetSelectedMediaItem(0,i)
if type(media_item) == "nil" then break end
media_item_pos = reaper.GetMediaItemInfo_Value(media_item,"D_POSITION")
media_item_len = reaper.GetMediaItemInfo_Value(media_item,"D_LENGTH")
media_item_end = media_item_pos + media_item_len
if media_item_end > max_media_item_end then
max_media_item_end = media_item_end
end
end
if max_media_item_end >= 0.0 then
reaper.SetEditCurPos(max_media_item_end,true,false)
end
To next end of selected media
local i
local media_item, media_item_pos, media_item_len, media_item_end
local current_pos
local next_media_item_end = -1
current_pos = reaper.GetCursorPosition()
for i = 0,1000 do -- assuming fewer than 1000 media items selected
media_item = reaper.GetSelectedMediaItem(0,i)
if type(media_item) == "nil" then break end
media_item_pos = reaper.GetMediaItemInfo_Value(media_item,"D_POSITION")
media_item_len = reaper.GetMediaItemInfo_Value(media_item,"D_LENGTH")
media_item_end = media_item_pos + media_item_len
if media_item_end > current_pos then
if next_media_item_end < 0 then
next_media_item_end = media_item_end
else
if next_media_item_end > media_item_end then
next_media_item_end = media_item_end
end
end
end
end
if next_media_item_end >= 0.0 then
reaper.SetEditCurPos(next_media_item_end,true,false)
end