summaryrefslogtreecommitdiff
path: root/lisp/cedet/semantic/symref/grep.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2015-05-04 17:46:30 +0300
committerEli Zaretskii <eliz@gnu.org>2015-05-04 17:46:30 +0300
commit8c392682fc9938b2ee02cc2741bf6f680281b0c7 (patch)
treea7f9d2820d72e43fd77d18299cb88b7701ae420a /lisp/cedet/semantic/symref/grep.el
parent5d3940a3b9144efbc4db4a7b76a3331cebc64165 (diff)
downloademacs-8c392682fc9938b2ee02cc2741bf6f680281b0c7.tar.gz
emacs-8c392682fc9938b2ee02cc2741bf6f680281b0c7.tar.bz2
emacs-8c392682fc9938b2ee02cc2741bf6f680281b0c7.zip
Fix minor issues with CEDET on MS-Windows
* lisp/cedet/semantic/symref/idutils.el (semantic-symref-parse-tool-output-one-line): Fix the search regexp to match MS-Windows file names with drive letters. (Bug#19468) * lisp/cedet/semantic/symref/grep.el (semantic-symref-grep-use-template): Remove "--color=always" from Grep switches on MS-Windows. (semantic-symref-grep-shell): Use shell-file-name as the default value, so this works not only on Posix platforms. (semantic-symref-perform-search): Use shell-quote-argument instead of literal '..' for portable quoting of Grep command-line argument. Use shell-command-switch instead of a literal "-c". * lisp/cedet/semantic/bovine/gcc.el (semantic-gcc-get-include-paths): Use file-name-absolute-p to test for an absolute file name in a portable way.
Diffstat (limited to 'lisp/cedet/semantic/symref/grep.el')
-rw-r--r--lisp/cedet/semantic/symref/grep.el28
1 files changed, 20 insertions, 8 deletions
diff --git a/lisp/cedet/semantic/symref/grep.el b/lisp/cedet/semantic/symref/grep.el
index 981dab8a8b5..d57b50fb98f 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -105,17 +105,26 @@ GREPPATTERN is the pattern used by grep."
;; We have grep-compute-defaults. Let's use it.
(grep-compute-defaults)
(let* ((grep-expand-keywords semantic-symref-grep-expand-keywords)
- (cmd (grep-expand-template grep-find-template
- greppattern
- filepattern
- rootdir)))
+ (cmd (grep-expand-template
+ (if (memq system-type '(windows-nt ms-dos))
+ ;; grep-find uses '--color=always' on MS-Windows
+ ;; because it wants the colorized output, to show
+ ;; it to the user. By contrast, here we don't show
+ ;; the output, and the SGR escapes get in the way
+ ;; of parsing the output.
+ (replace-regexp-in-string "--color=always" ""
+ grep-find-template t t)
+ grep-find-template)
+ greppattern
+ filepattern
+ rootdir)))
;; For some reason, my default has no <D> in it.
(when (string-match "find \\(\\.\\)" cmd)
(setq cmd (replace-match rootdir t t cmd 1)))
;;(message "New command: %s" cmd)
cmd))
-(defcustom semantic-symref-grep-shell "sh"
+(defcustom semantic-symref-grep-shell shell-file-name
"The shell command to use for executing find/grep.
This shell should support pipe redirect syntax."
:group 'semantic
@@ -140,7 +149,8 @@ This shell should support pipe redirect syntax."
(greppat (cond ((eq (oref tool :searchtype) 'regexp)
(oref tool searchfor))
(t
- (concat "'\\<" (oref tool searchfor) "\\>'"))))
+ (shell-quote-argument
+ (concat "\\<" (oref tool searchfor) "\\>")))))
;; Misc
(b (get-buffer-create "*Semantic SymRef*"))
(ans nil)
@@ -158,10 +168,12 @@ This shell should support pipe redirect syntax."
(let ((cmd (concat "find " default-directory " -type f " filepattern " -print0 "
"| xargs -0 grep -H " grepflags "-e " greppat)))
;;(message "Old command: %s" cmd)
- (call-process semantic-symref-grep-shell nil b nil "-c" cmd)
+ (call-process semantic-symref-grep-shell nil b nil
+ shell-command-switch cmd)
)
(let ((cmd (semantic-symref-grep-use-template rootdir filepattern grepflags greppat)))
- (call-process semantic-symref-grep-shell nil b nil "-c" cmd))
+ (call-process semantic-symref-grep-shell nil b nil
+ shell-command-switch cmd))
))
(setq ans (semantic-symref-parse-tool-output tool b))
;; Return the answer