GNU Emacs 24.3 即将发布
GNU Emacs 将于28日发布新的 24.3 版本。感谢 xfq 来稿
GNU Emacs 24.3主要为用户添加了如下新特性(相对于24.2):
默认的X toolkit现在是Gtk+3了。如果你configure的时候不用“--with-x-toolkit”/“--with-x-toolkit=gtk”/“--with-x-toolkit=yes”,configure就会尝试Gtk+3, 如果失败,再尝试Gtk+2。当然,如果你愿意,你也可以用“--with-x-toolkit=gtk2”或者“--with-x-toolkit=gtk3”来configure。
新的configure选项 “--enable-link-time-optimization”,只有用GCC 4.5.0编译的以后的才能用哦。
新的configure选项 “--without-all” 可以关闭各种默认打开的可选特性(比如图像支持等等)。
新的configure选项 “--enable-gcc-warnings” (用于开发和调试Emacs). 如果你用GCC编译Emacs,这可以打开编译时的一些错误检查。
configure选项 “--enable-use-lisp-union-type”被改名为“--enable-check-lisp-object-type”,因为Lisp_Object这个类型不再用union来实现了。
configure选项 “--disable-maintainer-mode”被移除了,因为没什么人用。
如果你的系统上有libtinfo的话,Emacs不再使用libncurses。
在FreeBSD和NetBSD上,configure不再把/usr/local/lib和/usr/pkg/lib添加到链接器的搜索路径。你若想用,必须自己加。
“rcs-checkin”和“vcdiff”这两个脚本被删除了(从bin和libexec目录)。前一个是因为没什么人用了,后一个是因为被vc-sccs替代了。
“--no-site-lisp”这个命令行参数现在也可以在Mac OS X上用了。
“C-h f” (“describe-function”) 现在可以知道autoloading了。当这个命令被调用时,如果docstring里有key substitution的话,那个函数的feature会被自动load,所以文档将被正确的显示。若要关闭此特性,把“help-enable-auto-load”设置为nil。
“C-h f” 现在把之前autoload过的函数显示为“autoloaded”了。
ImageMagick支持默认开启。“imagemagick-register-types”函数在Emacs启动时默认执行。
把“imagemagick-types-inhibit”设置为t就会禁用ImageMagick支持。
在minibuffer的文件名prompt里,“C-M-f”和“C-M-b”现在可以分别移动到下一个和前一个目录分割符了。不过这个功能ido和Icicles都可以很轻松的做到。
你可以在mode line的coding system indicator按鼠标中键来调用“set-buffer-file-coding-system”了。
emacsclient现在遵循“initial-buffer-choice”这个变量了。
新变量 “server-auth-key”可以指定一个分享式server key了。
Emacs现在可以在致命错误上显示backtrace了。
“C-x C-q”现在被绑定到了新的次要模式 “read-only-mode”,这个次要模式替代了“toggle-read-only”。
大部分的“y-or-n”提示现在允许你在不退出提示的情况下滚动窗口了。
在Package菜单中,新包会被标记为"new"。
如果你从bzr.sv.gnu.org的repository里的代码编译Emacs,新变量“emacs-bzr-version”会包含你用的Emacs revision。这个在报告bug的时候还是很有用的。
新变量 “enable-remote-dir-locals”,如果不为nil,允许远程目录局部变量的设置。
PCL-CVS的命令被从Tools菜单剔除,PCL-CVS的命令现在只能通过键盘调用。
文件局部变量"unibyte: t"被弃用,请使用"coding: raw-text"。
波斯语支持
新的输入法“vietnamese-vni”
在Mac OS X下终于可以使用native fullscreen了,真心不容易。
新的键绑定:“M-g c”绑定到“goto-char”
新的键绑定:“M-g TAB”绑定到“move-to-column”
“M-g TAB” (“move-to-column”)如果被交互式(无prefix argument)调用,提示输入列名。
新变量“yank-handled-properties”允许操作召回后的文本属性,而不是移除它们。
“C-u M-=”现在可以计算整个缓冲区的行数、字数和单词数了。
“C-x 8 RET”被绑定到了“insert-char”,“ucs-insert”被弃用。
“z”不再在大部分模式中有命令绑定,这个键以前被绑定为“kill-this-buffer”,但是 “z”太容易被误按了。
调用CL现在需要用 “(require ”cl-lib)”了。“cl-lib”和原来的“cl”差不多,除了“cl-lib”用了更清爽的命名空间,也就是说,所有的函数、宏、变量都有了"cl-"前缀或者"cl--"前缀。如果“cl”有一个特性名为“foo”,那么“cl-lib”的名字就叫“cl-foo”,除了少数 叫做“foo”的被改名为“cl-foo”而不是“cl-foo”。
当当前区域被激活时,dired的“m” (“dired-mark”), “u” (“dired-unmark”),“DEL” (“dired-unmark-backward”)和“d” (“dired-flag-file-deletion”)将mark/unmark/flag激活区域中所有的文件。
GHDL编译器被支持。
VHDL-AMS的支持被更新。
Apropos的face现在可以直接定制了。这些face的名字为“apropos-symbol”,“apropos-keybinding”,等等。详细请见“apropos”定制组,这里就不细说了。
定制apropos的老方法被移除(“apropos-symbol-face”, “apropos-keybinding-face”等等)
buffer menu被完全重写,变量“Buffer-menu-buffer+size-width”被弃用,请使用“Buffer-menu-name-width”和“Buffer-menu-size-width”。
你可以定制日历上每个月的标题,请看变量“calendar-month-header”的文档。
新的LaTeX日历风格,请看“cal-tex-cursor-week2-summary”。
Compile包有了一个新变量 “compilation-always-kill”。
“custom-reset-button-menu”现在默认为t
变量“term-default-fg-color”和“term-default-bg-color”被弃用。
你可以定制ANSI终端颜色了(通过定制“term-color-
”,“term-color-underline”和“term-color-bold”这些faces)。 notifications.el现在支持Notifications API 1.2了。
Flymake现在运用边缘位图来显示错误和警告,请看 “flymake-fringe-indicator-position”, “flymake-error-bitmap”和“flymake-warning-bitmap”.
FFAP变量“ffap-url-unwrap-remote”可以是一个链表,默认为'("ftp").
新变量 “mouse-avoidance-banish-position”可以指定“banish”mouse avoidance的移动位置。
新变量 “async-shell-command-buffer”可以指定当“Async Shell Command”正在被用的时候使用的缓冲区。
“which-func-modes”的新默认值是t,所以如果Which Function mode被启用,将被用于所有的主要模式。
“follow-intercept-processes”变量被移除。
“javascript-generic-mode”被弃用。
很多钩子变量被改名:
- semantic-lex-reset-hooks -> semantic-lex-reset-functions
- semantic-change-hooks -> semantic-change-functions
- semantic-edits-new-change-hooks -> semantic-edits-new-change-functions
- semantic-edits-delete-change-hooks -> semantic-edits-delete-change-functions
- semantic-edits-reparse-change-hooks -> semantic-edits-reparse-change-functions
- semanticdb-save-database-hooks -> semanticdb-save-database-functions
- c-prepare-bug-report-hooks -> c-prepare-bug-report-hook
- rcirc-sentinel-hooks -> rcirc-sentinel-functions
- rcirc-receive-message-hooks -> rcirc-receive-message-functions
- rcirc-activity-hooks -> rcirc-activity-functions
- rcirc-print-hooks -> rcirc-print-functions
- dbus-event-error-hooks -> dbus-event-error-functions
- eieio-pre-method-execution-hooks -> eieio-pre-method-execution-functions
- checkdoc-style-hooks -> checkdoc-style-functions
- checkdoc-comment-style-hooks -> checkdoc-comment-style-functions
- archive-extract-hooks -> archive-extract-hook
- filesets-cache-fill-content-hooks -> filesets-cache-fill-content-hook
- hfy-post-html-hooks -> hfy-post-html-hook
- nndiary-request-create-group-hooks -> nndiary-request-create-group-functions
- nndiary-request-update-info-hooks -> nndiary-request-update-info-functions
- nndiary-request-accept-article-hooks -> nndiary-request-accept-article-functions
- gnus-subscribe-newsgroup-hooks -> gnus-subscribe-newsgroup-functions
- input-method-inactivate-hook -> input-method-deactivate-hook
- robin-inactivate-hook -> robin-deactivate-hook
- quail-inactivate-hook -> quail-deactivate-hook
被弃用的包:
- assoc.el 大多数情况下,assoc+member+push+delq可以工作的非常好。而且这也是个让人头疼的包:不清晰的语义,低下的效率,还有不干净的命名空间。
- bruce.el
- cust-print.el
- ledit.el
- mailpost.el
- mouse-sel.el
- patcomp.el
以“*”开头的docstring不再表示用户选项。只有用defcustom定义的变量才被看做用户选项。函数“user-variable-p”被弃用,请使用“custom-variable-p”。
“defalias”, “defun”和“defmacro”的返回值有所改变,现在的值是未定义。
“set-buffer-multibyte” 现在在窄化缓冲区中不能使用了。
CL的“get-setf-method”函数将不复存在。
“dbus-register-signal”的参数将不只是字符串,而是关键字和关键字-字符串对。
一些函数改名了:
- hangul-input-method-inactivate -> hangul-input-method-deactivate
- inactivate-input-method -> deactivate-input-method
- quail-inactivate -> quail-deactivate
- robin-inactivate -> robin-deactivate
- viper-inactivate-input-method -> viper-deactivate-input-method
- viper-inactivate-input-method-action -> viper-deactivate-input-method-action
- ucs-input-inactivate -> ucs-input-deactivate
改名的变量:
- follow-deactive-menu -> follow-inactive-menu
- inactivate-current-input-method-function -> deactivate-current-input-method-function
全新的基于样例的Elisp profiler。你可以试一试用M-x profiler-start, 干一些其他事,然后M-x profiler-report。结束时,用M-x profiler-stop。
新的宏“setq-local” and “defvar-local”。
下划线的face可以用波浪线了。
新的错误类型和新的函数“user-error”,他们不会触发Lisp调试器。
新变量 “debugger-bury-or-kill”,用来决定退出Lisp调试器的方法。
新命令“fit-frame-to-buffer”,这个命令可以自动调整当前frame的大小。
命令“fit-window-to-buffer”可以调整frame的高度(如果新变量 “fit-frame-to-buffer” 不为nil)
新宏“with-temp-buffer-window”,和“with-output-to-temp-buffer”相似。
“temp-buffer-resize-mode”不再调整被重用的窗口的大小。
新变量 “switch-to-buffer-preserve-window-point”,可以在切换缓冲区时恢复一个窗口的光标位置。
函数“get-lru-window”, “get-mru-window”和“get-largest-window”现在有了第三个参数,可以防止选择当前窗口。
以下变量被弃用,因为他们能够被GNU Emacs 24.1中引入的“display-buffer-alist”替代:
- “dired-shrink-to-fit”
- “display-buffer-reuse-frames”
- “display-buffer-function”
- “special-display-buffer-names”
- “special-display-frame-alist”
- “special-display-function”
- “special-display-regexps”
“current-time-string”不再要求参数中的年份在1000到9999之间了,现在,只要是C能支持的年份,它都能支持。
处理浮点型变量的函数现在在遇到错误时会返回NaN而不是报错,如(log -1.0) => NaN。原来Emacs在有些平台上报错,却在另外一些平台上返回NaN。影响到的函数有:acos, asin, tan, exp, expt,log, log10, sqrt,还有mod.
“kbd” 现在是一个函数而不是一个宏了。
新函数“autoloadp”可以测试参数是不是autoloaded对象。
新函数“buffer-narrowed-p”可以测试缓冲区是否被窄化。
“posnp”可以测试一个对象是否是“posn”。
新函数“system-users”可以返回当前用户名。
新函数“system-groups”可以返回当前组名。
Cygwin编译的Emacs可以用MS Losedows的UI了,用configure的“--with-w32”就可以,不过默认的还是X11的UI。
Cygwin编译的Emacs将有2个新函数:“cygwin-convert-file-name-from-windows” 和“cygwin-convert-file-name-to-windows”。
当Emacs在Losedows下用-nw参数调用时(cmd.exe),新版的Emacs可以支持“mouse-highlight”, help-echo (在echo area),和“mouse-autoselect-window”。
在MS-Losedows Vista后的版本中,Emacs将支持符号链接。
在“M-x report-emacs-bug”生成的缓冲区中,“C-c m”快捷键已被改为“C-c M-i” (“report-emacs-bug-insert-to-mailer”)。之前的快捷键是一个错误,因为“C-c LETTER”是为了留给用户自定义的。
当然,除了以上新特性,还有各种bug修复,这里就不细说了。因为最近Chong Yidong比较忙,所以他把Emacs的release management交给了Glenn Morris(从1月9日的Emacs pretest 24.2.92开始)。有关 GNU Emacs 24.3 的更多详情,可查看emacs-24的branch changes。Happy hacking!
Read More:
我当年也曾这么翻译过特性列表……
内置的CEDET也更新啦~
除了少数 叫做“foo”的被改名为“cl-foo”而不是“cl-foo”
这地方手误了?两个都是“cl-foo”,其中有一个是cl_foo?
gun emacs什么时候启动能够快一点啊........
vim用户发来贺电
默认的X toolkit现在是Gtk+3了:这个是指界面是GTK3了吗?
VIM用户发来贺电,顺便默认使用evil就好了……
@ET: Org/Gnus/CEDET/Calc/nXML/DBUS这些的更新我都没写,太多了写不过来。
@Zer4tul: 是因为星号被解释成了标签,谢谢指出。
Emacs支持很多的X toolkit,比如gtk2、gtk3、athena、motif等等,“默认的X toolkit现在是Gtk+3”是指:如果你系统里有Gtk+3的库,并且使用
./configure的默认选项编译的Emacs,界面就是Gtk+3的。@Zer4tul: 晕……又被解释了。。是
标签……@Zer4tul: pre不管用..是em标签……markdown好像可以用
来escape,我下次试一下……
> Cygwin编译的Emacs可以用MS Losedows的UI了。 亮了。
我的emacs终于又要升级了么?话说前两天才狠了狠心,把goto-char绑定到了 "M-g g"
“kbd” 现在是一个函数而不是一个宏了。……这个真是情何以堪呐
对了yasnippet除了按顺序编辑域,镜像域,还有什么功能?好像你很喜欢它,介绍下参考参考
@Kardinal:
Yas的代码我没好好看过,喜欢是因为毕竟作者是咱中国人,而且用起来确实很方便。我对它的了解仅限于知道这些:
支持好多好多语言;
可以自动创建snippet,手写貌似也不是很难;
可以和helm整合的很好;
和TextMate的snippet语法很像,并且可以导入TextMate的snippet;
命名中各种斜杠,各种不习惯;
菜单写的挺不错的;
可定制性还算不错。
当然,基本的用法我还是比较熟悉的。
没意思,版本号都让chrome超过了
好多好多语言和textmate的语法倒不是问题,我现在弄的这个在一定程度上兼容 yasnippet 的语法……除了需要计算表达式的部分……主要是这部分已经抽象出来了,比如
("\$" (lambda(s p o)(eval (read s))),这个是表syntax-delimiter中的内容,意思是定义中,$符号后面的部分按后面的表达式计算,三个参数分别是定义中 $ 符号后面的字符串,生成overlay时的原始位置,生成的overlay,只要改下这条内容,就可以定义不同行为自动创建这个好像有点意思,不过感觉用的人不会太多
各种斜杠这个……如果不是这个原因,兴许我就研究研究怎么改进下yasnippet了
菜单这个我不弄了,主要是我不会-__-!!也不值得我会。yas的用户接口貌似也就一般情况,似乎要接到auto-complete才好用……这个我不喜欢……不过倒是不用自己负责清除插入前缓冲区中的冗余代码了,清除冗余代码这块确实出乎意料的很不好弄,用narrow-to-region然后全删再插,效果还勉强一点,但是倒霉催的我,设置了一个选项,可以原样插入snippet或者使用上下文的缩进……所以这个办法也不能用了
接口这方面,我想设置几个简单的关键词,比如可以匹配的模式(而不是每种模式都要有对应的文件),上下文(比如说在文档头部,直接插入文件头模板)等,但是要在snippet文件中写入额外的关键词信息……不知道这样做好不好,反正我已经把文件格式改了-__-!!!
我那个现在已经可以试验一下了,下载整个文件夹,加载了l-snippets.el文件后,写个单词然后执行命令 l-snippets-expand(目前只弄了三条emacs-lisp-mode的,分别是test defun 和 let(let这个是使用其它语法的,但是运行时多格式支持还没弄好,所以先展开let的话,另外两个就展不开了-__-!!)),虽然条目比较少,但是目测我这个和条目的数量是无关的,无论多少个差别都不大;还有就是清除已经输入的代码这部分,请自动过滤
目前正准备通过扩展支持动态插入overlay,就是插入snippets后,有时可能还需要在snippet中再插入overlay(比如参数的数目就不是固定的),相关的功能;还有就是比较智能点的匹配……
不过这两天没怎么弄,在想一个很重要的问题,类似于多态的机制吧,比如说,输入一个 for ,然后有计数器循环和迭代器循环两种,然后插入哪个呢?是让用户选择?还是先递增输入,先插入相同的部分,等用户决定后面的部分?还是直接自己判断该插入哪条?第一种难度最小,但是我最不喜欢的方法……这块有什么建议没有
其实我问的意思是,在表面看来,除了按tab到下一个域,然后有些镜像域,还有什么明显的特征?今天我搜索了下textmate的使用方法,里面有一个是在注释后插入当前语句的运行结果,倒有点意思
helm 是个啥东东?
memq、member、assq还有assoc这些函数的效率都比一般的循环要快。我觉得把数据结构重组成可以用这些函数的样子还是挺值得的。@Kardinal:
Helm是个很不错的包。主要功能是递增式补全和缩小选择范围功能。她能够帮你在Emacs中掌舵(所以叫helm),比如帮你找缓冲区、文件、函数等等。
Helm是Tamas Patrovic写的anything.el的fork,新的代码比原来的更清新,体积更小,更加模块化,而且没有那么多的“向下兼容”的代码。
安装的话,在MELPA上就可以装。Helm是Preclude里自带的,你如果装了preclude,helm自然就有了。
Helm wiki: https://github.com/emacs-helm/helm/wiki
今天不一定能够发布,因为bug #13546还有点小问题。
(居然又要推迟……之前本来准备只发布2个pretest的,因为一个bootstrap问题、一个关于OpenBSD/VAX的小问题还有一些有关鼠标处理的问题又发布了第三个pretest。。各种跳票啊...)
发布时间改为了3月4日。
l-snippets 的基本功能已经差不多了(包括动态插入)
下载这个文件夹 https://github.com/ran9er/init.emacs/tree/master/l-snippets
load里面的那个 l-snippets.el 文件,在emacs-lisp-mode下,输入 “defun”然后 M-x l-snippets-expand
tab 跳到参数那个括号里,随意输入点,按空格……
这个就是动态插入。如果只是这样的话,早就弄好了。但是加入模板扩展功能时,发现复杂程度超出了我的预期,光是模板采用什么样的格式都想了好几天……后来决定再嵌入snippets的定义(也就是说嵌套定义snippets)……
这块必须要说的是,开始的时候,分词用的是先序遍历,比较复杂……我灵机一动,改成后序遍历,清爽了……结果今天发现,要实现嵌套定义snippets,用后序不给力……TMD,咬咬牙又给改了回来……为了适应模板扩展,今天改了很多的地方,包括运行时多格式语法支持(在读取模板时直接加载相关语法格式)……总之太TMD痛苦了
再次推迟了…… 因为OpenBSD 4.x下的编译问题: http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00023.html
@xfq:
我真的崩溃了。。。。。。纠结死我了。。。。。。
刚刚发布了rc1: ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-24.3-rc1.tar.xz
预计在一周内发布24.3...
MirBSD的问题……
今天把智能匹配做的差不多了(应该是叫智能匹配吧?说起来真TMD郁闷,我把一些相关的想法、笔记记到了一个org文件里,结果刚才用magit加入整个文件夹的时候,org文件显示了出来,我点了下k给删了……本来我以为只是在git的版本库里删除,没想到竟然是真的删除了……)当然,是通过扩展做的
现在终于可以直接在 scratch 里测试了,而不用专门新建一个临时的文件了,这下舒服多了
这个功能作用是,现在文件名只是一个 snippet 名称而已,而与模式什么的无关……不用每个模式都有对应的文件,可以直接在 snippet 文件里写上其可以插入的模式。
可以给 snippet 定义多个 alias ,比如 snippet-defun ,并不一定必须扩展 “defun” 这个单词,你还可以给它定义 def df 这样的alias
还有就是关键词系统,有一个列表来定义,比如其中一条为“(head (progn (skip-chars-backward " \t\n")(bobp)))”,第一条是关键词,只要expand snippet的时候,第二条的测试条件符合,就可以获得第一个关键词。如果多个条目都匹配一定数目的关键词,那么选用匹配关键词数量最多的那个(如果有必要,还可以给关键词设置权重……这个临时还没有)
另外有一种三个条目的列表项,“(,major-mode major-mode t)”,如果第三个条目为t,说明这条是严格条目,第一条的内容必须要有(因为临时还没想到除了modes还有什么是严格的,所以在snippets定义文件中,这部分直接用 “<------modes”代表了)
虽然现在文件名和智能匹配无关,但是原始的,暂时叫二逼匹配吧,是和文件名有关的,如果不用smart-match.el这个扩展,那么还是需要正确的文件名的
另外我看了下yasnippets,发现他的定义中提供了一些指代……目前我知道的只有yas-text这个,这个需要插入后计算的。l-snippets原来只能支持插入时计算,所以我做了一个 callback 的扩展来支持这种功能。一个典型的功能就是镜像域改变为大写形式,这个我做好了样例,alias 是 uc 或者 upcase
当然,snippet定义中还是有点复杂,因为我没有提供类似 yas-text 这样的指代,而是通过参数传递当前的overlay……首先,如非必要不用宏,这个是大师的教导,显然不用宏也可以作到;用函数指代的话,在目前这个作用域混乱的时期,是不安全的……实际上在各种条件下,只有参数传递是靠谱的,甚至包括一些别的语言
如果有必要,可以考虑通过扩展实现对于yas格式的兼容(通过运行期支持多语法),但是有些确实是没法支持的,比如我在 yas 的测试文件中看到一个例子,在一个域的范围内定义另一个域(其实不太有用,第一个域改动后,无法定位第二个域),因为我需要嵌入定义的snippets在插入后运行时解析(未来的模板扩展功能),和这个是冲突的
还有就是因为要同时支持插入时和插入后计算,为了区别,目前插入后计算只能使用 lambda 表达式的形式,这个比较二 -__-!!!主要是格式区别的问题,又懒把格式识别这块弄出来……又复杂又没什么用
list-system-process函数在BSD上的支持真的不好弄:OpenBSD的porting guide写的也不太好: http://www.openbsd.org/faq/ports/guide.html
@Kardinal: 刚才简单看了下代码,感觉还行,体积也很小巧。版本控制这个我没有用Magit,我在用DVC,因为我是Emacs的开发者,需要用bzr。
@Kardinal: 顺便问下,
l-snippet中的l是什么意思?算是 lite 吧……当时顺手按了个字母……你知道的,起名字不是技术问题,而是哲学问题
不过我正在考虑换个响亮的名字?比如说x-snippets,z-snippets -___-!!!主要是用其它单词别人不知道这是干什么的,这方面你有什么建议没有?
还有就是不打算单独弄一个模式出来了……主要问题是我不会 -___-!!!,那个没有什么必要,运行期的开销主要是注册一些函数,一个用来索引的表,一个用来缓存的哈希表
NetBSD的状况也差不多: http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/sysctl.h?rev=1.205&content-type=text/x-cvsweb-markup&onlywithtag=MAIN
@Kardinal: 起名字这个我也不擅长……模式这个其实不是很困难,特别是次要模式,更简单。了解下
define-minor-mode和define-globalized-minor-mode就差不多了。怎么把列表转换为字符串,原来用的 pp-to-string ,后来发现,它竟然会给我省略一部分,用“...”代替,真是太会偷懒了
其实很多扩展没有必要弄成 minor-mode 甚至是 major-mode……过度包装了
@Kardinal: 你可以试试把
print-length、print-level、selective-display-ellipses这些变量设置成nil,我没有试过,不知行否。@Kardinal: 同意,
global-whitespace-mode就是一个例子。@Kardinal: 刚才瞎想了几个名字,仅供参考,不好的话完全可以忽略:
你太有才了,第一个名字就很好,完全阐释了我的理念-__-!!!就用这个了
正好睡觉前把这个体力活干了
进度:做了一个艰难的决定,插入时计算提供了三个指代 str ovl pos ,分别是参数(字符串)/当前overlay/当前位置,另外由于计算时还没有生成当前snippet的链表,所以不能进行和当前snippet相关的操作,只是操作它自身。为此在 end 域准备了一个 snippet-read 的项,snippet 插入完成后运行,可以对当前snippet整体进行操作
这样做是因为我尝试作一个文档头的snippet,但是在每行行首根据模式插入注释符有点太二了,所以决定用comment-region,分别在头部及尾部插入域,以获取起止位置,见 https://github.com/ran9er/init.emacs/blob/master/l-snippets/snippets/head
还是有点复杂,回头我考虑下插入域的同时生成链表
另外还有一个模板扩展,这个比较复杂,可能要对插入snippet的函数再进行修改……好吧,我是在逃避
我又想到了一个功能,比如这样一句(mapcar (lambda(x)(car car car car car car car)) (list list list list list list list))(请脑补细节),如果一行能装下,就放在一行,如果一行装不下,设置几个断行点,自动断行……有没有?
你说的那个 print-length 啥的我试试,越是这样不起眼的地方,越是憋死人……
管用,这个可以有
liny LINY lInY lINY INY 这几个哪个好?
还有一个关键的问题,怎么整,搜索替换么??
rc2发布: ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-24.3-rc2.tar.xz
相对于rc1,只有configure和sysdep.c有变化。
@Kardinal: 自动换行?不知refill/auto-fill/visual-line-mode行不?
@Kardinal: 我建议全部大写,因为我能想到的递归缩写都是全部大写,比如:GNU、XNU、EINE(EINE Is Not Emacs)、GNE(GNE's Not an Encyclopedia)、KDE(KDE Desktop Environment)还有ZWEI(ZWEI Was EINE Initially)等等。而且在Emacs中也有全部大写的包,比如IELM。
@Kardinal: 突然想到2个只是首字母大写的:Bing—Bing is not google,还有Wine—Wine Is Not an Emulator。(第一个是闹着玩的 ;-))
我建议symbol名中用小写前缀,doc string中如果不引用其他函数/变量/宏,使用大写,如:
关于如何替换,我也没有很完美的办法。暂时想到的就是用
dired-do-query-replace-regexp或者tags-query-replace,你可以试试。rc3: ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-24.3-rc3.tar.xz
已经改名了,为了稳妥起见,用的 query-replace。
改进了一些小细节,现在退出 snippet 的时候有提示;smart-match 修正了下,不抽风了
开始设想的功能,只剩下模板扩展了,实现起来出乎意料的简单……当然,还没有进行测试……因为字符串解析又出了问题,所有的环节都要改成先序遍历,才能正确的解析,还有一个比较复杂的没有改完
emacs 24.3 is released :D
That's true.
@Fengyuan Chen: 传送门: http://lists.gnu.org/archive/html/info-gnu-emacs/2013-03/msg00001.html
@Kardinal:
format的%S也可以把列表转为字符串。用前面你说的办法已经解决了,主要是让它格式好看点所以用pp
liny 的模板扩展已经基本实现了……为了适应它改动了很多地方……alias 是 co, 跳到form 的时候,再往下跳,会插入新的 “(TEST form)”而且是两个field
不过动态扩展的模板还没有和前面的连接起来,这块还得接着抽象一下才好使……应该比较快
前面我说的嵌套定义snippets没什么用的话收回,今天发现原来可以这样用:最外层的field 是默认语句,同意的话,跳到该语句的默认参数上;不同意的话,整个语句换掉。不过应该不难,弄完了当前这块实现一下
加了一个扩展,现在可以选择跳转的时候是按插入时的顺序,还是按snippet定义中的数字顺序
试试 24.3 先
只有源码么?这让我用 windows 的情何以堪
增加了一个新角色 cur :当snippet 定义中只有一个 $0 时,原样输入,并且光标定位在 $0 的位置
目前还没有官方的24.3 for Windows,OSX已经有了。
你可以先用这个: https://www.dropbox.com/sh/uigdfnb9x7b8ta1/RlHNiwBQ57
其实自己编译没你想的那么难。
Ps: 话说这里不是LinuxTOY么…
其实编译对我来说很简单,C 语言也懂点的说……但咱是文艺青年不是……
PS:秘密泄漏了……其实emacs在windows下字体显示效果不错……主要是日程挺紧张,也和 IT 没关系,能见缝插针玩下 emacs 就不错了,折腾不起啊
今天发布了Losedows版: http://ftp.gnu.org/gnu/emacs/windows/