Необходимо расширить функцию elisp - PullRequest
0 голосов
/ 21 апреля 2020

Все,

Я должен сосать 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))
     )
   ))

Нет прогонов нет хитов нет ошибок. Не вижу ни одного сообщения, отображаемого в сообщениях. Я получаю подсказку с номером поля.

Фрагмент случайно сгенерированных тестовых данных, если кто-то этого желает.

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 C -Mx вызвать отладчик lisp не делает приседания.

Единственное реальное различие между этими двумя функциями в том, что я должен запросить номер поля. Внутри, если я запускаю 2 функции вместо одной. После того, как первый заработал, второй должен был стать легкой прогулкой.

Помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 21 апреля 2020

Две проблемы:

  • отсутствует) в конце интерактива, после (если (use-region-p) ...
  • отсутствует прогноз в (если (и начните) end) ... (progn лишний, потому что если был заменен на когда.)

Исправленная версия:

(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)))

EDIT: Код изменен: if-progn заменен на когда в соответствии с подсказкой @ phils.

Подсказка: использование адекватного редактора облегчает набор текста и позволяет контролировать скобки.

...