需要扩展elisp功能
Need to extend elisp function
全部,
我的 eLisp 一定很烂。很快就搞定了第一个功能。
(defun sort-lines-reverse (beg end)
"sort lines in reverse order"
(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list (point-min) (point-max))))
(if (and beg end)
(sort-lines 1 beg end))
)
完美运行。冲洗下一个
(defun sort-numeric-fields-reverse (field beg end)
"sort numeric fields in reverse order"
(interactive
(if (use-region-p)
(list (read-number "Field number: " 1) (region-beginning) (region-end))
(list (read-number "Field number: " 1) (point-min) (point-max)))
(message "calling if")
(if (and beg end)
((message "inside if")
(sort-numeric-fields field beg end)
(reverse-region beg end))
)
))
没有 运行s 没有命中没有错误。看不到消息中显示的单个消息。我确实得到了字段编号提示。
一段随机生成的测试数据,如果愿意的话。
8 412086510
8 744308263
8 1482781895
8 995992436
1 1021762533
1 897682569
1 963686690
1 166565707
1 2096612583
1 829723388
1 587753131
1 264251710
32 139885828
32 781244288
雪上加霜的是,在我的 KDE Neon 环境中,用于调出 lisp 调试器的 C-M-x 不执行 squat。
这两个函数之间唯一真正的区别在于我必须提示输入字段编号。在 if I 运行 中有 2 个函数而不是一个。在让第一个工作后,第二个应该是小菜一碟。
不胜感激。
两个问题:
- 在交互结束时缺少 ),在 (if (use-region-p) ...
之后
- 缺少 progn in (if (and beg end)...
(progn 是多余的,因为 if 已经被 when 代替了。)
更正版本:
(defun sort-numeric-fields-reverse (field beg end)
"sort numeric fields in reverse order"
(interactive
(if (use-region-p)
(list (read-number "Field number: " 1) (region-beginning) (region-end))
(list (read-number "Field number: " 1) (point-min) (point-max))))
(message "calling if")
(when (and beg end)
(message "inside if")
(sort-numeric-fields field beg end)
(reverse-region beg end)))
编辑:代码更改:根据@phils 的提示,if-progn 替换为 when。
提示:使用合适的编辑器可以简化输入并让您控制括号。
全部,
我的 eLisp 一定很烂。很快就搞定了第一个功能。
(defun sort-lines-reverse (beg end)
"sort lines in reverse order"
(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list (point-min) (point-max))))
(if (and beg end)
(sort-lines 1 beg end))
)
完美运行。冲洗下一个
(defun sort-numeric-fields-reverse (field beg end)
"sort numeric fields in reverse order"
(interactive
(if (use-region-p)
(list (read-number "Field number: " 1) (region-beginning) (region-end))
(list (read-number "Field number: " 1) (point-min) (point-max)))
(message "calling if")
(if (and beg end)
((message "inside if")
(sort-numeric-fields field beg end)
(reverse-region beg end))
)
))
没有 运行s 没有命中没有错误。看不到消息中显示的单个消息。我确实得到了字段编号提示。
一段随机生成的测试数据,如果愿意的话。
8 412086510
8 744308263
8 1482781895
8 995992436
1 1021762533
1 897682569
1 963686690
1 166565707
1 2096612583
1 829723388
1 587753131
1 264251710
32 139885828
32 781244288
雪上加霜的是,在我的 KDE Neon 环境中,用于调出 lisp 调试器的 C-M-x 不执行 squat。
这两个函数之间唯一真正的区别在于我必须提示输入字段编号。在 if I 运行 中有 2 个函数而不是一个。在让第一个工作后,第二个应该是小菜一碟。
不胜感激。
两个问题:
- 在交互结束时缺少 ),在 (if (use-region-p) ... 之后
- 缺少 progn in (if (and beg end)... (progn 是多余的,因为 if 已经被 when 代替了。)
更正版本:
(defun sort-numeric-fields-reverse (field beg end)
"sort numeric fields in reverse order"
(interactive
(if (use-region-p)
(list (read-number "Field number: " 1) (region-beginning) (region-end))
(list (read-number "Field number: " 1) (point-min) (point-max))))
(message "calling if")
(when (and beg end)
(message "inside if")
(sort-numeric-fields field beg end)
(reverse-region beg end)))
编辑:代码更改:根据@phils 的提示,if-progn 替换为 when。
提示:使用合适的编辑器可以简化输入并让您控制括号。