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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

class070 子数组最大累加和问题与扩展-上【算法】

class070 子数组最大累加和问题与扩展-上【算法】 code1 53. 最大子数组和 // 累加和最大子数组和 // 给你一个整数数组 nums // 请你找出一个具有最大累加和的非空子数组 // 返回其最大累加和 // 测试链接 : https://leetcode.cn/problems/maximum-subarray/ dp[i]&#xff…

【Docker】Docker Compose,yml 配置指令参考的详细讲解

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

基于c++版数据结构基于数组栈改-Python思维总结

##栈部分-(叠猫猫) ##抽象数据类型栈的定义:是一种遵循先入后出的逻辑的线性数据结构。 换种方式去理解这种数据结构如果我们在一摞盘子中取到下面的盘子,我们首先要把最上面的盘子依次拿走,才可以继续拿下面的盘子&…

【Java期末复习资料】(2)常见例题 //持续更新

本文章主要是常见例题,解析不会太详细,有问题、不会的可以给我发消息哦,后续会出模拟卷 常见例题: 1.下列跟Java技术平台有关的是(ABD) A.JVM B.JDK C.JPN D.JRE 2.面向对象的特征包括(ACD&…

wxPython的控件tree

wxPython树控件介绍 树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl。 wx.TreeCtrl常用的方法有 AddRoot(text, image-1, selImage-1, data…

在Deepin中安装x11vnc工具并结合内网穿透软件实现远程访问桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

P4 Qt如何添加qss样式表文件和添加图片资源

目录 前言 01 添加图片资源文件 02 添加qss文件 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Qt基础_ChenPi的博客-CSDN博客》✨✨✨ 🌺本篇简介 :这一章…

JVM Optimization Learning(六)

目录 一、JVM Optimization 1、Shenandoah Shenandoah的使用方法 2、ZGC ZGC的版本更迭 ZGC的使用方法 ZGC的参数设置 3、JMH测试GC性能 一、JVM Optimization 1、Shenandoah Shenandoah是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah并发执行大部分…

机器人纯阻抗控制接触刚性环境(阻尼影响因素)

问题描述 在机器人学中,阻抗控制是一种常用的控制策略,用于管理机器人在与环境交互时的运动和力。阻抗控制背后的关键概念是将环境视为导纳,而将机器人视为阻抗。 纯阻抗控制接触刚性环境时,机器人的行为方式主要受其阻抗参数的…

数据结构和算法专题---6、定时算法与应用

本章我们会对定时算法做个简单介绍,包括常用的定时算法(最小堆、时间轮)的概述、实现方式、典型场景做个说明。 概述 系统或者项目中难免会遇到各种需要自动去执行的任务,实现这些任务的手段也多种多样,如操作系统的…

【C++】使用“/**/“进行注释的好处

2023年12月10日,周日晚上 我今天下午看Google Chrome的源码时,才发现"/**/"原来还能这么用 使用"/**/"的好处就是,可以在任何地方进行注释,哪怕是参数列表 void CircularWindow::enterEvent(QEvent *event/…

【Python】判断域名是否合法

python判断域名是否合法|校验域名 域名以点号分隔成多个字符串。单个字符串由各国文字的特定字符集、字母、数字、连字符(-)组成,字母不区分大小写,连字符(-)不得出现在字符串的头部或者尾部。单个字符串长…

GitHub Enterprise Server 添加代码安全、自动化功能

GitHub的软件更新用于管理私有服务器上的存储库,具有GitHub容器注册访问、Dependabot安全警报和更新以及可重用工作流的特性。 GitHub Enterprise Server 3.5是GitHub用于托管和管理私有服务器上存储库的最新版本,它引入了新的代码安全特性,新…

Helm 常用运维命令

原理参考 ## https://blog.csdn.net/knight_zhou/article/details/122079292 常用运维命令 helm search:   搜索charthelm pull:    下载chart到本地目录查看helm install:   上传chart到Kuberneteshelm list:     列出已发布的chart

【开源】基于Vue和SpringBoot的车险自助理赔系统

项目编号: S 018 ,文末获取源码。 \color{red}{项目编号:S018,文末获取源码。} 项目编号:S018,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

Maven基础

目录 Maven坐标 坐标简介 主要组成 Maven依赖管理 配置依赖 依赖简介 配置依赖 依赖传递 依赖传递简介 排除依赖 依赖范围 生命周期 生命周期简介 执行指定生命周期 Maven坐标 坐标简介 Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资…

Redis交互速度慢,CPU占用100%,集群方案,报错等问题

后续补充结论 仔细查看前辈们堆的代码中发现居然调用了大量key*查询,导致走的遍历非常慢!因为这相当与全部数据量遍历,即这个原因导致了查询速度与数据量成正比,推测也是CPU占用高的元凶;即使加上key前缀再匹配*也会走…

Python开发运维:Python调用K8S API实现资源管理

目录 一、实验 1.Python操作K8S API获取资源 2.Python操作K8S API创建deployment资源 3.Python操作K8S API删除k8s资源 4.Python操作K8S API修改k8s资源 5.Python操作K8S API查看k8s资源 二、问题 1.Windows11安装kubernetes报错 2.Python通过调用哪些方法实现Pod和De…

在SpringData JPA 中实现对持久层的操作

1.导入依赖 hibernate 这个依赖自带实现JPA接口 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><depen…

TCP三次握手、四次挥手及状态转换详解

1.什么是TCP协议&#xff1f; 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;位于网络OSI七层模型的第四层&#xff0c;IP协议一起工作&#xff0c;TCP层是位于IP层之上…