I'm trying to understand how to get emacs to properly combine unicode combining characters when doing font substitution. Here is a concrete example. On my mac, I start emacs -Q, and try to display the sequence of characters x̂ x⃗ χ̂ χ⃗. This is an x followed by (#x302) COMBINING CIRCUMFLEX ACCENT, then an x followed by (#x20d7) COMBINING RIGHT ARROW ABOVE; and then χ (GREEK SMALL LETTER CHI) followed by the circumflex, and then χ followed by the combining right arrow above. The default font is Menlo, which obviously includes the ASCII x, and the circumflex and chi, but apparently not the combining right arrow. This is what I see:
As you can see, the combining arrow gets pulled from some other font --- emacs falls back to Arial Unicode MS (I can't find where this default is determined). But the combining arrow doesn't get combined with the character before it, and I'm guessing this is because they're coming from different fonts.
Now, I can change the fallback font for unicode characters to be a different font --- in my case, the Symbola font --- by evaluating (set-fontset-font t 'unicode "Symbola" nil 'prepend). After evaluating it, this is what I see:
Now I get a combined chi with arrow, coming from Symbola. The x and combining arrow have not been combined.
I don't understand why this is, especially given that the default (Arial Unicode MS) also has the Greek small chi character and the combining arrow.
What are the rules for how font substitution works for combining characters? Why is x not being combined with the arrow?
If I set my default font to be one of those featureful fonts, I can get combining characters, but I want a monospaced font with obvious differences between the commonly-confused characters like O0Il1|, and most "programmer's" fonts seem to lack those combining symbols that I want.

