I'm nerdily happy at being able to fully write out all #Pinyin and #Zhuyin / #Bopomo phonetic notations if I including the tone marks. For Pinyin it mostly consists of composing alphabet vowels with diacritics, while for Zhuyin it means typing out the glyphs followed by diacritic marks.
I type "ma" in five tones like the following in Pinyin:
mā má mǎ mà ma
Which is a macron, accent acute, caron, and accent grave composed with the letter "a." This is achieved by holding down the compose key (right Alt on my system) while typing dash, quotation mark, "v" key, or ` key respectively before tapping the "a" key. The fifth tone is unmarked in Pinyin.
I haven't figured out composition sequences for marking tonal diacritics on ü, and it's rare enough that I turn to #Unicode mode instead, accessed by Alt+Shift+Control+u on my Linux system. In Unicode mode type in "small u with diaeresis and" followed my "macron," "acute," "caron," and "grave" for tones 1 to 4. For the unmarked fifth tone of ü it's quicker to compose the "u" key with a double quotation mark (shift + ', u with right alt held down). So "lü" is written like the following in five tones:
lǖ lǘ lǚ lǜ lü
In Bopomo the tonal diacritics follow the glyphs rather than combine with them, so I use the Unicode entry system. "Ma" in five tones, ㄇㄚ in Zhuyin, is written:
ㄇㄚ¯ ㄇㄚ´ ㄇㄚˇ ㄇㄚ` ㄇㄚ˙
On Rime the glyphs are typed by entering Bopomo and then selecting with Shift+Enter. The trailing standalone diacritics are entered by entering Unicode mode with Alt+Shift+Control+u and searching "macron," "acute accent," "hacek," "grave accent," and "dot above" respectively. The first tone mark is usually omitted in practice, of course.
I type "hacek" rather than "caron" for the third tone because the standalone caron on my system is quite far back in the candidate list, requiring a lot of paging through, while using its Czech name háček (meaning "little hook," per Wikipedia) brings it right to the top of results. You can type in "hacek" without diacritics like some clueless Anglo and it'll still work. I haven't been able to figure out a similar trick for "dot above," so I have to page over once and tab through the choices to select it. Annoying, but it gets the job done.
A last related note is the use of the em space which I rely on a lot for formatting Chinese passages and translations. The em space can be accessed by entering Unicode mode, typing "em space," and tabbing a couple of times to select, but that's a lot of typing for just a space so it's easier to use numeric Unicode mode, accessed with Ctrl+Shift+u on my system, to enter "2003" for its code. It's just one four-digit number to remember and much simpler than searching with the description.
Unicode mode, if you're so inclined, also means you can enter emojis on the fly! It's less of an issue with clients like the Mastodon web app or Element for Matrix where you can simply lead with a colon to type in emoji descriptions, and Unicode search mode is very finicky and hard to use if you don't know your exact keywords, but once you're used to it you can enter emojis like 🤭 (can be found by "smiling eyes hand") 🙄 (found by "rolling eyes") 🔪 (easiest to find by typing "hocho") pretty easily.