Yes, the new Swap Passages command has some very useful coding style that could be reused in different scenarios. It could help me refine what I've got so far for the intervals to other staffs commands. Also, I want to use features from Swap Passages to make it so I can select just a line of notes the same duration in columns of multiple staffs (right now selecting columns selects the whole measure, as far as I know), and will study how you used the "GetStart/EndTick" to see if that will be the key there.
Below is what I have so far for the intervals command, working mostly, except if I got back to add a new interval, then the note pops up at the end of measure, so I made a "swap note right/left" for that. (I did decide to go with having a command for each interval, up and down - not including all those intervals in ans.scm, just the main ones; Having the transpose dialogue pop-up is of course just as easy, perhaps easier in the sense that it only needs one command to implement!). The d-PushCursorPosition at the beginning is so that I can just hit 'tab' as a shortcut keypress for d-PopCursorPosition when I am ready to go back to staff of origin.
(d-CursorToLowestNote)(d-PushCursorPosition)(d-MoveToStaffUp)
(if(UnderfullMeasure?)
(d-SelectionToEmptyMeasure))
(d-UnsetMark)
(if(FullDurationMeasure?)(GoToMeasureEnd)(d-MoveCursorLeft))
(d-UnsetMark)(d-PutNote)(d-MoveCursorLeft)
(define a6 -1) ;;; P4
(begin (ANS::ChangeChordNotes(map(lambda (x)(ANS::IntervalCalcUp x a6))(ANS::GetChordNotes)))
(if(d-Directive-chord?"ChordName")(d-DirectivePut-chord-display"ChordName"(DenemoGetNoteAndAccidental))))
(if(EmptyMeasure?)(d-MoveCursorLeft))
(if(FullDurationMeasure?)(GoToMeasureEnd)(d-MoveCursorleft))
;;; to be used later - (while (and (not (Music?)) (d-MoveCursorRight)))
;;; to be used later - (while (and (not (Note?)) (d-MoveCursorRight)))
Thanks,
Rain Wilber