On Sun, 2017-01-29 at 21:21 +0100, Andreas Schneider wrote: > Am 29.01.2017 um 12:24 schrieb Richard Shann: > > On Sun, 2017-01-29 at 11:00 +0100, Andreas Schneider wrote: > >> I have written a new version of the flexa script. It is based on > >> Richard's script that creates a flexa from two selected notes. I have > >> added a toggle behaviour, i.e. if you activate it where a flexa is > >> already present, it is deleted. The script saves in the data field where > >> the beginning and the end of the flexa is. Here is the code: > > > > A couple of suggestions: > > > > since you are just needing a boolean in the data field I suggest you > > store a value only for the flexa start, and delete the line > > > > > > (d-DirectivePut-chord-data tag "End") > > > > so then the bit of your script: > > > > (if (string=? (d-DirectiveGet-chord-data tag) "Start") ; if it's thestart > > of a flexa > > > > can become simply: > > > > (if (d-DirectiveGet-chord-data tag) ; if it's thestart of a flexa > > > > Also, it will be more conventional to use > > > > (d-DirectivePut-chord-data tag "'start") > > > > rather than "Start" when creating the flexa start directive. > > It makes no difference what the string is, as long as it is not white > > space, but as this field is designated as holding Scheme data then > > storing a symbol there looks good. > > Thank you for your suggestions. I have updated my script accordingly: > > (let ((tag "Flexa")) > > (if (d-Directive-chord? tag) > (begin ; a flexa directive already exists -> delete it > (if (d-DirectiveGet-chord-data tag) ; if it's the start of a flexa > (begin > (d-DirectiveDelete-chord tag) > (d-NextChord) > (d-DirectiveDelete-chord tag)) > (begin ; if it's the end of a flexa > (d-DirectiveDelete-chord tag) > (d-PrevChord) > (d-DirectiveDelete-chord tag)))) > (begin ; no Flexa directive exists yet -> create a flexa > (if (and (not (d-HasSelection)) (d-PrevChord)) > (begin > (d-SetMark) > (d-NextChord) > (d-SetPoint))) > (if (MoveToSelectionBeginningInThisStaff) > (begin > (d-DirectivePut-chord-prefix tag "\\[ ") > (d-DirectivePut-chord-postfix tag "\\flexa ") > (d-DirectivePut-chord-display tag "fl--") > (d-DirectivePut-chord-override tag 16) > (d-DirectivePut-chord-data tag "'start") > (if (d-NextChord) > (begin > (d-DirectivePut-chord-postfix tag "\\] > ") > (d-DirectivePut-chord-display tag "--]") > (d-DirectivePut-chord-override tag 16))) > (d-MoveCursorRight) > (d-SetSaved #f)) > (d-WarningDialog (_ "You must select two notes")))))) > > If this is okay, I would create a similar script for pes.
That seems good - I tried it out as a button in the Gregorian Chant palette. Richard _______________________________________________ Denemo-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/denemo-devel
