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