Skip to content

counsel-git-grep-occur - Lisp error #1225

@edkolev

Description

@edkolev

The following stopped working for me:

  • load counsel with (use-package counsel :ensure t)
  • counsel-git-grep some text
  • C-c C-o
  • I now get a lisp error, stack trace is pasted below.

I fixed the issue for me like so, however, I'm not sure if this is a proper fix:

git diff -U14
diff --git a/counsel.el b/counsel.el
index 2a3b10e..9c5cfa5 100644
--- a/counsel.el
+++ b/counsel.el
@@ -1341,34 +1341,34 @@ If NO-ASYNC is non-nil, do it synchronously instead."
 (defun counsel-git-grep-occur ()
   "Generate a custom occur buffer for `counsel-git-grep'.
 When REVERT is non-nil, regenerate the current *ivy-occur* buffer."
   (unless (eq major-mode 'ivy-occur-grep-mode)
     (ivy-occur-grep-mode)
     (setq default-directory counsel--git-dir))
   (setq ivy-text
         (and (string-match "\"\\(.*\\)\"" (buffer-name))
              (match-string 1 (buffer-name))))
   (let* ((regex (funcall ivy--regex-function ivy-text))
          (positive-pattern (replace-regexp-in-string
                             ;; git-grep can't handle .*?
                             "\\.\\*\\?" ".*"
                             (if (stringp regex) regex (caar regex))))
-         (negative-patterns
-          (mapconcat (lambda (x)
-                       (and (null (cdr x))
-                            (format "| grep -v %s" (car x))))
-                     regex
-                     " "))
+         (negative-patterns (if (stringp regex) ""
+                              (mapconcat (lambda (x)
+                                           (and (null (cdr x))
+                                                (format "| grep -v %s" (car x))))
+                                         regex
+                                         " ")))

The error seems to be caused by the fact that the regex is a string, but the code expects it to be some other structure.

This is the stack trace that I get without the above patch:

Debugger entered--Lisp error: (wrong-type-argument listp 100)
  cdr(100)
  (null (cdr x))
  (and (null (cdr x)) (format "| grep -v %s" (car x)))
  (closure ((positive-pattern . "defun") (regex . "defun") smex-ido-cache smex-initialized-p info-lookup-mode t) (x) (and (null (cdr x)) (format "| grep -v %s" (car x))))(100)
  mapconcat((closure ((positive-pattern . "defun") (regex . "defun") smex-ido-cache smex-initialized-p info-lookup-mode t) (x) (and (null (cdr x)) (format "| grep -v %s" (car x)))) "defun" " ")
  (let* ((regex (funcall ivy--regex-function ivy-text)) (positive-pattern (replace-regexp-in-string "\\.\\*\\?" ".*" (if (stringp regex) regex (car (car regex))))) (negative-patterns (mapconcat (function (lambda (x) (and (null ...) (format "| grep -v %s" ...)))) regex " "))$
  counsel-git-grep-occur()
  funcall(counsel-git-grep-occur)
  (if occur-fn (funcall occur-fn) (ivy-occur-mode) (insert (format "%d candidates:\n" (length ivy--old-cands))) (read-only-mode) (ivy--occur-insert-lines (mapcar (function (lambda (cand) (concat "    " cand))) ivy--old-cands)))
  (let ((inhibit-read-only t)) (erase-buffer) (if occur-fn (funcall occur-fn) (ivy-occur-mode) (insert (format "%d candidates:\n" (length ivy--old-cands))) (read-only-mode) (ivy--occur-insert-lines (mapcar (function (lambda (cand) (concat "    " cand))) ivy--old-cands))))
  (save-current-buffer (set-buffer buffer) (let ((inhibit-read-only t)) (erase-buffer) (if occur-fn (funcall occur-fn) (ivy-occur-mode) (insert (format "%d candidates:\n" (length ivy--old-cands))) (read-only-mode) (ivy--occur-insert-lines (mapcar (function (lambda (cand) (c$
  (let* ((caller (progn nil (or (progn nil (and (vectorp ivy-last) (>= ... 25) (memq ... cl-struct-ivy-state-tags) t)) (signal (quote wrong-type-argument) (list (quote ivy-state) ivy-last))) (aref ivy-last 22))) (occur-fn (plist-get ivy--occurs-list caller)) (buffer (genera$
  (if (not (window-minibuffer-p)) (user-error "No completion session is active") (let* ((caller (progn nil (or (progn nil (and ... ... ... t)) (signal (quote wrong-type-argument) (list ... ivy-last))) (aref ivy-last 22))) (occur-fn (plist-get ivy--occurs-list caller)) (buff$
  ivy-occur()
  funcall-interactively(ivy-occur)
  call-interactively(ivy-occur nil nil)
  command-execute(ivy-occur)
  read-from-minibuffer("git grep" nil (keymap (keymap (3 keymap (13 . counsel-git-grep-switch-cmd)) (27 keymap (113 . counsel-git-grep-query-replace)) (12 . ivy-call-and-recenter)) keymap (escape . minibuffer-keyboard-quit) (21 lambda nil (interactive) (kill-region (point) $
  (if (and ivy-auto-select-single-candidate (= (length ivy--all-candidates) 1)) (progn (progn nil (or (progn nil (and (vectorp ivy-last) (>= (length ivy-last) 25) (memq (aref ivy-last 0) cl-struct-ivy-state-tags) t)) (signal (quote wrong-type-argument) (list (quote ivy-stat$
  (let* ((hist (or history (quote ivy-history))) (minibuffer-completion-table collection) (minibuffer-completion-predicate predicate) (resize-mini-windows (cond ((display-graphic-p) nil) ((null resize-mini-windows) (quote grow-only)) (t resize-mini-windows)))) (if (and ivy-$
  (progn (add-hook (quote minibuffer-setup-hook) setup-hook) (let* ((hist (or history (quote ivy-history))) (minibuffer-completion-table collection) (minibuffer-completion-predicate predicate) (resize-mini-windows (cond ((display-graphic-p) nil) ((null resize-mini-windows) $
  (unwind-protect (progn (add-hook (quote minibuffer-setup-hook) setup-hook) (let* ((hist (or history (quote ivy-history))) (minibuffer-completion-table collection) (minibuffer-completion-predicate predicate) (resize-mini-windows (cond ((display-graphic-p) nil) ((null resiz$
  (let ((fun (function ivy--minibuffer-setup)) setup-hook) (setq setup-hook (function (lambda nil (remove-hook (quote minibuffer-setup-hook) setup-hook) (funcall fun)))) (unwind-protect (progn (add-hook (quote minibuffer-setup-hook) setup-hook) (let* ((hist (or history (quo$
  (unwind-protect (let ((fun (function ivy--minibuffer-setup)) setup-hook) (setq setup-hook (function (lambda nil (remove-hook (quote minibuffer-setup-hook) setup-hook) (funcall fun)))) (unwind-protect (progn (add-hook (quote minibuffer-setup-hook) setup-hook) (let* ((hist $
  (prog1 (unwind-protect (let ((fun (function ivy--minibuffer-setup)) setup-hook) (setq setup-hook (function (lambda nil (remove-hook (quote minibuffer-setup-hook) setup-hook) (funcall fun)))) (unwind-protect (progn (add-hook (quote minibuffer-setup-hook) setup-hook) (let* $
  (let ((ivy-recursive-last (and (active-minibuffer-window) ivy-last)) (transformer-fn (plist-get ivy--display-transformers-list (or caller (and (functionp collection) collection)))) (ivy-display-function (if (window-minibuffer-p) nil (cdr (assoc caller ivy-display-function$
  (progn (let ((extra-actions (delete-dups (append (plist-get ivy--actions-list t) (plist-get ivy--actions-list this-command) (plist-get ivy--actions-list caller))))) (if extra-actions (progn (setq action (cond ((functionp action) (cons 1 ...)) ((null action) (cons 1 ...)) $
  (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((memq (car --cl-keys--) (quote (:predicate :require-match :initial-input :history :preselect :def :keymap :update-fn :sort :action :unwind :re-builder :matcher :dynamic-collection :caller :allow-other-keys)$
  (let* ((predicate (car (cdr (plist-member --cl-rest-- (quote :predicate))))) (require-match (car (cdr (plist-member --cl-rest-- (quote :require-match))))) (initial-input (car (cdr (plist-member --cl-rest-- (quote :initial-input))))) (history (car (cdr (plist-member --cl-r$
  ivy-read("git grep" counsel-git-grep-function :initial-input nil :matcher counsel-git-grep-matcher :dynamic-collection nil :keymap (keymap (3 keymap (13 . counsel-git-grep-switch-cmd)) (27 keymap (113 . counsel-git-grep-query-replace)) (12 . ivy-call-and-recenter)) :actio$
  (let ((collection-function (if proj (function counsel-git-grep-proj-function) (function counsel-git-grep-function))) (unwind-function (if proj (function (lambda nil (counsel-delete-process) (swiper--cleanup))) (function (lambda nil (swiper--cleanup)))))) (ivy-read "git gr$
  (let ((proj-and-cmd (counsel--git-grep-cmd-and-proj cmd)) proj) (setq proj (car proj-and-cmd)) (setq counsel-git-grep-cmd (cdr proj-and-cmd)) (counsel-require-program (car (split-string counsel-git-grep-cmd))) (setq counsel--git-dir (if proj (car proj) (counsel-locate-git$
  counsel-git-grep(nil)
  funcall-interactively(counsel-git-grep nil)
  call-interactively(counsel-git-grep record nil)
  command-execute(counsel-git-grep record)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions