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.pswp.cn/news/211907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211907.shtml
英文地址,請注明出處:http://en.pswp.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層之上…