From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Curse that hunk! Date: Thu, 12 Aug 2021 10:49:05 +0300 Organization: LINKOV.NET Message-ID: <875ywbcg4e.fsf@mail.linkov.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="31960"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) Cc: emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Aug 12 10:15:48 2021 Return-path: Envelope-to: ged-emacs-devel@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 1mE5sS-000882-T2 for ged-emacs-devel@m.gmane-mx.org; Thu, 12 Aug 2021 10:15:48 +0200 Original-Received: from localhost ([::1]:53994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mE5sR-0006hr-06 for ged-emacs-devel@m.gmane-mx.org; Thu, 12 Aug 2021 04:15:47 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:58204) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mE5re-00060b-Rs for emacs-devel@gnu.org; Thu, 12 Aug 2021 04:14:58 -0400 Original-Received: from relay11.mail.gandi.net ([217.70.178.231]:60539) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mE5rc-0006Ug-Eb for emacs-devel@gnu.org; Thu, 12 Aug 2021 04:14:58 -0400 Original-Received: (Authenticated sender: juri@linkov.net) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 14CCD10000A; Thu, 12 Aug 2021 08:14:50 +0000 (UTC) In-Reply-To: (Alan Mackenzie's message of "Wed, 11 Aug 2021 19:53:46 +0000") Received-SPF: pass client-ip=217.70.178.231; envelope-from=juri@linkov.net; helo=relay11.mail.gandi.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:272346 Archived-At: > Finding the point where a patch hunk's old lines fail to match the file > being patched is tedious and error prone. There surely ought to be a > Lisp program, perhaps in diff.el which would fine these differences. If you need only to find the point of mismatch, then what I do is just remove the diff indicators from the diff buffers with (replace-regexp "^[+-]" ""), and then compare two buffers with the usual compare-windows or ediff-buffers. Also sometimes there is a need to isearch a multi-line string in the diff buffer. For such cases I wrote an isearch mode that ignores diff-mode hunk indicators such as '+' or '-' at the beginning of the diff lines. For example, put the deleted hunk to the search string, then search it for the next match, and it will find the hunk moved to another part of the file: #+begin_src emacs-lisp (isearch-define-mode-toggle diff-hunk "+" diff-hunk-to-regexp "\ Ignore diff-mode hunk indicators such as ‘+’ or ‘-’ at bol.") (defun diff-hunk-to-regexp (string &optional _lax _from) (replace-regexp-in-string "[[:space:]]+" "[[:space:]]+" (replace-regexp-in-string "^\\(\\\\\\+\\|-\\)" "\\(^\\)[+-]" (regexp-quote string) nil t))) (add-hook 'diff-mode-hook (lambda () (setq-local search-default-mode 'diff-hunk-to-regexp))) #+end_src