首页 > 其他分享 >如何用C写一个简易的基于终端的编辑器(1)

如何用C写一个简易的基于终端的编辑器(1)

时间:2024-08-03 22:50:58浏览次数:14  
标签:原生 读取 模式 简易 编辑器 终端 Enter 缓冲区 输入

参考文章

https://viewsourcecode.org/snaptoken/kilo/02.enteringRawMode.html 写得很详细

原生模式

我们要写的编辑器有点与众不同,按键功能的映射是由我们自己设置的,为了达到这一步,我们首先得进入原生模式

原生模式简单来说就是单纯的接收输入,不做任何其他处理,举个例子吧,当我们写文本时,我们要移动到下一行,就习惯按下 Enter 键,这个键会被映射为回车加换行,但在原生模式下,Enter 键就仅仅只是ASCII代码,不会做任何处理

除了按键功能映射的禁用,我们还要考虑到,我们怎样读取输入,程序怎样给出输出

举个例子,规范模式(其实就是正常模式)下,我们提供给程序的输入一般是通过 Enter 键确认发送,但在文本编辑器中,我们想要的是,直接读取,无需用户确认,简单来说就是按下一个字符,就读取一个字符

规范模式下是按行读取输入,就是用 Enter 键确认发送,原生模式下是按字节读取输入,就是按下一个字符,就读取一个字符

我们要了解到终端的回显功能,读取的输入是保存在缓冲区中,终端会打印缓冲区的内容显示给用户看,这个就是回显功能。原生模式下是禁用回显功能的,所以我们就得自己从缓冲区中获取内容并打印。

总结起来进入原生模式主要就三个方面吧

  • 关闭一些组合按键的功能映射(禁用功能)
  • 按行读取输入--->按字节读取输入(立即反应输入)
  • 从缓冲区中获取内容并打印(显示用户的输入)

本章主要实现的功能就是进入原生模式,其实主要是了解一些概念就可以了,代码实现不难

源码

https://gitee.com/winterz_space/kilo_editor.git

我的源码放在gitee上了,是new_kilo分支,参考文章的首页也有原作者的代码,放在github上,不过只有1个文件,推荐大家去阅读这篇文章,写得很详细

标签:原生,读取,模式,简易,编辑器,终端,Enter,缓冲区,输入
From: https://www.cnblogs.com/winter-z/p/18341258

相关文章

  • 实现一个终端文本编辑器来学习golang语言:第一章项目构建
    欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。更多介绍见https://www.cnblogs.com/Ama2ingYJ/p/18340634这里我把我们的文本编辑器项目命名为zedterm。首先第一步自然是初始化golang工程gomodinitzedterm作为文本编辑器,其中重要的一个工作便是......
  • 实现一个终端文本编辑器来学习golang语言
    欢迎!这个系列的博文会带你使用golang语言来编写一个你自己的文本编辑器。首先想说说写这个系列文章的动机。其实作为校招生加入某头部互联网大厂一转眼已经快4年了。可以说该大厂算是比较早的用golang语言作为主要后端开发技术栈的公司了,绝大部分后端项目的语言选型都是golang......
  • TinyVue v3.17.0 正式发布,推出了一款基于 Quill 2.0 的富文本编辑器,功能强大、开箱即
    你好,我是Kagol。我们非常高兴地宣布,2024年6月26日,TinyVue发布了v3.17.0......
  • 基于simulink的简易电机电力系统建模与仿真性能分析
    1.课题概述一个50HZ的简单电力系统如下图所示,在Simulink中建立仿真模型研究该系统的性能。         发电机G采用“SynchronousMachinepuFundamental”模型,变压器T采用“Three-PhaseTransformer(ThreeWindings)”模型,输出线路L采用“Three-PhaseSeriesRLCB......
  • mfc用printf输出调试信息到终端cmd
    前言全局说明mfc用printf输出调试信息到终端cmd一、说明环境:Windows11家庭版23H222631.3737VS2013二、printf打印调试信息2.1设置启用控制台打印2.1.1打开解决方案(项目)--属性2.1.2配置属性->生成事件->后期生成事件->命令行->编辑在框里填入......
  • 【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器
    【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器一、项目介绍1.1项目简介1.2使用方法二、本次实践介绍2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1安装Docker环境3.2检查Docker服务状态3.3检查Docker版本3.4检查docke......
  • Linux 常见编辑器
    命令行编辑器VimLinux上最出名的编辑器当属Vim了。Vim由Vi发展而来,Vim的名字意指ViIMproved,表示Vi的升级版。Vim对于新手来说使用比较复杂,不过学会了之后会有效率上的提升,建议先学会使用Vim编辑并保存文件,之后在使用的过程中再逐渐学习高级用法。Vim是Ubuntu......
  • 电子科技集团WJ20057型热网智能终端数据监测MODBUS通信协议
    WJ2007型热网智能终端数据监测MODBUS通信协议  1、 WJ2007终端增加数据通信协议,上传实时数据;采用MODBUS通信协议,格式见表1;   地址功能起始地址点数CRC校验0x010x030x000x000x000x420xC50xFB1byte1bytes2byt......
  • Qt项目——文本编辑器(功能模块④)
    项目地址:GitHub-Outlier9/CatEditor:Cat文本编辑器--Qt有帮助的话各位点点star啦,感谢!如果有需要学习该项目的人,觉得看文档较为困难,可以加我联系方式,给github点个star后可免费提供学习视频!!!(11)字体颜色文字设置颜色操作,在.ui界面对colorAction转到槽,选triggered信号,然......
  • ollama 简易使用教程
    ollama安装Install使用以下命令安装ollama:curl-fsSLhttps://ollama.com/install.sh|sh手动安装下载ollama二进制文件:sudocurl-Lhttps://ollama.com/download/ollama-linux-amd64-o/usr/bin/ollamasudochmod+x/usr/bin/ollama添加ollama作为启动服务(推......