Аднаўленне Org Agenda буфера з таймерам

Я спрабую аднавіць мой Org Праграма буфер з таймерам. Я спрабую зрабіць гэта наступным чынам:

(defun renewOrgBuffer ()
  (interactive)
  (dolist (buffer (buffer-list))
    (with-current-buffer buffer
      (when (derived-mode-p 'org-agenda-mode)
    (org-agenda-redo t))))
  )
(run-with-idle-timer 60 1000 #'renewOrgBuffer)

Я ў асноўным пракатваецца гэта з іншага адказу, але яны хацелі зрабіць somehting пры захаванні файла орг. Я хачу, каб абнавіць яго з дапамогай таймера і бегу ў памылкі.

When I just run the function in ielm Я атрымліваю памылку: *** Eval error *** ‘recenter’ing a window that does not display current-buffer.

Я бягу Emacs 25.1.50.2 кліент, падлучаны да дэману з орг Verion 8.2.10 на Ubuntu 15.10.

Мэта для гэтага для мяне з'яўляецца тое, што я хацеў бы мець свой файл орг з маім нязробленым і назначэннямі ў адным буферы а Org Праграма буфер побач з ім. Такім чынам, галоўная мэта для мяне, каб абнавіць Org Праграма буфер проста так, што лінія, якая кажа цяпер - - - - - Абнаўленні. Гэта невялікі думаю, але я проста хачу, каб зразумець гэта.

Любая дапамога або паказальнікі ацанілі.

<�Моцны> Edit 7 сакавіка

Я выявіў, што калі ўключыць ліпкі выгляд позвы з дыспетчарам (* опцыя), то я магу назваць мой раней зададзены renewOrgBuffer функцыя ў інтэрактыўным рэжыме з Мх і замест таго, каб атрымліваць паведамленне пра памылку, я атрымліваю паведамленне ў міні-буфер, які кажа «орг-позва-ліст:«. recenter'ing акно, якое не адлюстроўвае бягучы-буфер », які з'яўляецца вялікім, але я не хачу называць яго ў інтэрактыўным рэжыме кожны раз.

Калі я спрабую запусціць гэтую функцыю з буфера нуля ці па таймеры, як

(run-with-idle-timer 3 1000 #'renewOrgBuffer)

Я атрымліваю памылку:

Rebuilding agenda buffer...done
Error running timer ‘renewOrgBuffer’: (error "‘recenter’ing a window that does not display current-buffer.")

Нягледзячы на ​​тое, што кажа «буферная позва Перастраенне ... зроблена» гэта на самай справе не аднавіць яго.

Любая дапамога з гэтай дадатковай інфармацыяй была б карысна, дзякуй.

1
@lawlist Калі я выкарыстоўваю версію orgmode, якая пастаўляецца з Emacs, дзе крыніца? Я магу толькі знайсці скампіляваныя Elisp файлы /usr/local/share/emacs/25.1.50/lisp/org . Вы прапануеце рэдагаваць зыходны код і перакампіляваць яго? дзякуй
дададзена аўтар user10117, крыніца
@lawlist я Grep вакол крыніцы і каментаваў розныя лініі, дзе выкарыстоўваюцца цэнтраванне, але я наткнуўся орг-позва-магчыма-перарабіць , які выклікае орг-Agenda-паўтор але некаторыя іншыя рэчы, што робіць яго прыдатным для выкарыстання для мяне. Дзякуй за ваш ўклад, хоць!
дададзена аўтар user10117, крыніца
Ёсць толькі некалькі вяртаць у зыходны стан у орг-рэжыме - Grep іх і каментаваць іх, і паўторна байт-кампіляцыі, калі гэта неабходна. Або знайсці функцыю, якая выклікала, што мае слова (цэнтравання і перавызначыць яго ці выкарыстоўваць парады. Вы хочаце, каб мець магчымасць працаваць на буферы, якія не бачныя, а вяртаць у зыходны стан з'яўляецца перашкаджаю вам далейшага развіцця новай сістэмы. ў далейшым, вы можаце напісаць у некаторых выключэннях для таго, калі акно відаць, то цэнтравання ... Я паклапацілася пра тое, што ў маёй уласнай ўсталёўцы даўно.
дададзена аўтар lawlist, крыніца
Вам неабходна спампаваць зыходны код версіі, якую вы выкарыстоўваеце. Тады вы можаце слова пошуку цэнтраванне . Вы можаце рэдагаваць зыходны код і паўторна байты-кампіляцыю, ці вы можаце проста стварыць новыя функцыі з тымі ж імёнамі, для тых, якія маюць патрэбу ў мадыфікацыі. Напрыклад, калі функцыя з імем Foo ўтрымлівае вяртаць у зыходны стан command` і Foo знаходзіцца ў бібліятэцы з імем орг-foo.el , то ваш .emacs можа мець нешта накшталт: (патрабуецца «орг-Foo) (Defun Foo (аднак многія аргументы) [мадыфікаваныя кішкі менш смецця вяртаць у зыходны стан])) , а затым перазапусціць Emacs або ацаніць свой .emacs файл.
дададзена аўтар lawlist, крыніца

1 адказы

Я выявіў, што з дапамогай функцыі орг-Agenda-магчыма-перарабіць працаваў замест орг-позва-Redo . Так што мая аднаўляць функцыя цяпер выглядае наступным чынам:

(defun renewOrgBuffer ()
  (interactive)
  (dolist (buffer (buffer-list))
    (with-current-buffer buffer
      (when (derived-mode-p 'org-agenda-mode)
    (org-agenda-maybe-redo))))
  )

і я зрабіў таймер, каб аднавіць повесточные буфера:

(run-with-idle-timer 3 1000 #'renewOrgBuffer)

параўнанне орг-Agenda-паўтор і орг-позва-магчыма-перарабіць , аказваецца, што, магчыма, мой пытанне заключаецца ў тым, што я не выкарыстаў Get-buffer- акно функцыя.

0
дададзена
Так, я бачыў гэта. Тое, што я зрабіў, была скапіяваная функцыя ў маю драпанне буфер, а затым я заўважыў, што лініі і загрузіў яго з кодам <> З-й С-е </кодам>. Я да гэтага часу пытанне, прымушаючы мяне думаць, што функцыя была вяртаць у зыходны стан называюць яшчэ недзе.
дададзена аўтар user10117, крыніца
Апошняя радок орг-Agenda-паўтор гэта (акно-вяртаць у зыходны стан лініі) - так што вы можаце проста перапісаць гэтую функцыю, каб закаментаваць апошнюю радок - тая ж працэдура згадваецца вышэй: (патрабуецца «арганіза-позва дзень) (... DEFUN орг-позва-часопіснай (і неабавязкова ўсё) [усе, акрамя апошняй радкі коды, якая адносіцца да цэнтравання]) Вы проста не можаце назваць вяртаць у зыходны стан на буфер, калі ён не бачны ў акне, ці ж ён выдасць паведамленне пра памылку. Акрамя таго, можна напісаць у выглядзе выключэння цэнтравання толькі тады, калі акно буфера відаць.
дададзена аўтар lawlist, крыніца
Гэта не магчыма, ён прыйшоў аднекуль яшчэ, але не больш чым 10 месцаў у апошняй версіі орг-рэжыме , што выкліку </вяртаць у зыходны стан кода>. Гэта не верагодна, зыходзячы з любога месца, акрамя орг-рэжыме .
дададзена аўтар lawlist, крыніца