void (@NotNull ActionContext context, @NotNull @NlsContexts.Command String name, @Nullable Editor editor, Callable<? extends ModCommand> supplier) { ModCommand next = ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { return ReadAction.nonBlocking(supplier).expireWhen(context.project()::isDisposed).executeSynchronously(); }, name, true, context.project()); if (next == null) return; executeInteractively(context, next, editor); }