bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [21.3] [patch] M-x man does not pick word 'snmpd.conf(5)'


From: Jari Aalto
Subject: Re: [21.3] [patch] M-x man does not pick word 'snmpd.conf(5)'
Date: Thu, 25 Nov 2004 18:27:09 +0200
User-agent: Gnus/5.110003 (No Gnus v0.3) Emacs/21.3 (windows-nt)

Andreas Schwab <schwab@suse.de> writes:
| Jari Aalto <jari.aalto@cante.net> writes:
| 
| > --- man.el.orig     2004-11-21 18:05:53.000000000 +0200
| > +++ man.el  2004-11-21 18:45:26.000000000 +0200
| > @@ -502,23 +502,35 @@
| >  (defsubst Man-default-man-entry ()
| >    "Make a guess at a default manual entry.
| >  This guess is based on the text surrounding the cursor."
| > -  (let (word)
| > -    (save-excursion
| >        ;; Default man entry title is any word the cursor is on, or if
| >        ;; cursor not on a word, then nearest preceding word.
| > +  ;; Use local syntax table to find correct word in cases like:
| > +  ;;    ioctl(2) or brc(1M)
| > +  (let* (word
| > +    (ret "")
| > +    (table (syntax-table))
| > +    (orig  (copy-sequence table)))
| > +    (modify-syntax-entry ?\( "w" table)
| > +    (modify-syntax-entry ?\) "w" table)
| > +    (modify-syntax-entry ?. "w" table)  ;; snmpd.conf(5)=20
| > +    (modify-syntax-entry ?- "w" table)  ;; invoke-rc.d(8)
| > +    (set-syntax-table table)
| >        (setq word (current-word))
| > +    (set-syntax-table orig)
| 
| That should use with-syntax-table to not lose the old syntax table in cas=
| e
| of errors or quit (even if it is rather unlikely to occur).

Here.

Jari

2004-11-21  Jari Aalto  <jari aalto A T cante net>

        * man.el (Man-default-man-entry): Use local syntax
        table to get correct full word in cases like 'snmpd.conf(5)'
        and invoke-rc.d(8)

--- man.el.orig 2004-11-21 18:05:53.000000000 +0200
+++ man.el      2004-11-25 18:16:41.000000000 +0200
@@ -502,23 +502,33 @@
 (defsubst Man-default-man-entry ()
   "Make a guess at a default manual entry.
 This guess is based on the text surrounding the cursor."
-  (let (word)
-    (save-excursion
       ;; Default man entry title is any word the cursor is on, or if
       ;; cursor not on a word, then nearest preceding word.
+  ;; Use local syntax table to find correct word in cases like:
+  ;;    ioctl(2) or brc(1M)
+  (let (word
+       (ret "")
+       (table (syntax-table)))
+    (with-syntax-table table
+      (modify-syntax-entry ?\( "w" table)
+      (modify-syntax-entry ?\) "w" table)
+      (modify-syntax-entry ?.  "w" table)  ;; snmpd.conf(5) 
+      (modify-syntax-entry ?-  "w" table)  ;; invoke-rc.d(8)
       (setq word (current-word))
       (if (string-match "[._]+$" word)
          (setq word (substring word 0 (match-beginning 0))))
-      ;; If looking at something like ioctl(2) or brc(1M), include the
-      ;; section number in the returned value.  Remove text properties.
-      (forward-word 1)
+      ;; Delete leading "-.()".
+      (if (string-match "[a-zA-Z].*$" word)
+         (setq word (match-string 0 word)))
       ;; Use `format' here to clear any text props from `word'.
-      (format "%s%s"
-             word
-             (if (looking-at
-                  (concat "[ \t]*([ \t]*\\(" Man-section-regexp "\\)[ \t]*)"))
-                 (format "(%s)" (Man-match-substring 1))
-               "")))))
+      (cond
+       ((string-match (format "[^ \t\r\n]+(%s)" Man-section-regexp) word)
+       (setq ret (format "%s" (match-string 0 word))))
+       ((string-match "[^ \t\r\n()]+" word)
+       (setq word (match-string 0 word))
+       (if (> (length word) 1)
+           (setq ret (format "%s" word)))))
+      ret)))
 
 
 ;; ======================================================================





reply via email to

[Prev in Thread] Current Thread [Next in Thread]