旧东西:
背景: - 最终的目标是在我的.bash_profile中添加一个脚本,如果我输入一个提交消息并且它太长就改变文本颜色警告我(是的我知道vim有这样的东西) . 进展: - 我找到了读取-n选项,这导致我写这个:while true;做
#这次击中了第53个角色
读-rn53输入
#我已经将别名提交给gc,所以if只是检查我是否正在写提交
if [“$ {input:0:2}”=“gc”];然后
printf“\ n消息变长”
科幻
DONE
问题: - 但是,运行此操作会使用户退出bash提示符 . 在正常提示下我需要一种方法来做这样的事情 . 我找不到这样的信息 . 这是否意味着它不可能?或者我只是以错误的方式去做?
新进展:
我找到了 bind -x
选项让我写这个:
check_commit() {
if [ "${READLINE_LINE:0:13}" == 'git commit -m' ] && [ ${#READLINE_LINE} -gt 87 ]; then
echo "Commit is $((${#READLINE_LINE} - 87)) characters too long!"
fi
READLINE_LINE="$READLINE_LINE$1"
READLINE_POINT=$(($READLINE_POINT+1))
}
bind -x '"\"": check_commit "\""'
它会听一个双引号,如果我正在写一个很长的提交消息告诉我有多少字符我超过了限制 . 同时将我输入的字符放入当前行,因为它被绑定吃掉了 .
新问题:
现在我只需要一种方法来放入一个正则表达式,字符列表或至少一个变量而不是 \"
所以我可以听更多的键(是的,我知道 bind -x
可能不是这样用的 . 我可以自己检查性能/足迹/稳定性) . 我尝试了 "$char"
, "${char}"
, "$(char)"
和其他一些东西,但似乎都没有用 . 这里的正确方法是什么?
1 回答
AFAIK,如果您希望在正常提示期间(当评估
PROMPT_COMMAND
和PS1
时)发生这种情况,则无法以理智的方式进行 . 这将涉及为每个insert-self
和类似物绑定自定义编译的readline函数 .如果你想在一个使用
prompt
builtin的脚本中发生这种情况,那么循环可能很难实现喜欢命令 . 这将允许您创建
munge_buf()
以在需要时更改当前键入的文本,buf_warn_len()
以计算要警告的新len(如果已显示警告,则可能非常大),并且buf_warn_msg()
以基于缓冲区派生警告消息 .