
Как узнать длину строки режима 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
различные вещи, основанные на:
- Получить вертикальное положение курсора
- https://stackoverflow.com/questions/2575037/how-to-get-the-cursor-position-in-bash
Мой обходной путь с использованием кодов ANSI CSI можно найти здесьв ответ на "Выровнять часть подсказки по правому краю".
Я очень доволен решением, поскольку мне удалось обойтись без единого подпроцесса и сделать его shellcheck
чистым.