需要扩展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。

提示:使用合适的编辑器可以简化输入并让您控制括号。