zoukankan      html  css  js  c++  java
  • 使用elisp脚本编程

    使用elisp脚本编程

    1 引言

    目前,编程脚本语言python等非常流行,当然python有很强的优势,emacs作为一种编辑器也为python提供了很好的编辑环境。但是对于一些基本的逻辑处理,字符串处理,输入输出处理等,作为Emacs的脚本语言Elisp已经非常强大了,而且简约的函数数编程非常令人喜欢,学习也非常容易,利用emacs内置的一些帮助方式,在目前的需求下,几乎再也不需要额外的elisp学习资料。所以我坚持使用elisp来做一些处理,但是希望写好的程序也能给不会emacs的人使用,所以想写下这篇博客,希望有同样想法的emacser友喜欢,也希望emacs在国内能够更加地流行。

    2 目的

    在引言中也已经提到了,写这篇文章的主要目的是想编写单独的elisp脚本,具有“标准输入输出”功能,能够完成其他编程脚本具有的绝大部分功能,正常运行于所有装配有emacs编辑器的平台之上,也能让自己编写的elisp让非Emacser正常使用。 下面列举一些使用elisp编程能够到达的效果。

    3 elisp 能够编程的理由以及优势

    1. 写出单独的脚本文件,可以使用【emacs -nw -q -l "所在文件位置"】运行,也可以不使用-nw参数,以图形化启动。能够在emacs支持的所有平台上运行,跨平台能力强。
    2. emacs 零基础者也可以顺利运行程序,只需要打一个启动脚本的命令,或者elisp编写者可以直接给写一个bat脚本或者bash脚本。让运行elisp方式更加地简单。
    3. emacser可以在程序运行完的同时继续在显示结果的emacs上操作。因为elisp是借用emacs的elisp解释器运行的。所以,当elisp运行完毕后,界面仍然是emacs的界面,emacser可以继续使用这个emacs.
    4. 在上面一点的基础上,可以借用elisp内置于emacs的优势,使得显示效果更加地绚丽。你可以让emacs创建多个windows,甚至多个frame,然后在不同的windows上显示结果,emacs24后对emacs的内置功能也增加了不少,可以有更多地库函数供elisp使用,当然你也可以不用-q参数启动emacs,那样就可以使用emacs无穷地扩展性,作为emacser爱好者的你能想象的,这个是使用其他脚本语言很难达到的效果。
    5. 书写简单,功能强大。elisp语言非常简单,库函数丰富,而且最主要的是配套设施完善,具有edebug这个源码级的调试工具,也具有emacs内置的非常多的帮助方式。也因为emacs是开源的,所以在你面前,一切都可以是赤裸裸的。

           ….

           ….

    4 自我文档化

    当然学习elisp是非常方便的。emacs内置有两边elisp的书籍。启动emacs后按 快捷键Ctrl h i就可以进入到emacs的 *info*。
    这两本emacs的书籍如下,需要的可以自己前往看,当然也可以在emacs官网下载pdf版本,或者直接购买纸质版本。

    4.1 Elisp

    The Emacs Lisp Reference Manual

    4.2 Emacs Lisp Intro

    (A simple introduction to Emacs Lisp programming)

    4.3 emacs的elisp帮助系统

    如果你对一个函数或者变量不熟悉,你可以使用Ctrl h f或者Ctrl h v来查看它的使用方式。当然也可以使用快捷键Alt x ,输入find-function或者find-variable来直接观看其源代码。或者使用edebug直接来调试。

    5 几个简单的示例

    下面2个简单的示例都是在windows上使用[emacs -nw -q -l "test.el" ] 命令启动的。test.el为elisp脚本所在位置。可以用一张图为描述下,图貌似比较丑,使用emacs-graphviz生成的。

      

    图1

    其中的autoinsert部分没有用过的朋友可以参考emacswiki的介绍。autoinsert主要是插入一些公共模板,提高编程效率。在这里 可以把

    ;;;auto-insert 开始
    (setq inhibit-startup-message t);
    (insert "************************************************************\n")
    (insert "如需翻阅:请按CTRL+V向下翻阅,ALT+V向上翻阅\n");
    (insert "************************************************************\n")
    ;;;auto-insert 结束
    

    等一些公共部分用autoinsert自动插入。
    下面两个例子都相对简单:

    • 示例1主要示范交互功能,在终端下显示
    • 示例2示范多个buffer功能,在图形化下显示。

    希望有兴趣的朋友可以借用emacs编写更有吸引力的示例。

    5.1 示例1

    src:

    ;;;auto-insert 开始
    (setq inhibit-startup-message t);
    (insert "************************************************************\n")
    (insert "如需翻阅:请按CTRL+V向下翻阅,ALT+V向上翻阅\n");
    (insert "************************************************************\n")
    ;;;auto-insert 结束
    
    ;一些基本的环境获取--------------------------------------------------
    ;判断是否是windows操作系统
    (if (eq system-type 'windows-nt)
        (insert "当前操作系统是windows\n")
        (insert "非windows操作系统\n")
        )
    
    ;;;;设置和输出用户名
    (setq user-full-name "csophys")
    (insert (concat "你的用户名为" user-full-name  "\n"))
    
     ;输出系统home变量值
    (insert (concat "你的系统home变量为" (getenv "home") "\n"))
    
     ;显示emacs主版本号
    (insert (concat "你的emacs的主版本号为:" (number-to-string emacs-major-version)) "\n")
    ;;;;一些基本的环境获取-----------------------------------------------
    
    (insert "这是一个简单的字符串处理函数,输入一个带扩展名的文件名,去除它的扩展名\n")
    (insert (concat "去除扩展名后为:" (file-name-sans-extension (read-string "请输入一个含扩展名的文件名:"))"\n" ))
    
    (insert (concat "去除扩展名后为:" (file-name-sans-extension (read-string "请再次输入一个含扩展名的文件名:"))"\n" ))
    

    运行过程中的截图如下:

    图2

    图3

    图4

    5.2 示例2

    src:

    ;;;auto-insert 开始
    (setq inhibit-startup-message t);
    (insert "************************************************************\n")
    (insert "如需翻阅:请按CTRL+V向下翻阅,ALT+V向上翻阅\n");
    (insert "************************************************************\n")
    ;;;auto-insert 结束
    
    (create-file-buffer "result.txt")
    (switch-to-buffer "result.txt")
    (insert "正在进行一些计算,请安心等待结果....\n" )
    (insert "假设在进行一些耗时的运算......\n")
    (insert "假设在进行一些耗时的运算......\n")
    (insert "假设在进行一些耗时的运算......\n")
    (insert "假设在进行一些耗时的运算......\n")
    (split-window-below)
    (other-window 1)
    (snake)
    

    运行过程中的截图如下:

    图5

    Date: 2012-07-12 15:59:56 中国 (標準時)

    Author:

    Org version 7.8.11 with Emacs version 24

    Validate XHTML 1.0
  • 相关阅读:
    iOS-按钮的代码封装
    MAC_talk 笔记-之mac使用技巧
    关于简历
    win7系统下VS2010配置glew
    NOIP模拟:饼干(简单规律推导)
    c++ string and wstring conversion
    c++ 使用PID获取可执行文件路径
    c++ 使用PID获取顶级窗口句柄和标题
    c++ 去掉字符串首尾空格
    git include只包含某些文件
  • 原文地址:https://www.cnblogs.com/csophys/p/2588299.html
Copyright © 2011-2022 走看看