摘要:前言一次在使用的时候,发现使用命令行的时候有些关键字会自动提示。介绍随着,等框架的流行,命令行工具越来越流行,但是很多时候命令太多,根本无法记住所有参数,或者参数太长输入太不方便。下文,我们一起来优化这个工具。备注不支持自动补全
前言
一次在使用symfony的时候,发现使用命令行的时候有些关键字会自动提示。
介绍随着laravel,symfony等框架的流行,命令行工具越来越流行,但是很多时候命令太多,根本无法记住所有参数,或者参数太长输入太不方便。
这时是否也想拥有一个像IDE中的自动补全功能?
想自动补全,必须获取命令行输入的数据,那么如何获取数据呢?
具体可以参考官方文档 PHP获取命令输入,这里我们使用一种写法
$c = fread(STDIN, 1);
这样我们就可以获取每次输入的按键。
获取单个字符进行了上面的操作以后,我们已经可以获取到输入的内容,但是发现一个问题,我们必须按下回车以后才可以获取到输入的内容,即使我们设置了fread最大读取的长度,那么究竟是什么问题的?
原来Linux终端中,默认是必须按下回车的。那么我们必须关闭这个功能。为了防止我们使用其他软件出现问题,我们不需要该功能后需要将其关闭。
//执行如下命令后,就可以一个字符一个字符的获取了 $sttyMode = shell_exec("stty -g"); shell_exec("stty -icanon -echo"); //恢复原来的状态 shell_exec(sprintf("stty %s", $sttyMode));
这时,我们在进行测试
$sttyMode = shell_exec("stty -g"); shell_exec("stty -icanon -echo"); $c = fread(STDIN, 1); var_dump($c); shell_exec(sprintf("stty %s", $sttyMode));简易自动补全
1, "xD0" => 1, "xE0" => 2, "xF0" => 3][$c & "xF0"]); } printf(" 33[k"); foreach($autoComplete as $one){ if (strpos($one,$c)===0){ printf($one); } } } } shell_exec(sprintf("stty %s", $sttyMode));
下面我们在优化一下,当输入A以后,让光标在A的后边
这样一个简易的自动补全工具就诞生了。下文,我们一起来优化这个工具。
备注:Windows不支持自动补全
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31655.html
摘要:管理文件当前用户目录下文件的增删改查是配置文件是默认的配置发布将本脚手架发布至上。 脚手架 vue-cli, create-react-app、react-native-cli 等都是非常优秀的脚手架,通过脚手架,我们可以快速初始化一个项目,无需自己从零开始一步步配置,有效提升开发体验。尽管这些脚手架非常优秀,但是未必是符合我们的实际应用的,我们可以定制一个属于自己的脚手架(或公司通用...
摘要:最近项目中遇到一个需求,需要把一张图片加上平铺的水印类似这样的效果首先想到的是用完成这种功能,因为我之前也没有接触过,所以做这个功能的时候,就是一步一步的摸索中学习,过程还是挺的,接下来跟我一步步来实现这个功能以及发现一些的坑吧。 最近项目中遇到一个需求,需要把一张图片加上平铺的水印 类似这样的效果showImg(https://segmentfault.com/img/remote/...
阅读 2913·2023-04-26 01:32
阅读 1496·2021-09-13 10:37
阅读 2240·2019-08-30 15:56
阅读 1654·2019-08-30 14:00
阅读 3018·2019-08-30 12:44
阅读 1943·2019-08-26 12:20
阅读 1001·2019-08-23 16:29
阅读 3206·2019-08-23 14:44