1830_emacs lisp的交互式模式

2023-12-13 08:01:15

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在如今一直生生不息的原因吧!

文章来源:https://blog.csdn.net/grey_csdn/article/details/134911400
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。