【问题标题】:Mac os terminal: Clickable text in terminal window (c executable)Mac os 终端:终端窗口中的可点击文本(c 可执行文件)
【发布时间】:2019-09-15 21:06:19
【问题描述】:

我正在尝试在 mac os 终端中向用户请求输入。我的程序是用 c 编写的,我希望有可点击的文本,允许用户单击是或否来让我的 c 程序执行或不执行某个动作/功能。

例如,我希望看到类似的内容:

您想验证您的电子邮件吗? [是] [否]

然后我将能够单击是或否(所以基本上是/否是像按钮一样的文本)。

我没有找到任何可以回答我的问题的东西,这在 c 中是否可行。也许我可以从我的 c 程序中调用某种特定于 mac os 的函数。

非常感谢您的帮助!

【问题讨论】:

  • 欢迎用户 10949666。问题不在于 C。请记住,在几乎所有计算机上,所有代码都下降到 C 或同等水平,然后再下降到汇编程序,最后到机器代码。问题是关于“终端”,它只知道“关键事件”(击键),而不是“鼠标事件”。您说的是 macOS 提供的“终端”应用吗?
  • 感谢您的澄清!是的,我说的是终端应用程序,它是 mac os 上预装的应用程序。
  • 我不知道有什么方法可以在 Terminal.app 中直接使用鼠标事件。如果您搜索“终端中的鼠标事件”,您会找到一些针对 xterms 的解决方案。一个非常愚蠢的解决方法是使用带有 Web 服务的 URL 作为包装器。你可以例如执行echo 'http://www.example.com/yes',然后在打印的 URL 上单击鼠标右键,然后选择“打开 URL”。但这很讨厌。
  • 这可以帮助你:stackoverflow.com/questions/4230867/…——这是相反的,但它显示了 AppleScript 的集成作为可能的解决方案。
  • 非常感谢您的帮助!

标签: c macos terminal


【解决方案1】:

部分回答

要在终端中获得鼠标点击,您必须通过 Cmd-R 在 Terminal.app 中启用“鼠标报告”。 (如果您不想依赖它,可以从 Terminal.app 中启动 xterm。)

然后您可以使用此序列将鼠标点击转换为击键:

echo -e "\033[?1000h"

只需发出它,然后在终端窗口中单击。 要再次禁用它,请使用:

echo -e "\033[?1000l"

此 CSI 序列具有以下格式:ESC [ ?数量 l/h

更多详情可以在这里找到:XTerm Control Sequences

请注意,Terminal.app 不会支持所有 xterm 功能。

用于启用的 Quick'n'dirty C 代码:

#include <unistd.h>
#define MR "\033[?1000h"
int main() { write(1,MR,sizeof(MR)-1);return 0;}

“鼠标击键”可以从 STDIN 读取为其他击键。

替代解决方案

除了 C,您还可以使用 AppleScript。

【讨论】:

  • 太棒了!几乎我需要的一切!您知道如何将击键传递给 c 程序吗?哦,这在 c 中有效还是仅在 bash 中有效?
  • 这适用于 Bash、C 以及实际上可以打印控制序列的每种语言。感谢您接受它作为答案。顺便说一句 - 如果你能做到这一点,那么也请投票。
猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2021-08-10
  • 2011-09-02
相关资源
最近更新 更多