2016-06-23 1 views
1

En utilisant le codeComment supprimer un (sous) menu et toutes ses traces d'existence?

#targetengine "mine" 
var mainmenu = app.menus.items("$ID/Main"); 
var menu = mainmenu.submenus.add("Test"); 

J'ai ajouté un sous-menu au menu d'InDesign, que je puis enlevés par

menu.remove(); 
delete menu; 

Malheureusement, lorsque je tente de recréer le menu, rien ne se passe depuis InDesign semble penser que est toujours là - jusqu'à ce que je redémarre InDesign, après quoi le menu apparaît (mais sans aucun élément ajouté). Comment puis-je supprimer définitivement le menu afin qu'il puisse être recréé plus tard sans avoir à redémarrer InDesign? Le menu également apparaît toujours dans les préférences du menu InDesign (pire encore, même deux fois depuis que j'ai essayé « Test » et « & Test » comme nom de menu), que je voudrais fixer aussi bien ...

modifier Il s'avère que ce comportement étrange ne se produit que lors de l'exécution du script via le panneau de script d'InDesign, mais pas via le démarrage ni le toolkit ExtendScript. Cependant, les entrées de menu restent après la suppression.

Répondre

1

Lorsque vous utilisez une session persistante, il est bon de vérifier ce que vous faites. Dans votre cas, cela signifie vérifier la possibilité d'une préexistence de menu avant d'essayer de l'ajouter.

#targetengine "mine" 
var mainmenu = app.menus.item("$ID/Main"); 

var menu = mainmenu.submenus.item("Test"); 
!menu.isValid && menu = mainmenu.submenus.add("Test", LocationOptions.before, mainmenu.submenus.item("$ID/#Keyboard_Help")); 

//comment ON/OFF to remove or not the menu 
//menu.remove(); 

Point secondaire, je ne pense pas que vous devez définir une option d'emplacement comme un menu ajouté dans la barre de menu principal ne peut pas être placé après le menu d'aide. Sauf si je me trompe, InDesign place toujours le menu d'aide sur la dernière position à droite.

+0

Le problème est, même après 'menu.remove(); delete menu; ',' mainmenu.submenus.items ("Test"). isValid' sera toujours 'true' et le menu précédemment supprimé ne s'affichera pas tant que je n'aurai pas redémarré InDesign, après quoi je devrai rajouter les éléments du menu. –

+0

Hm, je n'ai jamais pris la peine de vérifier où InDesign place un menu par défaut, bon point cependant. –

+0

btw, si j'omets le 'LocationOptions.before', le nouveau menu est ajouté _after_" Aide " –

1

Il est probable que vous ayez créé de nombreuses références à l'objet de menu lors de tentatives précédentes et qu'il s'agit d'un moteur persistant, les références restent actives.

Redémarrez InDesign et il devrait le faire.

Voici quelques captures d'écran que j'ai faites à partir du script ci-joint. isValid varie de vrai à faux en fonction de l'étape du script et de l'existence du menu.

The menu has been added and is valid The menu has been removed and is no longer valid

#targetengine "mine" 
var mainmenu = app.menus.item("$ID/Main"); 

var menu = mainmenu.submenus.item("Test"); 
!menu.isValid && menu = mainmenu.submenus.add("Test", LocationOptions.before, mainmenu.submenus.item("$ID/#Keyboard_Help")); 
alert(menu.isValid); 
//comment ON/OFF to remove or not the menu 
menu.remove(); 

alert(menu.isValid); 
+0

Vous avez raison,' isValid' change - je devais avoir un mensonge global que j'ai réussi à "supprimer". Le problème restant est que le menu n'est pas recréé sans redémarrage ... Ou est-ce que ça ne vous arrivera pas si vous relancez le script? –

+0

btw selon [cet article] (https://forums.adobe.com/message/2183887#2183887) même un '# targetengine' n'est pas persistant dans les redémarrages d'InDesign. Il semble y avoir un changement plus fondamental dans les menus InDesigns eux-mêmes ... –

+0

J'ai créé un ADD | REMOVE | ADD | REMOVE et je peux confirmer que le menu peut être ajouté après le retrait de mon côté. #targetengine n'est pas permanent dans les redémarrages d'InDesign. Bien sûr que non, mais n'utilisez-vous pas votre script dans le dossier des scripts de démarrage? Cela peut expliquer vos problèmes. – Loic