1830_emacs lisp的交互式模式

2023-12-10 20:01
文章标签 模式 交互式 emacs lisp 1830

本文主要是介绍1830_emacs lisp的交互式模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

org-mode的标记语法

Grey

全部学习汇总: GitHub - GreyZhang/g_org: my learning trip for org-mode

交互式模式

emacs的交互式模式让我对emacs的生命力有了更进一步的认识,但是我并没有找到什么特别丰富的资料做这方面的学习与分析。尤其是理论与实践相结合的那种教程,比较缺乏。这方面,李杀一直是一个走在浪潮顶端的先锋者。而我这次了解的大部分信息也是来自于李杀的网页。
感谢李杀!这里是李杀的网页: Emacs Lisp: Interactive Form

功能介绍

交互式模式的两个主要目的:
- 进行命令式的交互

  • 一种参数传递的机制

几种模式

交互式模式设计的函数可以通过几个关键字符来提供不同形式的参数获取,分别如下:
 

序号

关键字符

作用

1

s

提示输入字符串作为参数

2

n

提示输入数字作为参数

3

r

提示通过region作为参数

获取字符串参数

如下是一个使用的例子:
#+begin_src emacs-lisp (defun ask-name (x) "Ask name." (interactive "sEnter name: ") (message "Name: %s" x))

#+end_src

这一段交互函数在调用的时候可能会与接下来的数字类做一个对比后让人有几分费解,尤其是输入的信息全都是数字的时候。其实,在交互模式下,输入的一串数字也完全可能是字符串。

获取数字参数

如下是一个使用的例子:
#+begin_src emacs-lisp (defun ask-age (x) "Ask age." (interactive "nEnter age: ") (message "Name: %d" x))

#+end_src

这一个交互函数的测试,如果输入的信息不是数字的时候就会得到一个提示:请输入数字信息。比如,当我们输入一个abc的时候就会得到这样的信息。结合上面的字符串的处理,感觉上其实软件获取的全都是字符串,之后做了格式的转换。

获取一个区域的起始位置作为参数

如下是一个使用的例子:
#+begin_src emacs -lisp (defun print-region-boundary (x y) "Prints region start and end positions" (interactive "r") (message "Region begin at: %d, end at: %d" x y))

#+end_src

这一个交互函数在执行的时候就需要跟编辑功能挂钩了,这里的xy其实是获取的我们在emacs编辑器中选中一个区域的开始以及结束的位置。我大概看了一下,其实是这个文件逐个字符去计数所获取到的位置信息。

调用方法

这里的调用方法主要是从功能角度来考虑,主要是分为三种。

纯粹的交互

这个就是一个纯粹的动作处理。

根据字符串参数做处理

这个不仅有动作处理,还能够根据参数信息做响应处理。

根据列表信息做处理

这个跟上面的这个功能类似,但是实现的功能更加复杂广泛。而且,这个有一个更好的有点是在于list可以作为组合信息返回。

关于这种模式的一点思考

之前看各种编辑器之争的段子的时候就曾经看到过一个描述:emacs是一个不错的操作系统,就是编辑器差了点儿。那么,是什么原因让很多人觉得emacs是一个操作系统呢?我觉得这个交互式模式下的一些功能设计功不可没,这不仅让emacs有了类似UNIX的shell交互模式,而且可以直接基于这样的功能进行二次开发,的确是非常好的设计。
无论接触什么编程语言,我最初的尝试一般都是进行代码堆积。有时候,我觉得我弄得一些代码不能够称之为是软件设计,只能叫做最为粗浅的脚本,兴许很多人的脚本设计都是有着精心的设计的,而不是简单的功能堆积。但是,接触了emacs的这种设计模式之后,从直觉上就让我放弃了一些这种无脑堆料的想法。直接让我开启了深一些的思考:借助于这样的平台,我该如何与这个世界进行交流?或许,这也是emacs在如今一直生生不息的原因吧!

这篇关于1830_emacs lisp的交互式模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478208

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2