emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Completion of links to man pages
@ 2023-10-04 11:40 Max Nikulin
  2023-10-05 11:40 ` Ihor Radchenko
  2023-12-09 11:32 ` Ihor Radchenko
  0 siblings, 2 replies; 23+ messages in thread
From: Max Nikulin @ 2023-10-04 11:40 UTC (permalink / raw)
  To: emacs-orgmode

Hi,

I am unsure if the code below is appropriate for :complete property of 
"man" link. It does not rely on any double-dash functions or variables, 
but it still uses some implementation details since there is no suitable 
high level functions in man.el and woman.el from Emacs.

(defun org-man-complete (&optional _arg)
   "Helper for completion of links to man pages."
   (concat
    "man:"
    (let ((completion-ignore-case t)) ; See `man' comments.
      (funcall
       (if (eq org-man-command 'woman)
           #'org-man--complete-woman
         #'org-man--complete-man)
       "Manual entry: "))))

(defun org-man--complete-man (prompt)
   (require 'man)
   (let (Man-completion-cache)
     (completing-read
      prompt
      'Man-completion-table)))

(defun org-man--init-woman-cache (&optional re-cache)
   (unless (and (not re-cache)
                (or
                 (and woman-expanded-directory-path
                      woman-topic-all-completions)
                 (woman-read-directory-cache)))
     (setq woman-expanded-directory-path
           (woman-expand-directory-path woman-manpath woman-path))
     (setq woman-totic-all-completions
           (woman-topic-all-completions woman-expand-directory-path))
     (woman-write-directory-cache)))

(defun org-man--complete-woman (prompt)
   (require 'woman)
   (org-man--init-woman-cache)
   (completing-read prompt woman-topic-all-completions))



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-04 11:40 Completion of links to man pages Max Nikulin
@ 2023-10-05 11:40 ` Ihor Radchenko
  2023-10-05 12:20   ` Max Nikulin
  2023-10-05 15:52   ` Eli Zaretskii
  2023-12-09 11:32 ` Ihor Radchenko
  1 sibling, 2 replies; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 11:40 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode, emacs-devel

[ CCing emacs-devel ]

Max Nikulin <manikulin@gmail.com> writes:

> I am unsure if the code below is appropriate for :complete property of 
> "man" link. It does not rely on any double-dash functions or variables, 
> but it still uses some implementation details since there is no suitable 
> high level functions in man.el and woman.el from Emacs.

Without docstrings, we cannot rely even on single-dash functions.

To emacs-devel: Would it be of interest to expose man/woman completion
API?

> (defun org-man-complete (&optional _arg)
>    "Helper for completion of links to man pages."
>    (concat
>     "man:"
>     (let ((completion-ignore-case t)) ; See `man' comments.

`completion-ignore-case' is not set in woman.

>       (funcall
>        (if (eq org-man-command 'woman)
>            #'org-man--complete-woman
>          #'org-man--complete-man)
>        "Manual entry: "))))
>
> (defun org-man--complete-man (prompt)
>    (require 'man)
>    (let (Man-completion-cache)
>      (completing-read
>       prompt
>       'Man-completion-table)))

> (defun org-man--init-woman-cache (&optional re-cache)
>    (unless (and (not re-cache)
>                 (or
>                  (and woman-expanded-directory-path
>                       woman-topic-all-completions)
>                  (woman-read-directory-cache)))
>      (setq woman-expanded-directory-path
>            (woman-expand-directory-path woman-manpath woman-path))
>      (setq woman-totic-all-completions
>            (woman-topic-all-completions woman-expand-directory-path))
>      (woman-write-directory-cache)))
>
> (defun org-man--complete-woman (prompt)
>    (require 'woman)
>    (org-man--init-woman-cache)
>    (completing-read prompt woman-topic-all-completions))

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 11:40 ` Ihor Radchenko
@ 2023-10-05 12:20   ` Max Nikulin
  2023-10-05 12:48     ` Ihor Radchenko
  2023-10-05 15:52   ` Eli Zaretskii
  1 sibling, 1 reply; 23+ messages in thread
From: Max Nikulin @ 2023-10-05 12:20 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-devel

On 05/10/2023 18:40, Ihor Radchenko wrote:
> [ CCing emacs-devel ]
> 
> To emacs-devel: Would it be of interest to expose man/woman completion
> API?

Since Org mode supports a couple of previous Emacs versions, I would 
avoid cross-posting. I just sent a draft to evaluate if code can be 
added to Org.

>>      (let ((completion-ignore-case t)) ; See `man' comments.
> 
> `completion-ignore-case' is not set in woman.

There are enough inconsistencies between man and woman, I am unsure if 
all of them should be mirrored in Org mode.

Frankly speaking, I am unsure if woman should be supported in Org at 
all. My early experience with woman.el was not nice. I tried M-x woman 
RET ssh RET (openssh).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 12:20   ` Max Nikulin
@ 2023-10-05 12:48     ` Ihor Radchenko
  2023-10-05 15:59       ` Max Nikulin
  0 siblings, 1 reply; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 12:48 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode, emacs-devel

Max Nikulin <manikulin@gmail.com> writes:

>> To emacs-devel: Would it be of interest to expose man/woman completion
>> API?
>
> Since Org mode supports a couple of previous Emacs versions, I would 
> avoid cross-posting. I just sent a draft to evaluate if code can be 
> added to Org.

Previous Emacs versions are not a concern, because we can rely on the
implementation details there. It is the new Emacs versions where
implementation details may change that are the concern. That's why I
decided to consult emacs-devel - if we cannot rely on these details, we
will add maintenance burden upon us to track internal implementation
changes in man/woman.

>>>      (let ((completion-ignore-case t)) ; See `man' comments.
>> 
>> `completion-ignore-case' is not set in woman.
>
> There are enough inconsistencies between man and woman, I am unsure if 
> all of them should be mirrored in Org mode.

They are already mirrored. Mostly. Consider the same Org file opened by
different users with `org-man-command' set to 'man and 'woman.

> Frankly speaking, I am unsure if woman should be supported in Org at 
> all. My early experience with woman.el was not nice. I tried M-x woman 
> RET ssh RET (openssh).

woman is not trying to be complete. See [[info:woman#Introduction]].

For Org support, we already support it, and it would be a feature
regression if we remove it.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 11:40 ` Ihor Radchenko
  2023-10-05 12:20   ` Max Nikulin
@ 2023-10-05 15:52   ` Eli Zaretskii
  2023-10-05 16:05     ` Ihor Radchenko
  1 sibling, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2023-10-05 15:52 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: manikulin, emacs-orgmode, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: emacs-orgmode@gnu.org, emacs-devel@gnu.org
> Date: Thu, 05 Oct 2023 11:40:44 +0000
> 
> To emacs-devel: Would it be of interest to expose man/woman completion
> API?

How is it different from the "M-x man" completion we already have?


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 12:48     ` Ihor Radchenko
@ 2023-10-05 15:59       ` Max Nikulin
  2023-10-05 16:15         ` Ihor Radchenko
  0 siblings, 1 reply; 23+ messages in thread
From: Max Nikulin @ 2023-10-05 15:59 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-devel

On 05/10/2023 19:48, Ihor Radchenko wrote:
> Max Nikulin writes:
> 
>> Frankly speaking, I am unsure if woman should be supported in Org at
>> all. My early experience with woman.el was not nice. I tried M-x woman
>> RET ssh RET (openssh).
> 
> woman is not trying to be complete. See [[info:woman#Introduction]].
> 
> For Org support, we already support it, and it would be a feature
> regression if we remove it.

World has changed since woman.el was developed. Are there systems with 
man pages available, but no man command nowadays? Android with man pages 
copied by its user?

I see a little value in a tool that can not handle a wide spread case 
when a better one is available. Features, that were unique for woman, 
have been implemented for man.

In WoMan I have not found a way to open <man:man(7)> directly without an 
additional prompt for the page section.

man.el has a lot of options how to select window for a man page. It is 
not the case for woman. For Org internal link types same/other window is 
controlled by prefix argument (however `org-open-at-point' doc string 
describes another meaning of prefix argument: if link should be opened 
in Emacs or an external application). I am unsure what is proper 
behavior of man links opened from Org, should Org try to make behavior 
consistent or it should let packages to act as they wish.




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 15:52   ` Eli Zaretskii
@ 2023-10-05 16:05     ` Ihor Radchenko
  2023-10-05 16:33       ` Eli Zaretskii
  0 siblings, 1 reply; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 16:05 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> To emacs-devel: Would it be of interest to expose man/woman completion
>> API?
>
> How is it different from the "M-x man" completion we already have?

M-x man will display the man page, while we just need `completing-read'
from the same source M-x man or M-x woman use.

The use-case is when users want to create an Org link to man page.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 15:59       ` Max Nikulin
@ 2023-10-05 16:15         ` Ihor Radchenko
  2023-10-05 16:37           ` Eli Zaretskii
  2023-10-06  3:58           ` Max Nikulin
  0 siblings, 2 replies; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 16:15 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode, emacs-devel

Max Nikulin <manikulin@gmail.com> writes:

> On 05/10/2023 19:48, Ihor Radchenko wrote:
>> Max Nikulin writes:
>> 
>>> Frankly speaking, I am unsure if woman should be supported in Org at
>>> all. My early experience with woman.el was not nice. I tried M-x woman
>>> RET ssh RET (openssh).
>> 
>> woman is not trying to be complete. See [[info:woman#Introduction]].
>> 
>> For Org support, we already support it, and it would be a feature
>> regression if we remove it.
>
> World has changed since woman.el was developed. Are there systems with 
> man pages available, but no man command nowadays? Android with man pages 
> copied by its user?

MS-DOS, for example. Or old Windows versions. Emacs can work on many
systems and there is no reason to avoid supporting more OSes when we do
not have to.

> I see a little value in a tool that can not handle a wide spread case 
> when a better one is available. Features, that were unique for woman, 
> have been implemented for man.

Which is why `org-man-command' is set to 'man by default.

> In WoMan I have not found a way to open <man:man(7)> directly without an 
> additional prompt for the page section.

> man.el has a lot of options how to select window for a man page. It is 
> not the case for woman.
> ... For Org internal link types same/other window is 
> controlled by prefix argument (however `org-open-at-point' doc string 
> describes another meaning of prefix argument: if link should be opened 
> in Emacs or an external application). I am unsure what is proper 
> behavior of man links opened from Org, should Org try to make behavior 
> consistent or it should let packages to act as they wish.

These two sound like feature requests for WoMan. These features might also
benefit Org, if implemented.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:05     ` Ihor Radchenko
@ 2023-10-05 16:33       ` Eli Zaretskii
  2023-10-05 16:53         ` Ihor Radchenko
  0 siblings, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2023-10-05 16:33 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: manikulin, emacs-orgmode, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: manikulin@gmail.com, emacs-orgmode@gnu.org, emacs-devel@gnu.org
> Date: Thu, 05 Oct 2023 16:05:02 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> To emacs-devel: Would it be of interest to expose man/woman completion
> >> API?
> >
> > How is it different from the "M-x man" completion we already have?
> 
> M-x man will display the man page, while we just need `completing-read'
> from the same source M-x man or M-x woman use.

Sorry, I don't understand: "M-x man" does provide completion.

And what do you mean by "`completing-read' from the same source M-x
man or M-x woman use"?

IOW, I think I have no clue of what are you trying to accomplish,
sorry.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:15         ` Ihor Radchenko
@ 2023-10-05 16:37           ` Eli Zaretskii
  2023-10-05 16:55             ` Ihor Radchenko
  2023-10-06  3:58           ` Max Nikulin
  1 sibling, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2023-10-05 16:37 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: manikulin, emacs-orgmode, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: emacs-orgmode@gnu.org, emacs-devel@gnu.org
> Date: Thu, 05 Oct 2023 16:15:07 +0000
> 
> Max Nikulin <manikulin@gmail.com> writes:
> 
> > World has changed since woman.el was developed. Are there systems with 
> > man pages available, but no man command nowadays? Android with man pages 
> > copied by its user?
> 
> MS-DOS, for example.

What we here call "MNS-DOS" (which is actually the DJGPP development
environment used to compile the MS-DOS build of Emacs) does have the
man command:

  http://www.delorie.com/pub/djgpp/current/v2apps/man13br2.zip

> Or old Windows versions.

The Windows port of the above is available from the ezwinports site.

> > In WoMan I have not found a way to open <man:man(7)> directly without an 
> > additional prompt for the page section.
> 
> > man.el has a lot of options how to select window for a man page. It is 
> > not the case for woman.
> > ... For Org internal link types same/other window is 
> > controlled by prefix argument (however `org-open-at-point' doc string 
> > describes another meaning of prefix argument: if link should be opened 
> > in Emacs or an external application). I am unsure what is proper 
> > behavior of man links opened from Org, should Org try to make behavior 
> > consistent or it should let packages to act as they wish.
> 
> These two sound like feature requests for WoMan. These features might also
> benefit Org, if implemented.

I don't think woman.el is being developed, or is it?


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:33       ` Eli Zaretskii
@ 2023-10-05 16:53         ` Ihor Radchenko
  2023-10-05 17:11           ` Eli Zaretskii
  0 siblings, 1 reply; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 16:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> > How is it different from the "M-x man" completion we already have?
>> 
>> M-x man will display the man page, while we just need `completing-read'
>> from the same source M-x man or M-x woman use.
>
> Sorry, I don't understand: "M-x man" does provide completion.

Yes, but one cannot replicate the same completion dialogue
programmatically in future-compatible way.

> And what do you mean by "`completing-read' from the same source M-x
> man or M-x woman use"?
>
> IOW, I think I have no clue of what are you trying to accomplish,
> sorry.

We aim to create Org links like [[man:ls]].
To create a link in Org, the interface is C-c C-l (org-insert-link),
which then prompts for link type (man:) and link path (ls).
When querying for the path, we want to have the same completion
COLLECTION as M-x man/woman has.

For now, as you can see in the quoted code from my initial message, we
have to partially replicate the code from man.el and woman.el:

(defun org-man--complete-man (prompt)
   (require 'man)
   (let (Man-completion-cache) ;; <- implementation detail in man.el
     (completing-read
      prompt
      'Man-completion-table)))

(defun org-man--init-woman-cache (&optional re-cache) ;; <- implementation detail in woman.el
   (unless (and (not re-cache)
		(or
		 (and woman-expanded-directory-path
		      woman-topic-all-completions)
		 (woman-read-directory-cache)))
     (setq woman-expanded-directory-path
	   (woman-expand-directory-path woman-manpath woman-path))
     (setq woman-totic-all-completions
	   (woman-topic-all-completions woman-expand-directory-path))
     (woman-write-directory-cache)))

(defun org-man--complete-woman (prompt)
   (require 'woman)
   (org-man--init-woman-cache)
   (completing-read prompt woman-topic-all-completions))

However, `Man-completion-table' is not documented (no docstring),
`woman-topic-all-completions' is tricky to use - we have to copy-paste
cache initialization code and later make sure that we keep things up to
date to upstream.

What I am asking here is to provide a stable Elisp API for the above use
case. Currently, we have to rely on implementation details.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:37           ` Eli Zaretskii
@ 2023-10-05 16:55             ` Ihor Radchenko
  2023-10-05 17:13               ` Eli Zaretskii
  0 siblings, 1 reply; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 16:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Ihor Radchenko <yantar92@posteo.net>
>> Cc: emacs-orgmode@gnu.org, emacs-devel@gnu.org
>> Date: Thu, 05 Oct 2023 16:15:07 +0000
>> 
>> Max Nikulin <manikulin@gmail.com> writes:
>> 
>> > World has changed since woman.el was developed. Are there systems with 
>> > man pages available, but no man command nowadays? Android with man pages 
>> > copied by its user?
> ...
> What we here call "MNS-DOS" (which is actually the DJGPP development
> environment used to compile the MS-DOS build of Emacs) does have the
> man command:
>
>   http://www.delorie.com/pub/djgpp/current/v2apps/man13br2.zip
> ...
> The Windows port of the above is available from the ezwinports site.

> ...
> I don't think woman.el is being developed, or is it?

Do you mean that woman.el will be obsoleted?

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:53         ` Ihor Radchenko
@ 2023-10-05 17:11           ` Eli Zaretskii
  2023-10-05 17:36             ` Ihor Radchenko
  2023-10-06  3:16             ` Max Nikulin
  0 siblings, 2 replies; 23+ messages in thread
From: Eli Zaretskii @ 2023-10-05 17:11 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: manikulin, emacs-orgmode, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: manikulin@gmail.com, emacs-orgmode@gnu.org, emacs-devel@gnu.org
> Date: Thu, 05 Oct 2023 16:53:57 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> > How is it different from the "M-x man" completion we already have?
> >> 
> >> M-x man will display the man page, while we just need `completing-read'
> >> from the same source M-x man or M-x woman use.
> >
> > Sorry, I don't understand: "M-x man" does provide completion.
> 
> Yes, but one cannot replicate the same completion dialogue
> programmatically in future-compatible way.

What do you mean by that?  "M-x man" does this:

  (interactive
   (list (let* ((default-entry (Man-default-man-entry))
		;; ignore case because that's friendly for bizarre
		;; caps things like the X11 function names and because
		;; "man" itself is case-insensitive on the command line
		;; so you're accustomed not to bother about the case
		;; ("man -k" is case-insensitive similarly, so the
		;; table has everything available to complete)
		(completion-ignore-case t)
		Man-completion-cache    ;Don't cache across calls.
		(input (completing-read
			(format-prompt "Manual entry"
                                       (and (not (equal default-entry ""))
                                            default-entry))
                        'Man-completion-table
			nil nil nil 'Man-topic-history default-entry)))

This uses completing-read, as I think you wanted.

> > And what do you mean by "`completing-read' from the same source M-x
> > man or M-x woman use"?
> >
> > IOW, I think I have no clue of what are you trying to accomplish,
> > sorry.
> 
> We aim to create Org links like [[man:ls]].
> To create a link in Org, the interface is C-c C-l (org-insert-link),
> which then prompts for link type (man:) and link path (ls).
> When querying for the path, we want to have the same completion
> COLLECTION as M-x man/woman has.

Why cannot you reuse Man-completion-table?

> For now, as you can see in the quoted code from my initial message, we
> have to partially replicate the code from man.el and woman.el:
> 
> (defun org-man--complete-man (prompt)
>    (require 'man)
>    (let (Man-completion-cache) ;; <- implementation detail in man.el
>      (completing-read
>       prompt
>       'Man-completion-table)))

And why is that a problem?

> However, `Man-completion-table' is not documented (no docstring),

If the only thing that's missing is its doc string, that is easy to
add.

> What I am asking here is to provide a stable Elisp API for the above use
> case. Currently, we have to rely on implementation details.

From where I stand, we have already a stable API tested by years of
use.  What is maybe missing is some documentation to allow its easier
use, that's all.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:55             ` Ihor Radchenko
@ 2023-10-05 17:13               ` Eli Zaretskii
  2023-10-05 17:30                 ` Ihor Radchenko
                                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Eli Zaretskii @ 2023-10-05 17:13 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: manikulin, emacs-orgmode, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: manikulin@gmail.com, emacs-orgmode@gnu.org, emacs-devel@gnu.org
> Date: Thu, 05 Oct 2023 16:55:02 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Ihor Radchenko <yantar92@posteo.net>
> >> Cc: emacs-orgmode@gnu.org, emacs-devel@gnu.org
> >> Date: Thu, 05 Oct 2023 16:15:07 +0000
> >> 
> >> Max Nikulin <manikulin@gmail.com> writes:
> >> 
> >> > World has changed since woman.el was developed. Are there systems with 
> >> > man pages available, but no man command nowadays? Android with man pages 
> >> > copied by its user?
> > ...
> > What we here call "MNS-DOS" (which is actually the DJGPP development
> > environment used to compile the MS-DOS build of Emacs) does have the
> > man command:
> >
> >   http://www.delorie.com/pub/djgpp/current/v2apps/man13br2.zip
> > ...
> > The Windows port of the above is available from the ezwinports site.
> 
> > ...
> > I don't think woman.el is being developed, or is it?
> 
> Do you mean that woman.el will be obsoleted?

AFAIU, it already is, de-facto.  Unless someone steps forward and
volunteers to develop woman.el so as to add all the many missing
features that Groff has added during the last years, woman.el will
continue to bitrot.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 17:13               ` Eli Zaretskii
@ 2023-10-05 17:30                 ` Ihor Radchenko
       [not found]                 ` <ufnvit$12ho$1@ciao.gmane.io>
  2023-10-07 11:14                 ` Michael Albinus
  2 siblings, 0 replies; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 17:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Do you mean that woman.el will be obsoleted?
>
> AFAIU, it already is, de-facto.  Unless someone steps forward and
> volunteers to develop woman.el so as to add all the many missing
> features that Groff has added during the last years, woman.el will
> continue to bitrot.

Good to know. Then, I do not see much point adding woman support in the
discussed ol-man patch.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 17:11           ` Eli Zaretskii
@ 2023-10-05 17:36             ` Ihor Radchenko
  2023-10-06  3:16             ` Max Nikulin
  1 sibling, 0 replies; 23+ messages in thread
From: Ihor Radchenko @ 2023-10-05 17:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Yes, but one cannot replicate the same completion dialogue
>> programmatically in future-compatible way.
>
> What do you mean by that?  "M-x man" does this:
>
>   (interactive
>    (list (let* ((default-entry (Man-default-man-entry))
> 		;; ignore case because that's friendly for bizarre
> 		;; caps things like the X11 function names and because
> 		;; "man" itself is case-insensitive on the command line
> 		;; so you're accustomed not to bother about the case
> 		;; ("man -k" is case-insensitive similarly, so the
> 		;; table has everything available to complete)
> 		(completion-ignore-case t)
> 		Man-completion-cache    ;Don't cache across calls.
> 		(input (completing-read
> 			(format-prompt "Manual entry"
>                                        (and (not (equal default-entry ""))
>                                             default-entry))
>                         'Man-completion-table
> 			nil nil nil 'Man-topic-history default-entry)))
>
> This uses completing-read, as I think you wanted.
> ...
> Why cannot you reuse Man-completion-table?
>
>> For now, as you can see in the quoted code from my initial message, we
>> have to partially replicate the code from man.el and woman.el:
>> 
>> (defun org-man--complete-man (prompt)
>>    (require 'man)
>>    (let (Man-completion-cache) ;; <- implementation detail in man.el
>>      (completing-read
>>       prompt
>>       'Man-completion-table)))
>
> And why is that a problem?

Because we also need to bind (completion-ignore-case t) and
(Man-completion-cache nil). Ideally, these details should not be
something we need to know. It would be better if man.el provided some
kind of API function like `man-completing-read' that takes care about
these details, which are apparently necessary to avoid bug#13160 and
bug#3717.

>> However, `Man-completion-table' is not documented (no docstring),
>
> If the only thing that's missing is its doc string, that is easy to
> add.

Docstring would certainly help. Otherwise, we have to guess what that
function does.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 17:11           ` Eli Zaretskii
  2023-10-05 17:36             ` Ihor Radchenko
@ 2023-10-06  3:16             ` Max Nikulin
  1 sibling, 0 replies; 23+ messages in thread
From: Max Nikulin @ 2023-10-06  3:16 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-devel

On 06/10/2023 00:11, Eli Zaretskii wrote:
>  From where I stand, we have already a stable API tested by years of
> use.  What is maybe missing is some documentation to allow its easier
> use, that's all.

In some cases it is no API but just an interactive command. Sometimes it 
can be used from other code, sometimes it requires to copy-paste enough 
implementation details to achieve a similar effect.

While man.el requires "just" resetting cache and disabling case 
sensitivity, woman.el needs to initialize cache before invoking a 
completion function. When woman.el is considered in isolation, it is not 
an issue that `woman-file-name' is not decomposed into smaller functions 
since there is no need to reuse parts of its code. However it becomes an 
obstacle when another package tries to interact with woman.

Side note: I am afraid of behavior divergence for `man' and 
`org-insert-link' in future, but I have not figured out what API I would 
expect.




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 16:15         ` Ihor Radchenko
  2023-10-05 16:37           ` Eli Zaretskii
@ 2023-10-06  3:58           ` Max Nikulin
  1 sibling, 0 replies; 23+ messages in thread
From: Max Nikulin @ 2023-10-06  3:58 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-devel

On 05/10/2023 23:15, Ihor Radchenko wrote:
> Max Nikulin writes:
>> World has changed since woman.el was developed. Are there systems with
>> man pages available, but no man command nowadays? Android with man pages
>> copied by its user?
> 
> MS-DOS, for example. Or old Windows versions. Emacs can work on many
> systems and there is no reason to avoid supporting more OSes when we do
> not have to.

I am curious if users running Org mode on MS-DOS or Windows and reading 
man pages using WoMan exist. I mentioned Android since it may be handy 
to have man pages in your pocket. However being on-line (in its modern 
meaning, not when man pages appeared), it might be more convenient to 
use https://manpages.debian.org/ https://man.archlinux.org/man/ due much 
better heuristics for cross-references than used in man.el.




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
       [not found]                 ` <ufnvit$12ho$1@ciao.gmane.io>
@ 2023-10-06 21:37                   ` Richard Stallman
  0 siblings, 0 replies; 23+ messages in thread
From: Richard Stallman @ 2023-10-06 21:37 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-devel, emacs-orgmode

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > It seems, I was not the only person who had an impression that `woman' 
  > is the Emacs way to read man pages. I have no idea concerning its 
  > origin, perhaps some pages and comments I had seen on the net.

This suggests that running M-x woman should display a message saying to
use M-x man instead.

The message could add this

   The name M-x man refers to the old Unix command `man', which is
   short for "manual".  Its purpose is to read pages of the manual.
   Mx- woman was a joke based on that name.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-05 17:13               ` Eli Zaretskii
  2023-10-05 17:30                 ` Ihor Radchenko
       [not found]                 ` <ufnvit$12ho$1@ciao.gmane.io>
@ 2023-10-07 11:14                 ` Michael Albinus
  2 siblings, 0 replies; 23+ messages in thread
From: Michael Albinus @ 2023-10-07 11:14 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Ihor Radchenko, manikulin, emacs-orgmode, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

Hi,

>> > I don't think woman.el is being developed, or is it?
>>
>> Do you mean that woman.el will be obsoleted?
>
> AFAIU, it already is, de-facto.  Unless someone steps forward and
> volunteers to develop woman.el so as to add all the many missing
> features that Groff has added during the last years, woman.el will
> continue to bitrot.

In my long-term TODO there is adding support for man pages on remote
hosts. This is counted for man.el, no plans for woman.el. See discussion
at bug#46911. (Unfortunately, no progress yet).

Just a data point.

Best regards, Michael.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Completion of links to man pages
  2023-10-04 11:40 Completion of links to man pages Max Nikulin
  2023-10-05 11:40 ` Ihor Radchenko
@ 2023-12-09 11:32 ` Ihor Radchenko
  2023-12-13 15:20   ` [PATCH] ol-man.el: Enable completion Max Nikulin
  1 sibling, 1 reply; 23+ messages in thread
From: Ihor Radchenko @ 2023-12-09 11:32 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

Max Nikulin <manikulin@gmail.com> writes:

> I am unsure if the code below is appropriate for :complete property of 
> "man" link. It does not rely on any double-dash functions or variables, 
> but it still uses some implementation details since there is no suitable 
> high level functions in man.el and woman.el from Emacs.
>
> (defun org-man-complete (&optional _arg)
>    "Helper for completion of links to man pages."
>    (concat
>     "man:"
>     (let ((completion-ignore-case t)) ; See `man' comments.
>       (funcall
>        (if (eq org-man-command 'woman)
>            #'org-man--complete-woman
>          #'org-man--complete-man)
>        "Manual entry: "))))
>
> (defun org-man--complete-man (prompt)
>    (require 'man)
>    (let (Man-completion-cache)
>      (completing-read
>       prompt
>       'Man-completion-table)))
> ...

Considering that the discussion on emacs-devel concluded that woman is
obsolete, that no interest has been shown in introducing a stable
completion API, and that the "man" part of the above code is reasonably
simple, I think that the above two functions would be an OK addition to
ol-man (with woman part of `org-man-complete' removed).

Max, may you convert this into a patch?

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH] ol-man.el: Enable completion
  2023-12-09 11:32 ` Ihor Radchenko
@ 2023-12-13 15:20   ` Max Nikulin
  2023-12-14 15:09     ` Ihor Radchenko
  0 siblings, 1 reply; 23+ messages in thread
From: Max Nikulin @ 2023-12-13 15:20 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 451 bytes --]

On 09/12/2023 18:32, Ihor Radchenko wrote:
> Considering that the discussion on emacs-devel concluded that woman is
> obsolete, that no interest has been shown in introducing a stable
> completion API, and that the "man" part of the above code is reasonably
> simple, I think that the above two functions would be an OK addition to
> ol-man (with woman part of `org-man-complete' removed).
> 
> Max, may you convert this into a patch?

See attachments

[-- Attachment #2: 0001-ol-man.el-Enable-completion.patch --]
[-- Type: text/x-patch, Size: 2111 bytes --]

From d52265f6242b21561d5f96ae94afb1da37af1ce3 Mon Sep 17 00:00:00 2001
From: Max Nikulin <manikulin@gmail.com>
Date: Mon, 9 Oct 2023 18:47:04 +0700
Subject: [PATCH 1/2] ol-man.el: Enable completion

* lisp/ol-man.el (org-man-complete): New function implementing
completion for man pages using `Man-completion-table'.  Set this
function as the `:complete' property of "man" links.

Ihor Radchenko. Re: Completion of links to man pages.
Sat, 09 Dec 2023 11:32:39 +0000.
<https://list.orgmode.org/877clnsjag.fsf@localhost>
---
 etc/ORG-NEWS   |  6 ++++++
 lisp/ol-man.el | 12 ++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 9858df045..6c81221c1 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -729,6 +729,12 @@ respected.
 Images dropped also respect the value of ~org-yank-image-save-method~
 when ~org-yank-dnd-method~ is =attach=.
 
+*** Add completion for links to man pages
+
+Completion is enabled for links to man pages added using ~org-insert-link~:
+=C-c C-l man RET emacscl TAB= to get =emacsclient=.  Of course, the ~ol-man~
+library should be loaded first.
+
 ** New functions and changes in function arguments
 *** ~org-fold-hide-drawer-all~ is now interactive
 
diff --git a/lisp/ol-man.el b/lisp/ol-man.el
index b0701c689..f5533c5a5 100644
--- a/lisp/ol-man.el
+++ b/lisp/ol-man.el
@@ -34,6 +34,7 @@ (org-assert-version)
 (require 'ol)
 
 (org-link-set-parameters "man"
+                         :complete #'org-man-complete
 			 :follow #'org-man-open
 			 :export #'org-man-export
 			 :store #'org-man-store-link)
@@ -99,6 +100,17 @@ (defun org-man-export (link description backend)
      ((eq backend 'md) (format "[%s](%s)" desc path))
      (t path))))
 
+(defun org-man-complete (&optional _arg)
+  "Complete man pages for `org-insert-link'."
+  (require 'man)
+  (concat
+   "man:"
+   (let ((completion-ignore-case t) ; See `man' comments.
+         (Man-completion-cache)) ; See `man' implementation.
+     (completing-read
+      "Manual entry: "
+      'Man-completion-table))))
+
 (provide 'ol-man)
 
 ;;; ol-man.el ends here
-- 
2.39.2


[-- Attachment #3: 0002-ol-man.el-Mark-WoMan-link-handler-as-obsolete.patch --]
[-- Type: text/x-patch, Size: 1055 bytes --]

From d7ea42febd19825622c9779e197c37c4d9fd0435 Mon Sep 17 00:00:00 2001
From: Max Nikulin <manikulin@gmail.com>
Date: Wed, 13 Dec 2023 22:03:36 +0700
Subject: [PATCH 2/2] ol-man.el: Mark WoMan link handler as obsolete

lisp/ol-man.el (org-man-command): Add label suggesting against
the WoMan package as a viewer for man pages.  It has enough bugs.

Eli Zaretskii to emacs-orgmode. Re: Completion of links to man pages.
Thu, 05 Oct 2023 19:33:26 +0300.
<https://list.orgmode.org/orgmode/83sf6p2fgu.fsf@gnu.org>
---
 lisp/ol-man.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/ol-man.el b/lisp/ol-man.el
index f5533c5a5..633280942 100644
--- a/lisp/ol-man.el
+++ b/lisp/ol-man.el
@@ -42,7 +42,7 @@ (org-link-set-parameters "man"
 (defcustom org-man-command 'man
   "The Emacs command to be used to display a man page."
   :group 'org-link
-  :type '(choice (const man) (const woman)))
+  :type '(choice (const man) (const :tag "WoMan (obsolete)" woman)))
 
 (defun org-man-open (path _)
   "Visit the manpage on PATH.
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH] ol-man.el: Enable completion
  2023-12-13 15:20   ` [PATCH] ol-man.el: Enable completion Max Nikulin
@ 2023-12-14 15:09     ` Ihor Radchenko
  0 siblings, 0 replies; 23+ messages in thread
From: Ihor Radchenko @ 2023-12-14 15:09 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

Max Nikulin <manikulin@gmail.com> writes:

>> Max, may you convert this into a patch?
>
> See attachments

Thanks!
Applied, onto main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=7c9a5216b
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=b8d27bb4e

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2023-12-14 15:07 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-04 11:40 Completion of links to man pages Max Nikulin
2023-10-05 11:40 ` Ihor Radchenko
2023-10-05 12:20   ` Max Nikulin
2023-10-05 12:48     ` Ihor Radchenko
2023-10-05 15:59       ` Max Nikulin
2023-10-05 16:15         ` Ihor Radchenko
2023-10-05 16:37           ` Eli Zaretskii
2023-10-05 16:55             ` Ihor Radchenko
2023-10-05 17:13               ` Eli Zaretskii
2023-10-05 17:30                 ` Ihor Radchenko
     [not found]                 ` <ufnvit$12ho$1@ciao.gmane.io>
2023-10-06 21:37                   ` Richard Stallman
2023-10-07 11:14                 ` Michael Albinus
2023-10-06  3:58           ` Max Nikulin
2023-10-05 15:52   ` Eli Zaretskii
2023-10-05 16:05     ` Ihor Radchenko
2023-10-05 16:33       ` Eli Zaretskii
2023-10-05 16:53         ` Ihor Radchenko
2023-10-05 17:11           ` Eli Zaretskii
2023-10-05 17:36             ` Ihor Radchenko
2023-10-06  3:16             ` Max Nikulin
2023-12-09 11:32 ` Ihor Radchenko
2023-12-13 15:20   ` [PATCH] ol-man.el: Enable completion Max Nikulin
2023-12-14 15:09     ` Ihor Radchenko

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).