小编Isk*_*tvo的帖子

如何正确实现具有可变数量的std :: string_view参数的函数?

期望的行为

我基本上想要的是创建一个这样的函数:

void func(std::string_view... args)
{
    (std::cout << ... << args);
}
Run Code Online (Sandbox Code Playgroud)

它应该只能用于可转换为的类std::string_view.

例:

int main()
{
    const char* tmp1 = "Hello ";
    const std::string tmp2 = "World";
    const std::string_view tmp3 = "!";

    func(tmp1, tmp2, tmp3, "\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

应该打印: Hello World!


完成的行为

到目前为止,我来到这里:

template<typename... types>
using are_strings = std::conjunction<std::is_convertible<types, std::string_view>...>;

template<typename... strings, class = std::enable_if_t<are_strings<strings...>::value, void>>
void func(strings... args)
{
    (std::cout << ... << args);
}

int main()
{
    const char* tmp1 = "Hello …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-functions variadic-templates c++17

4
推荐指数
1
解决办法
253
查看次数

如何在 zsh 中自定义当前选定(突出显示)完成的外观?

主要问题

我想在所选完成的开头和结尾添加电力线字符,如下所示:

  1. 通过插入c并按下键启动完成菜单TAB
  2. 按向右箭头键在完成菜单中向右移动。
  3. 按向下箭头键在完成菜单中向下移动。

有什么方法可以让 zsh 看起来/行为像图片中那样吗?

笔记

在创建列以保持对齐正确时,应以某种方式考虑在开头添加的电力线三角形 + 空白字符和末尾的空白字符 + 电力线三角形。

奖金

在列表中每个补全内容的开头添加 2 个空格,这样当选择补全内容时,文本看起来就不会移到右侧。
(这个问题可以通过比较有选择和没有选择的完成情况来看出。)


另类问题

如果不更改 zsh 源代码就无法实现先前解释的行为,是否至少可以在所选完成的末尾添加电力线三角形?


我不成功的尝试

  • 我尝试过在样式中使用lcrc和变量,但这没有帮助: eclist-colors
    1. 完成列表排列不当,造成了各种视觉问题。
    2. 符号被插入到完成列表的所有元素中,而不仅仅是选定的元素中。
  • 我也尝试过使用该ma变量,但无法在开头正确插入字符:
    1. 该变量只需要一个代表颜色的数字,并且它可能包含在一些转义序列中,因此输出看起来不像预期的那样。

zsh zshrc zsh-completion

3
推荐指数
1
解决办法
976
查看次数