From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: [External] : Re: User setup for emacs Date: Mon, 11 Oct 2021 18:43:28 +0200 Message-ID: <87ee8r1phr.fsf@zoho.eu> References: <871r4s4eit.fsf@zoho.eu> <87k0ik2r0j.fsf@zoho.eu> <87r1cr1ql2.fsf@zoho.eu> <87ily31pof.fsf@zoho.eu> Reply-To: Emanuel Berg Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30912"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:ld/FbmsIikRWleHCs8ST30Ei/Ww= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Mon Oct 11 18:47:29 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mZySX-0007nK-F3 for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 11 Oct 2021 18:47:29 +0200 Original-Received: from localhost ([::1]:38564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mZySV-0005lq-Jz for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 11 Oct 2021 12:47:27 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mZyQG-0005le-0n for help-gnu-emacs@gnu.org; Mon, 11 Oct 2021 12:45:08 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:59906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mZyQE-0002Yz-BY for help-gnu-emacs@gnu.org; Mon, 11 Oct 2021 12:45:07 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mZyQA-0004Xp-Ak for help-gnu-emacs@gnu.org; Mon, 11 Oct 2021 18:45:02 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:133726 Archived-At: > I wonder what this code is supposed to do? And this, that ain't in Emacs? ;;; -*- lexical-binding: t -*- ;;; ;;; this file: ;;; http://user.it.uu.se/~embe8573/emacs-init/search-regexp-in-files.el ;; https://dataswamp.org/~incal/emacs-init/search-regexp-in-files.el (require 'cl-lib) ; cl-set-exclusive-or (defun files-as-list (file-regexp) (split-string (with-temp-buffer (call-process-shell-command (format "ls %s" file-regexp) nil t) ; no INFILE, temp BUFFER (buffer-substring (point-min) (point-max)) ))) (defun find-file-goto-line (file line) (interactive) (find-file-other-window file) (goto-char (point-min)) (forward-line (1- line)) (window-resize nil (- 2 (window-height)) nil t) ) (defun regexp-hits-find-hit () (interactive) (beginning-of-line) (let ((file (thing-at-point 'filename nil))) ; NO-PROPERTIES (end-of-line) (search-backward "(") (forward-char 1) (let ((window (selected-window)) (line (thing-at-point 'number nil)) ) (forward-line 1) (find-file-goto-line file line) (select-window window) ))) (defun set-regexp-hits-keys () (local-set-key "\r" #'regexp-hits-find-hit) (local-set-key "i" #'previous-line) (local-set-key "k" #'forward-line) ) (defun search-regexp-in-files (file-regexp regexp) (let ((paths (files-as-list file-regexp)) (regexp-hits "*regexp-hits*") (hits nil) ) (get-buffer-create regexp-hits) (let ((buffers (buffer-list))) ; get list to see if we opened the file - (with-current-buffer regexp-hits (goto-char (point-max)) (insert "---\n") (set-regexp-hits-keys) ) (dolist (p paths) (let ((buffer (find-file p)) ; here - (kill-later (cl-set-exclusive-or buffers (buffer-list))) ) ; by comparing (with-current-buffer buffer (save-excursion (goto-char (point-min)) (while (re-search-forward regexp nil t) ; no BOUND, NOERROR (setq hits t) (let ((hit-line (line-number-at-pos)) (match (match-string-no-properties 0)) ) (with-current-buffer regexp-hits (insert (format "%s [%s] (%s)\n" p match hit-line)) )))) (when kill-later (kill-buffer buffer) )))) (if hits (progn (switch-to-buffer regexp-hits) (set-buffer-modified-p nil) (goto-char (point-min)) ) (message "no hits!") )))) (when nil ;; find (- x x) - this is line 64 (search-regexp-in-files "~/.emacs.d/emacs-init/**/*.el" "(- \\(.*\\) \\1)") ;; find "kill" - should be some hits even for pacifists (search-regexp-in-files "~/.emacs" "kill") (search-regexp-in-files "~/.emacs.d/emacs-init/*.el" "kill") ;; find the construct (if a a b) if you want ;; to replace it with (or a b) ;; if it works, when applied to this file, it ;; should find the example above! (search-regexp-in-files (buffer-file-name) "([[:space:]\n]*if[[:space:]\n]+\\(.*\\)[[:space:]\n]+\\1[[:space:]\n]+\\(.*\\))" ) ) (provide 'search-regexp-in-files) -- underground experts united https://dataswamp.org/~incal