Looks like a new property is the only way to get an overall improvement. LilyPond has good infrastructure for using properties, so there is not much code to add.
https://codereview.appspot.com/101720045/diff/2/lily/rest.cc File lily/rest.cc (right): https://codereview.appspot.com/101720045/diff/2/lily/rest.cc#newcode75 lily/rest.cc:75: pos = 2 * dir; pos = dir * robust_scm2int(me->get_property("voiced-rest-position"), 2); https://codereview.appspot.com/101720045/diff/2/lily/rest.cc#newcode139 lily/rest.cc:139: return neutral + 2 * dir; This one should remain 2, because the voiced rest position has already been applied. /* one staff-space, 2 staff positions, from the neutral position */ The logic above seems that it would prevent half- and longer rests from crossing the centerline, even if voiced-rest-position is 0, which I think you want. https://codereview.appspot.com/101720045/diff/2/lily/rest.cc#newcode319 lily/rest.cc:319: "minimum-distance " As you say, Rest.minimum-distance is ignored, so we can remove it here. https://codereview.appspot.com/101720045/diff/2/lily/rest.cc#newcode320 lily/rest.cc:320: "style " "voiced-rest-position " would go here, along with an entry in scm/define-grob-properties.scm https://codereview.appspot.com/101720045/ _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel