Hi Ihor, Here is an updated patch. We can't use accept-process-output because it doesn't seem to block in the way we need, or it blocks exactly long enough for the process to finish but then continues immediately to search instead of allowing the function that fills the buffer to complete. Instead I use sleep-for a shorter time and process-live-p which gives better results. I think I got the commit message formats right this time. Best! Tom
From 2db2ce6d83b27fcf6366183cbd8b5fa79fcbc4a7 Mon Sep 17 00:00:00 2001 From: Tom Gillespie <tgb...@gmail.com> Date: Thu, 28 Jul 2022 23:33:22 -0700 Subject: [PATCH] ol-man: Set window point not buffer point and wait before search
* lisp/ol-man.el (org-man-open): Set window point not buffer point When passed man:path::SEARCH org-man-open tries to use search-forward to jump to the location of e.g. a heading. Prior to this fix it only used search-forward, which will not change the point of the cursor in the window, meaning that even if there is a match it will not appear. Uses process-live-p and sleep-for to wait until the manpage finishes rendering before searching the buffer so that there will be something to find. --- lisp/ol-man.el | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lisp/ol-man.el b/lisp/ol-man.el index aa22964c5..8633fe5cb 100644 --- a/lisp/ol-man.el +++ b/lisp/ol-man.el @@ -43,12 +43,22 @@ If PATH contains extra ::STRING which will use `occur' to search matched strings in man buffer." (string-match "\\(.*?\\)\\(?:::\\(.*\\)\\)?$" path) (let* ((command (match-string 1 path)) - (search (match-string 2 path))) - (funcall org-man-command command) + (search (match-string 2 path)) + (buffer (funcall org-man-command command))) (when search - (with-current-buffer (concat "*Man " command "*") - (goto-char (point-min)) - (search-forward search))))) + (with-current-buffer buffer + (goto-char (point-min)) + (unless (search-forward search nil t) + (let ((process (get-buffer-process buffer))) + (while (process-live-p process) + (sleep-for 0.01))) + (goto-char (point-min)) + (search-forward search)) + (previous-line) + (let ((point (point))) + (let ((window (get-buffer-window buffer))) + (set-window-point window point) + (set-window-start window point))))))) (defun org-man-store-link () "Store a link to a README file." -- 2.35.1