diff --git a/tools/virsh.c b/tools/virsh.c index 77d3754efd..513c22cde2 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -347,8 +347,9 @@ virshInit(vshControl *ctl) virshControlPtr priv = ctl->privData; /* Since we have the commandline arguments parsed, we need to - * re-initialize all the debugging to make it work properly */ - vshInitDebug(ctl); + * reload our initial settings to make debugging and readline + * work properly */ + vshInitReload(ctl); if (priv->conn) return false; diff --git a/tools/vsh.c b/tools/vsh.c index e6ecc03854..1aa8f5bc9d 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -2738,6 +2738,25 @@ vshInit(vshControl *ctl, const vshCmdGrp *groups, const vshCmdDef *set) return true; } +bool +vshInitReload(vshControl *ctl) +{ + if (!cmdGroups && !cmdSet) { + vshError(ctl, "%s", _("command groups and command are both NULL " + "run vshInit before reloading")); + return false; + } + + vshInitDebug(ctl); + + if (ctl->imode) + vshReadlineDeinit(ctl); + if (ctl->imode && vshReadlineInit(ctl) < 0) + return false; + + return true; +} + void vshDeinit(vshControl *ctl) { diff --git a/tools/vsh.h b/tools/vsh.h index e2e33ba160..b6876048cb 100644 --- a/tools/vsh.h +++ b/tools/vsh.h @@ -303,6 +303,7 @@ int vshCommandOptTimeoutToMs(vshControl *ctl, const vshCmd *cmd, int *timeout); void vshPrintExtra(vshControl *ctl, const char *format, ...) ATTRIBUTE_FMT_PRINTF(2, 3); bool vshInit(vshControl *ctl, const vshCmdGrp *groups, const vshCmdDef *set); +bool vshInitReload(vshControl *ctl); void vshDeinit(vshControl *ctl); void vshInitDebug(vshControl *ctl); void vshDebug(vshControl *ctl, int level, const char *format, ...)