all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Luc Teirlinck <teirllm@dms.auburn.edu>
Cc: pbreton@cs.umb.edu, emacs-devel@gnu.org
Subject: Re: locate-with-filter
Date: Mon, 13 Mar 2006 20:55:15 -0600 (CST)	[thread overview]
Message-ID: <200603140255.k2E2tFs05130@raven.dms.auburn.edu> (raw)
In-Reply-To: <E1FImaW-0005aL-M9@fencepost.gnu.org> (message from Richard Stallman on Mon, 13 Mar 2006 07:55:52 -0500)

Richard Stallman wrote:

   This is a small step in the wrong direction, so please don't do it.

The problem with `locate' in the docstring of `locate' is that it
creates a confusing self-referential link.  The problem with `locate'
to refer to the executable program of that name is that it creates a
link to the _Emacs_ command locate, creating even more confusion.

   The problem is that this description is not self-contained.  It
   assumes the reader knows about the `locate' program and knows what its
   output looks like.

   This command should have a self-contained description which is
   comprehensible without knowing about `locate'.

That is not as easy as it sounds.  There appear to be _very_ different
versions of locate, even of GNU locate, around.  Some treat
SEARCH-STRING as a literal string, some treat it as a shell pattern
and in certain cases, it treats SEARCH-STRING as a POSIX regular
expression.  The Info documentation I have installed says that locate
treats SEARCH-STRING as a shell pattern.  The man page says that it
treats it as a literal string, but that it has an option to treat it
as a POSIX regular expression instead.  The actual behavior matches
the man page.  Many operating systems, even UNIX style ones, have, by
default, no locate program installed at all.

Currently, you may need to read the comments at the beginning of
locate.el to use its functionality.  The patch below tries to put more
of that info in the docstrings.

I kept some references to "locate program", but in a context where I
first refer to the program as a `"locate" type program', so that no
confusion with relocation programs is possible.  I could
systematically write "locate executable program" instead, but in the
given context, that seemed redundant.

===File ~/locate-diff=======================================
*** locate.el	06 Feb 2006 16:01:50 -0600	1.35
--- locate.el	13 Mar 2006 20:35:53 -0600	
***************
*** 122,128 ****
    :group 'external)
  
  (defcustom locate-command "locate"
!   "*The executable program used to search a database of files."
    :type 'string
    :group 'locate)
  
--- 122,144 ----
    :group 'external)
  
  (defcustom locate-command "locate"
!   "Executable program for searching a database of files.
! The Emacs commands `locate' and `locate-with-filter' use this.
! The value should be a program that can be called from a shell
! with one argument, SEARCH-STRING.  The output of the program
! should consist of those file names in the database that match
! SEARCH-STRING, listed one per line, possibly with leading or
! trailing whitespace.  If the output is in another form, you may
! have to redefine the function `locate-get-file-positions'.
! 
! The program may interpret SEARCH-STRING as a literal string, a
! shell pattern or a regular expression.  The exact rules of what
! constitutes a match may also depend on the program.
! 
! The standard value of this variable is \"locate\".
! Do `M-x man RET locate RET' to check whether you have this
! program installed, how it interprets SEARCH-STRING and how it
! determines which files match SEARCH-STRING."
    :type 'string
    :group 'locate)
  
***************
*** 133,139 ****
    "The history list used by the \\[locate-with-filter] command.")
  
  (defcustom locate-make-command-line 'locate-default-make-command-line
!   "*Function used to create the locate command line."
    :type 'function
    :group 'locate)
  
--- 149,160 ----
    "The history list used by the \\[locate-with-filter] command.")
  
  (defcustom locate-make-command-line 'locate-default-make-command-line
!   "Function used to create the locate command line.
! The Emacs commands `locate' and `locate-with-filter' use this.
! This function should take one argument, a string (the name to find)
! and return a list.  The first element of the list should be a command
! to be executed by a shell, the remaining elements should be the arguments
! to that command (including the name to find)."
    :type 'function
    :group 'locate)
  
***************
*** 143,149 ****
    :group 'locate)
  
  (defcustom locate-fcodes-file nil
!   "*File name for the database of file names."
    :type '(choice (const :tag "None" nil) file)
    :group 'locate)
  
--- 164,170 ----
    :group 'locate)
  
  (defcustom locate-fcodes-file nil
!   "File name for the database of file names used by `locate'."
    :type '(choice (const :tag "None" nil) file)
    :group 'locate)
  
***************
*** 161,172 ****
    :version "22.1")
  
  (defcustom locate-update-command "updatedb"
!   "The command used to update the locate database."
    :type 'string
    :group 'locate)
  
  (defcustom locate-prompt-for-command nil
!   "If non-nil, the locate command prompts for a command to run.
  Otherwise, that behavior is invoked via a prefix argument."
    :group 'locate
    :type 'boolean
--- 182,193 ----
    :version "22.1")
  
  (defcustom locate-update-command "updatedb"
!   "The executable command used to update the locate database."
    :type 'string
    :group 'locate)
  
  (defcustom locate-prompt-for-command nil
!   "If non-nil, the `locate' command prompts for a command to run.
  Otherwise, that behavior is invoked via a prefix argument."
    :group 'locate
    :type 'boolean
***************
*** 190,197 ****
  
  ;;;###autoload
  (defun locate (search-string &optional filter)
!   "Run the program `locate', putting results in `*Locate*' buffer.
! With prefix arg, prompt for the locate command to run."
    (interactive
        (list
         (if (or (and current-prefix-arg
--- 211,232 ----
  
  ;;;###autoload
  (defun locate (search-string &optional filter)
!   "Run a \"locate\" type program, putting results in `*Locate*' buffer.
! Pass it SEARCH-STRING as argument.  Interactively, prompt for SEARCH_STRING.
! With prefix arg, prompt for the exact \"locate\" command to run instead.
! 
! Without prefix arg, this normally runs the executable program GNU locate.
! This program searches for those file names in a database that match
! SEARCH-STRING and normally outputs all matching absolute file names,
! one per line.  Do `M-x man RET locate RET' to check whether you have this
! program installed, how it interprets SEARCH-STRING and how it determines
! what constitutes a match.  (The details vary highly with the version.)
! 
! You can specify another program for this command to run by customizing
! the variables `locate-command' or `locate-make-command-line'.
! 
! The main use of FILTER is to implement `locate-with-filter'.  See
! the docstring of that function for its meaning."
    (interactive
        (list
         (if (or (and current-prefix-arg
***************
*** 255,264 ****
  
  ;;;###autoload
  (defun locate-with-filter (search-string filter)
!   "Run the locate command with a filter.
  
! The filter is a regular expression. Only results matching the filter are
! shown; this is often useful to constrain a big search."
    (interactive
     (list (read-from-minibuffer "Locate: " nil nil
  			       nil 'locate-history-list)
--- 290,305 ----
  
  ;;;###autoload
  (defun locate-with-filter (search-string filter)
!   "Run a \"locate\" type program with a filter.
! This is similar to `locate', which see.  The difference is that,
! when invoked interactively, this command prompts for both SEARCH-STRING
! and FILTER.  It passes SEARCH-STRING to the locate program.
! It only shows those lines in the output of the locate program
! that contain a match for the regular expression FILTER in the
! `*Locate*' buffer; this is often useful to constrain a big search.
  
! When called from Lisp, this function is identical with `locate',
! except that FILTER is not optional."
    (interactive
     (list (read-from-minibuffer "Locate: " nil nil
  			       nil 'locate-history-list)
***************
*** 269,275 ****
  (defun locate-filter-output (filter)
    "Filter output from the locate command."
    (goto-char (point-min))
!   (delete-non-matching-lines filter))
  
  (defvar locate-mode-map nil
    "Local keymap for Locate mode buffers.")
--- 310,316 ----
  (defun locate-filter-output (filter)
    "Filter output from the locate command."
    (goto-char (point-min))
!   (keep-lines filter))
  
  (defvar locate-mode-map nil
    "Local keymap for Locate mode buffers.")
============================================================
 LocalWords:  docstrings

  reply	other threads:[~2006-03-14  2:55 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-11 23:46 locate-with-filter Richard Stallman
2006-03-12 23:59 ` locate-with-filter Luc Teirlinck
2006-03-13  0:18   ` locate-with-filter Luc Teirlinck
2006-03-13  4:39     ` locate-with-filter Eli Zaretskii
2006-03-13 11:30       ` locate-with-filter Peter Breton
2006-03-13 12:55   ` locate-with-filter Richard Stallman
2006-03-14  2:55     ` Luc Teirlinck [this message]
2006-03-14  4:41       ` locate-with-filter Eli Zaretskii
2006-03-14  5:39         ` locate-with-filter Luc Teirlinck
2006-03-14 16:09       ` locate-with-filter Richard Stallman
2006-03-15  5:41         ` locate-with-filter Luc Teirlinck
2006-03-15 13:33           ` locate-with-filter Luc Teirlinck
2006-03-15 13:39             ` locate-with-filter Luc Teirlinck
2006-03-15 20:23           ` locate-with-filter Richard Stallman
2006-03-15 22:47             ` locate-with-filter Luc Teirlinck
2006-03-16 20:18               ` locate-with-filter Richard Stallman
2006-03-17  1:38                 ` locate-with-filter Luc Teirlinck
2006-03-17  2:21                 ` locate-with-filter Luc Teirlinck
2006-03-18  8:44                   ` locate-with-filter Richard Stallman
2006-03-18  8:59                     ` locate-with-filter Nick Roberts
2006-03-18 17:16                       ` locate-with-filter Luc Teirlinck
2006-03-19  4:15                         ` locate-with-filter Nick Roberts
2006-03-19  3:50                           ` locate-with-filter Luc Teirlinck
2006-03-19  4:55                           ` locate-with-filter Luc Teirlinck
2006-03-19  5:09                             ` locate-with-filter Luc Teirlinck
2006-03-19  5:22                               ` locate-with-filter Luc Teirlinck
2006-03-19 21:51                             ` locate-with-filter Richard Stallman
2006-03-20  5:12                               ` locate-with-filter Luc Teirlinck
2006-03-21  1:02                                 ` locate-with-filter Richard Stallman
2006-03-21  1:13                                   ` locate-with-filter Luc Teirlinck
2006-03-29  4:09                                   ` locate-with-filter Luc Teirlinck
2006-03-29 23:02                                     ` locate-with-filter Richard Stallman
2006-03-30  0:29                                       ` locate-with-filter Luc Teirlinck
2006-03-31  3:10                                         ` locate-with-filter Richard Stallman
2006-04-01  1:34                                           ` locate-with-filter Luc Teirlinck
2006-04-01  1:52                                           ` locate-with-filter Luc Teirlinck
2006-03-19  9:09                       ` locate-with-filter Richard Stallman
2006-03-19 20:15                         ` locate-with-filter Nick Roberts
2006-03-19 20:19                           ` locate-with-filter Luc Teirlinck
2006-03-19 22:05                             ` locate-with-filter Nick Roberts
2006-03-20 15:05                           ` locate-with-filter Richard Stallman
2006-03-19  1:28                     ` locate-with-filter Luc Teirlinck
2006-03-19  2:29                       ` locate-with-filter Luc Teirlinck
2006-03-20  6:18                 ` locate-with-filter Stefan Monnier
2006-03-14 16:09       ` locate-with-filter Richard Stallman
2006-03-15  5:37         ` locate-with-filter Luc Teirlinck
2006-03-15  5:48         ` locate-with-filter Luc Teirlinck
2006-03-15 20:23           ` locate-with-filter Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200603140255.k2E2tFs05130@raven.dms.auburn.edu \
    --to=teirllm@dms.auburn.edu \
    --cc=emacs-devel@gnu.org \
    --cc=pbreton@cs.umb.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.