Copy link to clipboard
Copied
For "debuging" purposes, i want to call from a script a "force redraw" of the current layout window (default keyboard shortcut Shift+F5). I can't find anything like that in the DOM, and i was thinking of invoking a menu.. but can't find the menu item for it either..
anyone?
Or maybe minimizing, maximizing the specific layoutWindow of the document?
"Force Redraw" should be available by its ID value 318:
//Invoke the menu "Force Redraw":
try{app.scriptMenuActions.itemByID(318).invoke()}catch(e){$.writeln(e.message)};
Uwe
Copy link to clipboard
Copied
Maybe recompose something (a text frame or something like that). Does that work?
Or juggle with the screen mode:
app.windows[0].screenMode = ScreenModeOptions.PREVIEW_OFF
app.windows[0].screenMode = ScreenModeOptions.PREVIEW_TO_BLEED
Never done this: I usually try to prevent screen redraws!
Peter
Copy link to clipboard
Copied
Or maybe minimizing, maximizing the specific layoutWindow of the document?
"Force Redraw" should be available by its ID value 318:
//Invoke the menu "Force Redraw":
try{app.scriptMenuActions.itemByID(318).invoke()}catch(e){$.writeln(e.message)};
Uwe
Copy link to clipboard
Copied
Thanks Uwe.
@Peter: I don't dare recompose anything, as this script is basicly a helper tool for a last visual inspection of the document, before signing it off. The screenmode toogleing creates a huge visual flicker, that mostly defeats the purpose of fast previewing the document, and if the document is large enough will give you a headache at least (at most it will make you spill your lunch).
Copy link to clipboard
Copied
Absolutely. I didn't know Force Redraw existed. Where in the menus is it (just curious)?
Copy link to clipboard
Copied
good question.. i only know (and use extensivly) the keyboard shortcut (shift+F5). probably it's hidden by default.
Copy link to clipboard
Copied
@Vamitul & Peter ā "Force Redraw" ("Aktualisierung erzwingen" in my German version of InDesign) is a very old feature that dates back at least to InDesign CS3.
You can guess that from its relative low ID value of 318.
I don't know if it ever got an individual UI component like a menu command visible to the user, but it resides in the [Standard] set of keyboard shortcuts.
I just opened my German InDesign CS3 and it is available there:
"Ansichten, Navigation" in German.
Maybe "Views, Navigation" in English?
Uwe
Copy link to clipboard
Copied
And there are several others in the same section:
ID | Menu Command |
318 | Force redraw | |
319 | New default document | |
324 | Activate last-used field in panel | |
325 | Close all | |
326 | Save all | |
327 | Close document | |
328 | Open context menu | |
329 | Next window | |
330 | Previous window |
Uwe
Copy link to clipboard
Copied
Laubender wrote
Or maybe minimizing, maximizing the specific layoutWindow of the document?
"Force Redraw" should be available by its ID value 318:
//Invoke the menu "Force Redraw": try{app.scriptMenuActions.itemByID(318).invoke()}catch(e){$.writeln(e.message)};
Uwe
FWIW:
it seems that itemByID(318) is working, but itemByName() is not working with "Force Redraw":
// Looking in vain for a working string with "Force Redraw":
// I would expect that with my German version of InDesign:
app.scriptMenuActions.itemByName("Force Redraw").isValid; // returns false
// Let's see if the found string "$ID/Force Redraw" will work. Apparently not:
var resultsArray = app.findKeyStrings( app.scriptMenuActions.itemByID(318).title );
app.scriptMenuActions.itemByName( resultsArray[0] ).isValid; // returns false
// Here a variant of the same result:
var resultsArray = app.findKeyStrings( app.scriptMenuActions.itemByID(318).name );
app.scriptMenuActions.itemByName(resultsArray[0]).isValid; // returns false
// Also this will not work using my German version of the string in my German InDesign:
app.scriptMenuActions.itemByName( app.scriptMenuActions.itemByID(318).name ).isValid; // returns false
app.scriptMenuActions.itemByName( app.scriptMenuActions.itemByID(318).title ).isValid; // returns false
// However using itemByID() instead of itemByName() would work.
// Just tested with my German InDesign CC 2019 on Windows 10:
app.scriptMenuActions.itemByID(318).isValid; // returns true
Regards,
Uwe
Copy link to clipboard
Copied
Hello Uwe,
This worked very well for me, thanks.
It would be nice if there was a more subtle way. I really just want to redraw a story, even better a selection.
P.
Copy link to clipboard
Copied
Hi Pickory ,
"Recompose All Stories" could be an alternative perhaps.
But it's also not that subtle:
app.menuActions.itemByName("$ID/Recompose all stories").invoke();
See also this:
Also consider method recompose() that is available for all text objects, tables, rows and columns or individual table cells.
Regards,
Uwe
Copy link to clipboard
Copied
I'm trying to add a page refresh to a script of mine, and it doesn't seem to be working in a loop:
for(i = 0;i<5;i++){
app.activeWindow.activePage = app.activeDocument.pages[i];
$.sleep(2000);
try{app.scriptMenuActions.itemByID(318).invoke()}catch(e){$.writeln(e.message)};
}
Are there any methods that would allow the document to refresh after navigating to each page and pausing for a few seconds? Just a nice to have in the script.