-;;; em-glob.el --- extended file name globbing
+;;; em-glob.el --- extended file name globbing -*- lexical-binding:t -*-
-;; Copyright (C) 1999-2011 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2016 Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@gnu.org>
;;; Code:
-(eval-when-compile (require 'eshell))
(require 'esh-util)
+(eval-when-compile (require 'eshell))
;;;###autoload
-(eshell-defgroup eshell-glob nil
+(progn
+(defgroup eshell-glob nil
"This module provides extended globbing syntax, similar what is used
by zsh for filename generation."
:tag "Extended filename globbing"
- :group 'eshell-module)
+ :group 'eshell-module))
;;; User Variables:
(defcustom eshell-error-if-no-glob nil
"If non-nil, it is an error for a glob pattern not to match.
- This mimcs the behavior of zsh if non-nil, but bash if nil."
+ This mimics the behavior of zsh if non-nil, but bash if nil."
:type 'boolean
:group 'eshell-glob)
"*" "+")) (+ pos 2))
(cons "*" (1+ pos))))))
"An alist for translation of extended globbing characters."
- :type '(repeat (cons character (choice regexp function)))
+ :type '(alist :key-type character
+ :value-type (choice string function))
:group 'eshell-glob)
;;; Functions:
(goto-char (1+ end))))))))))
(defvar eshell-glob-chars-regexp nil)
+(defvar eshell-glob-matches)
+(defvar message-shown)
(defun eshell-glob-regexp (pattern)
"Convert glob-pattern PATTERN to a regular expression.
* .* matches any group of characters (or none)
# * matches zero or more occurrences of preceding
## + matches one or more occurrences of preceding
- (x) \(x\) makes 'x' a regular expression group
- | \| boolean OR within an expression group
+ (x) \\(x\\) makes `x' a regular expression group
+ | \\| boolean OR within an expression group
[a-b] [a-b] matches a character or range
[^a] [^a] excludes a character or range
matched-in-pattern (1+ op-begin))
(let ((xlat (assq op-char eshell-glob-translate-alist)))
(if (not xlat)
- (error "Unrecognized globbing character '%c'" op-char)
+ (error "Unrecognized globbing character `%c'" op-char)
(if (stringp (cdr xlat))
(setq regexp (concat regexp (cdr xlat))
matched-in-pattern (1+ op-begin))
(regexp-quote (substring pattern matched-in-pattern))
"\\'")))
+(defvar ange-cache) ; XEmacs? See esh-util
+
(defun eshell-extended-glob (glob)
"Return a list of files generated from GLOB, perhaps looking for DIRS-ONLY.
This function almost fully supports zsh style filename generation
(error "No matches found: %s" glob)
glob))))
-(defvar eshell-glob-matches)
-(defvar message-shown)
-
;; FIXME does this really need to abuse eshell-glob-matches, message-shown?
(defun eshell-glob-entries (path globs &optional recurse-p)
"Glob the entries in PATHS, possibly recursing if RECURSE-P is non-nil."
glob (car globs)
len (length glob)))))
(if (and recurse-p (not glob))
- (error "'**' cannot end a globbing pattern"))
+ (error "`**' cannot end a globbing pattern"))
(let ((index 1))
(setq incl glob)
(while (and (eq incl glob)