Element-Inhalt markieren

Im Forum frameusers-de kam die Frage auf nach einem Tastaturkürzel, mit dessen Hilfe man nur den Inhalt eines Elements markieren könnte.

Markus Wiedenmaier präsentierte daraufhin eine Lösung mit ExtendScript für FrameMaker 10, seinen Code habe ich nach FrameScript übertragen, die wichtigsten Zeilen folgen. Die aktuelle Version kann hier geladen werden:

Das Skript muss installiert werden und erstellt zur Zeit zwei Menüpunkte am Ende des Menüs „Element“, die Tastenkürzel sind Esc h e t (highlight element text) bzw. Esc h e c (highlight element content).

Event Initialize
    If (Session.ProductIsStructured)
        Local lvMenu lvCmd;

        Get Object Type(Menu) Name('ElementMenu') NewVar(lvMenu);
        New Command Name('SWAT_CMD_SELECTELEMENTTEXT')
            Label('Select text node') Shortcut('\!het')
            NewVar(lvCmd) EventProc(SelectText) 
            AddTo(lvMenu) EnabledWhen(EnableNeedsDocpOnly);
        Set lvCmd.KeyboardShortcutLabel = 'Esc h e t';
        New Command Name('SWAT_CMD_SELECTELEMENTCONTENT')
            Label('Select element content') Shortcut('\!hec')
            NewVar(lvCmd) EventProc(SelectContent) 
            AddTo(lvMenu) EnabledWhen(EnableNeedsDocpOnly);
        Set lvCmd.KeyboardShortcutLabel = 'Esc h e c';

    EndIf
EndEvent

Event SelectText
    Local lvDoc(Session.ActiveDoc);
    Local lvSel(lvDoc.ElementSelection);
    Set lvSel.Begin.Offset = 0;
    Set lvSel.End.Offset = ObjEndOffset;
    Local lvTextRange;
    // EUtl.Convert{} requires version 5
    Set lvTextRange = EUtl.Convert{lvSel, 'TextRange'};
    Set lvDoc.TextSelection = lvTextRange;
EndEvent

Event SelectContent
    Local lvDoc(Session.ActiveDoc);
    Local lvSel(lvDoc.ElementSelection);
    Local lvCurrentElement;
    If (lvSel.Begin.Child
      and lvSel.Begin.Child.ElementDef 
      and lvSel.Begin.Offset = 0)
        Set lvCurrentElement = lvSel.Begin.Child;
    Else
        Set lvCurrentElement = lvSel.Begin.Parent;
    EndIf
    Local lvTextRange;
    Set lvTextRange = lvCurrentElement.TextRange;
    Set lvTextRange.Begin.Offset = lvTextRange.Begin.Offset + 1;
    Set lvDoc.TextSelection = lvTextRange;
EndEvent