LINUX.ORG.RU

Обновление org сломало ссылки, не вызывается org-agenda-list.

 ,


0

1

Выручьте, будьте добры.

''' GNU Emacs 26.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.14) of 2020-03-26, modified by Debian '''

''' Org mode version 9.4.6 (9.4.6-11-g1ee52c-elpa @ /home/000/.emacs.d/elpa/org-20210726/) '''

Обновил Org mode и полетели ссылки. Теперь не могу вызвать расписание, а там задач полным-полно.
Высвечивает:

''' org-agenda-highlight-todo: Symbol’s function definition is void: string-empty-p '''

Читал https://orgmode.org/Changes.html, пробовал этот код, но не получается. Что-то не так делаю.
Подскажите, как быть? Или вовсе откатить Org mode?



Последнее исправление: w201403 (всего исправлений: 1)

Очень странная ошибка. В функции org-agenda-highlight-todo вызывается стандартная, в общем-то, функция string-empty-p, которая по какой-то причине не определена, но она должна быть определена, так как идет с Emacs. Определение в lisp/emacs-lisp/subr-x.el. Какой версии Emacs? Попробуй проверь, есть ли такая функция: C-h f string-empty-p. У меня:

string-empty-p is a compiled Lisp function.

(string-empty-p STRING)

Check whether STRING is empty.
Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от ados
Debugger entered--Lisp error: (void-variable setq)
  eval-buffer(#<buffer  *load*> nil "/home/000/.emacs" nil t)  ; Reading at buffer position 2543
  load-with-code-conversion("/home/000/.emacs" "/home/000/.emacs" t t)
  load("~/.emacs" t t)
  #f(compiled-function () #<bytecode 0x1e0f4d>)()
  command-line()
  normal-top-level()


Кажется, понял.
Менял названия TODO

;; Меняю названия TODO
(setq org-todo-keywords
      '((sequence "ИСПОЛНИТЬ"
		  "|"
		  "ИСПОЛНЕНО"
		  "ОТМЕНЕНО"
		  "ОСТАНОВЛЕНО")))

;; Раскрасить ключевые слова задач в разные цвета
setq org-todo-keyword-faces
     '(
	("ИСПОЛНИТЬ" :background "red1" :foreground "black" :weight bold :box (:line-width 2 :style released-button))
	("ИСПОЛНЕНО" :background "green" :foreground "black" :weight bold :box (:line-width 2 :style released-button))
	 ("ОТМЕНЕНО" :background "gray" :foreground "black" :weight bold :box (:line-width 2 :style released-button))
	 ("ОСТАНОВЛЕНО" :background "blue" :foreground "black" :weight bold :box (:line-width 2 :style released-button))
	))

Закомментил — высветился длинный список исполненных и всех остальных.

w201403
() автор топика
Ответ на: комментарий от ados

Всё заработало, Благодарю!
Это я тупанул: скобку перед setq удалил.
Благодарю ещё раз

w201403
() автор топика
Ответ на: комментарий от Zubok

Получилось:

string-empty-p is a compiled Lisp function in ‘subr-x.el’.

(string-empty-p STRING)

Check whether STRING is empty.

w201403
() автор топика
Ответ на: комментарий от w201403

(void-variable setq)

ТЫ чего-то там переколбасил в конфигурации. Интересно, если он свалился в ошибку там, то, возможно, недогрузил какие-то библиотеки. Иначе я не понимаю, почему писал, что нет string-empty-p. Исправляй свой .emacs

UPD. А, уже исправил. Вот исправил и закрузка библиотек (subr-x конкретно) прошла. Пока я так понимаю ситуацию.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Да, сам переколбасил.
Мне, всё ж, интересно, в чём дело было. Это же не последнее обновление Org — потом снова всё сломается?

w201403
() автор топика
Ответ на: комментарий от w201403

Мне, всё ж, интересно, в чём дело было. Это же не последнее обновление Org — потом снова всё сломается?

Вот выше я предположил, в чем дело. Скорее, ты перед обновлением или сразу после него попортил конфигурацию случайно, а потом перезагрузил Emacs.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Нарочно перепроверил: нет, дело именно в ошибке, которую исправил ados. Скобку я уже потом удалил.
Перед обновлением в .emacs не лазил.
Наверное ж, такое не первый раз? Но даже в архиве рассылки GNU по этой ошибке ничего не нашлось, кроме разного похожего

w201403
() автор топика
Ответ на: комментарий от w201403

дело именно в ошибке, которую исправил ados.

Так он определил функцию, которая в нормальном Emacs должна была быть определена, а у тебя ее не было, а такого быть не может, если только у тебя не загрузилась библиотека subr-x.el (это не org-mode, а именно библиотека Emacs). Почему не загрузилась эта библиотека? А вот скорее всего, из-за ошибки, которая не дала ее загрузить потом, оборвав процесс загрузки.

И вот тут после исправления конфига ты показываешь Обновление org сломало ссылки, не вызывается org-agenda-list. (комментарий) , что у тебя не переопределенная функция загружена, а именно родная емаксовская.

Zubok ★★★★★
()
Ответ на: комментарий от w201403

И не ясно теперь. Безе переопределения string-empty-p сейчас работает или нет? Если не работает и выдает ошибку, то это ненормально и надо найти, в чем проблема.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Ох. Благодарю за такое объяснение.
А где почерпнуть об этом побольше, чтобы хоть на небольшом уровне разбираться? Осваивать Elisp?

w201403
() автор топика
Ответ на: комментарий от w201403

Нет, не работает

С какой ошибкой? С той же, что и в топике?

Ты лучше покажи, что ты вписал конкретно. (require 'org) сделал?

UPD. Даже если загрузить Emacs в ключом -Q, то функция string-empty-p есть.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

С какой ошибкой? С той же, что и в топике?

С той же, да. Я только добавил:

''' (defun string-empty-p (s) (zerop (length s))) '''

и всё восстановилось.

(require ’org) сделал?

Нет.

w201403
() автор топика
Ответ на: комментарий от w201403

(require ’org) сделал? Нет.

Сделай раньше всех определений для org-mode. И посмотри, есть ли ошибка. Хотя бы это для начала.

https://orgmode.org/worg/org-tutorials/org4beginners.html : Our first edit to our Emacs configuration

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от w201403

Попробуй перенести все (require …) в начало файла. После всего этого (package-initialize) всего один раз, а не как у тебя. Выпили (defun string-empty-p …) и, после перезапуска emacs, посмотри определена ли string-empty-p через C-h f.

ados ★★★★★
()

Я, кажется, понял, в чем дело. Дело может быть в том, что где-то в org-mode забыли сделать (require 'subr-x). Поэтому и ругается. Попробуй это сделать сам в начале конфигурации. Должно заработать.

;; NB If you want to use this library, it's almost always correct to use:
;; (eval-when-compile (require 'subr-x))
Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от ados

Получилось

string-empty-p is a compiled Lisp function in ‘subr-x.el’.

(string-empty-p STRING)

Check whether STRING is empty.
А цветные TODO обесцветились. Org-agenda-list выдаёт длинный список, в т.ч. завершённых заданий.
То, что ты в первый раз давал, работало лучше.

w201403
() автор топика
Ответ на: комментарий от w201403

Ну это повод для багрепорта, я считаю. Они в какой-то версии добавили использование string-empty-p, а require сделать забыли. Видимо, у автора уже была загружена библиотека, поэтому он не заметил проблемы.

Zubok ★★★★★
()
Ответ на: комментарий от w201403

Да можешь попробовать прямо из org-mode написать. Там вроде есть M-x org-submit-bug-report или в рассылку можно написать.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Делаю по инструкции
Закомментировал всё, что вы мне дали, запустил emacs -q, добавил свой .org в agenda, написал org-agenda-list, а ошибка

org-agenda-highlight-todo: Symbol’s function definition is void: string-empty-p

не воспроизводится. Можно совет, как тут быть? Наверное, описать им, как было в нормальном запуске и минимальном?

w201403
() автор топика
Ответ на: комментарий от Zubok

Да, забыл добавить (править пока не могу): ошибка не воспроизводится, но agenda-list нарушен. Там, почему-то вывалились все завершённые задания. Хотя, может, это и не баг вовсе в данном случае.

w201403
() автор топика
Ответ на: комментарий от w201403

Закомментировал всё, что вы мне дали, запустил emacs -q, добавил свой .org в agenda, написал org-agenda-list, а ошибка

Ну, все правильно. Если закомментируешь, то будет ругаться. Если раскомментируешь (require 'subr-x), то не должен ругаться.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Но он не ругается, в том-то и дело. Криво, но работает без ругани. Буду пытаться. НАверное, что-то не так делаю..

w201403
() автор топика
Ответ на: комментарий от w201403

Ну а это что тогда? Ты же привел. Это ругань. Это значит, что функция org-agenda-highlight-todo неправильно сработала наверняка.

org-agenda-highlight-todo: Symbol’s function definition is void: string-empty-p

Zubok ★★★★★
()

Собственно, вот они пишут:
Sometimes you might face a problem due to an error in your Emacs or Org mode setup. Before reporting a bug, it is very helpful to start Emacs with minimal customizations and reproduce the problem. Doing so often helps you determine if the problem is with your customization or with Org mode itself. You can start a typical minimal session with a command like the example below.
Если с минимальной настройкой Emacs работает без ошибок, значит дело именно в моей настройке, а не в Org?

w201403
() автор топика
Ответ на: комментарий от w201403

Написал, что эта ошибка не воспроизводится.

Если функция org-agenda-highlight-todo с минимальным конфигом не вызывается, то и ошибки не будет. Если вызывается, то будет. Смотря что ты комментировал.

Сам вот запусти пустой Emacs -Q, потом напиши в *scratch* (string-empty-p "test"). C-x C-e на нее. Вылетает такая же ошибка, как и у тебя. Потом пишешь в буфере (require 'subr-x), C-x C-e на нее, а потом снова С-x С-e на string-empty-p. Ошибка пропадет, функция сработает и выдаст nil.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от w201403

Собственно, вот они пишут:

Забей на это все. Просто напиши, что в функции org-agenda-highlight-todo (файл org-agenda.el) используется функция string-empty-p из модуля emacs-lisp/subr-x.el, но где-то не сделано (require 'subr-x), поэтому при вызове функции org-agenda-highlight-todo, string-empty-p не определена, что приводит к ошибке (показываешь ошибку).

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

запусти пустой Emacs -Q, потом напиши в scratch (string-empty-p «test»). C-x C-e на нее. Вылетает такая же ошибка, как и у тебя

Не вылетела.

Потом пишешь в буфере (require ’subr-x), C-x C-e на нее, а потом снова С-x С-e на string-empty-p. Ошибка пропадет, функция сработает и выдаст nil.

После всех манипуляций получилось так

Но теперь я понял, что делать. Напишу.
Как правильно сделать: а) написать report; б) пометить проблему как решённую или оставить всё до тех пор, пока не исправят? Или на ЛОРе это не критично?

w201403
() автор топика
Ответ на: комментарий от w201403

Не вылетела.

Ну такая же по сути же. Отладчик пишет void-function. Функции, которую ты вызываешь, нет, хотя C-h f string-empty-p ее показывает. После (require 'subr-x) сообщения уже не должно быть.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

А можно туда ссылку на наше обсуждение дать? Или бесполезно?
Я просто думаю, если кто-то из наших столкнётся, то придёт сюда посмотреть, с чего началось.

w201403
() автор топика
Ответ на: комментарий от w201403

Да ты слишком много накручиваешь, чтобы просто написать: «добавьте (eval-when-compile (require 'subr-x)) в org-mode, так как там используются функции из этой библиотеки, в частности string-empty-p, а может быть и другие тоже, которые не определены на момент загрузки org-mode, что приводит к ошибкам (тут копируешь текст своей ошибки из топика). Ну, как бы все. Пара слов - они докумекают, они там не в первый раз замужем.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от w201403

Та, кстати, перед тем как писать добавлял в самое начало (require 'org)? Я вот так в твоей конфиге не увидел. То есть убрать сначала subr-x, добавить в начало (require 'org), проверить. Обновление org сломало ссылки, не вызывается org-agenda-list. (комментарий)

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Проверил.
Вызываешь org-agenda-list, высвечивает:

org-agenda-get-deadlines: Wrong number of arguments: (0 . 0), 2

Короче, отправил, как получилось.
Надеюсь, всё там понятно. Никогда багрепортов не отправлял.

w201403
() автор топика

Мой багрепорт забраковали.

Remember to cover the basics, that is, what you expected to happen and what in fact did happen. You don’t know how to make a good report? See https://orgmode.org/manual/Feedback.html#Feedback

Фиг знает. Вроде, я там написал, чего ждал и что получилось.
Репорт в списке рассылки Org

w201403
() автор топика
> Remember to cover the basics, that is, what you expected to happen and
> what in fact did happen.  You don't know how to make a good report?  See
>
>      https://orgmode.org/manual/Feedback.html#Feedback
>
> Your bug report will be posted to the Org mailing list.
> ------------------------------------------------------------------------
>
> 	1.
>
>  I updated orgmode package and trying to org-agenda-list, as usual. But failed with mistake  — org-agenda-list was empty.
>  After investigation, I took advice to put this:
>
> 	;; NB If you want to use this library, it's almost always correct to use:
> 	(eval-when-compile (require 'subr-x))
>
>  in the beginning of .emacs. And it worked. Org-agenda-list was fine.

I suspect that adding that line has actually hidden a larger problem. The above line is essentially telling emacs to load the subr-x package when your compiling an emacs-lisp file. However, your not compiling your .emacs file, so this will not have any effect unless your compiling your .emacs file. It is rarely worthwhile compiling your init file. Far better off to keep your init file relatively small and pushing complex/large configuration stuff into separate files which can be compiled. There are a number of complications you often need to deal with when compiling your init file and dealing with these often adds enough complexity to outweigh the any benefits to startup time, which are typically very small anyway.

The symptoms you are seeing are frequently seen with a broken org install. This can easily happen if you attempt to upgrade org when you already have org functions loaded. Basic problem is that you end up with a broken mixed installation with parts from the old version and parts from the upgraded version.

Note that if the issue was as you described, many people would be experiencing this bug, but they aren't. This suggests the problem is local to your setup.

I would remove the upgraded org package and try re-installing. However, it is really important to make sure your .emacs does not call any org functions because this will load org during startup and then when you attempt to upgrade the package, you will get the same issue. This may require some re-organisation of your .emacs file - possibly wrapping org related code in an eval-after-load or using something like use-package etc.

An easy way to verify which avoids large refactoring of your init file would be to comment out any org related configuration from your init file, restart emacs. upgrade org, uncomment what you commented and then restart emacs.

>  The org-agenda-highlight-todo function (org-agenda.el file) uses the
>  string-empty-p function from the emacs-lisp/subr-x.el module, but
>  somewhere is not done (require ' subr-x), so when calling the
>  org-agenda-highlight-todo function, string-empty-p is not defined,
>  which leads to an error — org-agenda-highlight-todo: Symbol’s function
>  definition is void: string-empty-p
>
> 	2.
>
>  For checking I called the emacs -Q and put in it scratch:
> 	(string-empty-p "test")
> 	(require 'subr-x)
>  Then I executed the command
> 	C-x C-e
>  on
> 	(require 'subr-x)
>  output was
> 	Debugger entered--Lisp error: (void-function string-empty-p)
> 	(string-empty-p "test")

When you did C-x C-e, either you evaluated the first sexp or it tried to evaluate all sexps in the scratch buffer, calling string-empty-p first and before require 'subr-x, so the library was not yet loaded and the function was not found. the require needs to be before functions from the required library are called.

Пишу для завершённости. Проблема решена, урок усвоен.

w201403
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.