The original code that made this happen was tied to the Compass or Clock, I don't recall which. However, since the changes to those components and integration into the map, it doesn't function correctly any longer.
Keep MainHUD windows visible would not affect the Personabar since it is part of the custom component windows and not dynamically 'pushed' by SOE.
What I did was tie all my launch functions to the OnTextChange trigger in the player name of the player window. This way each time a character change occurs (logging new toons), it fires the launch sequence I defined.
Just search eq2ui_mainhud_player.xml for gamedata.self.name and you should find the code below. Insert the OnTextChange code I show in the example and you are good to go.
The only time this doesn't work is if you camp to character, since your name doesn't change on reload, it doesn't fire this trigger.
Code:
<Text AbsorbsInput="false" Activated="true" BackgroundColor="#8800FF" BackgroundOpacity="0.275" DynamicData="/GameData.Self.Name" Font="/Fetish.Fonts.FontArialBold14T" Location="1,1" Margin="0,-2,0,0" Name="Name" OnTextChange="show_window=(Custom.Personabar) show_window=(Custom.Personabar)" onautoattackeffector="AutoAttackEffector" onrangedautoattackeffector="RangedAutoAttackEffector" PackLocation="left,top" ScrollExtent="132,14" ShadowStyle="/ShadowStyles.Outline1" Size="132,14" TextAlignment="Center" TextAlignmentVertical="Center">Longestnameposs</Text>
Hope this helps.