资讯专栏INFORMATION COLUMN

PHP--手摸手,教你撸一个会自动补全的命令行工具1

Chiclaim / 708人阅读

摘要:前言一次在使用的时候,发现使用命令行的时候有些关键字会自动提示。介绍随着,等框架的流行,命令行工具越来越流行,但是很多时候命令太多,根本无法记住所有参数,或者参数太长输入太不方便。下文,我们一起来优化这个工具。备注不支持自动补全

前言

一次在使用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 等都是非常优秀的脚手架,通过脚手架,我们可以快速初始化一个项目,无需自己从零开始一步步配置,有效提升开发体验。尽管这些脚手架非常优秀,但是未必是符合我们的实际应用的,我们可以定制一个属于自己的脚手架(或公司通用...

    caoym 评论0 收藏0
  • 前端之从零开始系列

    摘要:只有动手,你才能真的理解作者的构思的巧妙只有动手,你才能真正掌握一门技术持续更新中项目地址求求求源码系列跟一起学如何写函数库中高级前端面试手写代码无敌秘籍如何用不到行代码写一款属于自己的类库原理讲解实现一个对象遵循规范实战手摸手,带你用撸 Do it yourself!!! 只有动手,你才能真的理解作者的构思的巧妙 只有动手,你才能真正掌握一门技术 持续更新中…… 项目地址 https...

    Youngdze 评论0 收藏0
  • 摸手教你用canvas实现给图片添加平铺水印

    摘要:最近项目中遇到一个需求,需要把一张图片加上平铺的水印类似这样的效果首先想到的是用完成这种功能,因为我之前也没有接触过,所以做这个功能的时候,就是一步一步的摸索中学习,过程还是挺的,接下来跟我一步步来实现这个功能以及发现一些的坑吧。 最近项目中遇到一个需求,需要把一张图片加上平铺的水印 类似这样的效果showImg(https://segmentfault.com/img/remote/...

    崔晓明 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<