Длина строки режима readline в командной строке bash

Длина строки режима readline в командной строке bash

Как узнать длину строки режима readline (например, @или (cmd)или (ins)), которая выводится перед приглашением bash? Эта строка режима активируетсяset show-mode-in-prompt onв .inputrc.

Я хочу определить длину этой строки изнутри $PROMPT_COMMAND.

Я пытаюсь выполнить перемещение курсора внутри tputприглашения, чтобы вывести некоторую информацию на правой стороне терминала (чтобы ее можно было перезаписать при необходимости), а затем возобновить печать приглашения слева, но мне нужно учитывать длину строки режима.

Вызывается ли $PROMPT_COMMANDснова и выводится ли приглашение повторно при изменении режима (например) emacs-mode-stringна vi-ins-mode-stringв качестве префикса?

решение1

На самом деле это не ответ на вопрос о длине строки режима, но обходной путь:

Я в итоге использовалКоды ANSI CSIдля сохранения и восстановления положения курсора. (Спасибо @tripleee за указатель).

Мне по-прежнему не удалось найти длину строки режима, даже когда я пытался получить позицию курсора с помощью PS1=$(getColumn)where , используя getColumnразличные вещи, основанные на:

Мой обходной путь с использованием кодов ANSI CSI можно найти здесьв ответ на "Выровнять часть подсказки по правому краю".

Я очень доволен решением, поскольку мне удалось обойтись без единого подпроцесса и сделать его shellcheckчистым.

Связанный контент