With a little searching i found that i had posted this before, but embedded it in another group of requests. So at the risk of ticking off admin for bringing up old subjects, i felt it was important to bump it and give it its own topic.
One of the best tools we could have is a Filter where we can search and replace/delete any data based on channel, row, instrument, sample, note attributes (like the tone or duration, for example), note FX (like key velocity or portamento), or instrument/channel FX (like Txx tempo changes or the Zxx macros). The filter we have is good, but it needs an upgrade to give us more choices.
For example, what if i want to shift the Kick Bass at row 5 to row 7, but only in pattern 1-15 and 19-22? Perhaps i have a slow volume increase with vxx note FX (in the 3rd column), and i'd like to thin out the data (so that duplicate volume (vxx) data is erased) so i can introduce other note FX (like axx or oxx). What if need to change from the key of D to Db (or C#) but only in rows 24-31 for instruments 4, 7, and 9, for patterns 50-53? OTOH, just select them (discontiguous data), and i'll change them manually while the patterns play so i can hear where they would best sound?
The implementation of this (at least as far as the selecting process) can best be accomplished by creating a variable that stores what data fields are selected, in the form of a list of the data fields (rather than a range). This would allow for discontiguous data to be selected.
Shifting data is basically an automated cut-and-paste. Thinning data will require a function that searches the same data from the previous row. Key changes require asking the user if it should be a chromatic transposition (where the selected notes are confined to only the notes of a key) or a tonal transposition (where the selected notes are altogether shifted up or down according to the key's relation to C).
This i'm sure would require a little work, but i think it's not a heavy dose of time to implement (this coming from a non-programmer!

).