\version "2.19.47"
%% not public, c/p from lily-library.scm
#(define (other-axis a)
(remainder (+ a 1) 2))
%% doesn't makes sense to bracketify an empty stencil, hence we just return it.
#(define-public (bracketify-stencil stil axis thick protrusion padding)
"Add brackets around @var{stil}, producing a new stencil."
(if (ly:stencil-empty? stil)
stil
(let* ((ext (ly:stencil-extent stil axis))
(lb (ly:bracket axis ext thick protrusion))
(rb (ly:bracket axis ext thick (- protrusion))))
(set! stil
(ly:stencil-combine-at-edge stil (other-axis axis) 1 rb padding))
(set! stil
(ly:stencil-combine-at-edge stil (other-axis axis) -1 lb padding))
stil)))
%%%%%%%%%%%%
%% Example
%%%%%%%%%%%%
\relative c'' {
\override Staff.KeySignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:key-signature-interface::print grob) Y 0.1 0.2 0.1))
\key c \major
c''
}