From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Pascal Quesseveur Newsgroups: gmane.emacs.help Subject: Re: Find tags with dot character Date: Tue, 23 Jul 2019 09:05:09 +0200 Organization: Les Enchantements de Miraldra Message-ID: <83d0i1xmca.fsf@gmail.com> References: <83k1caxjm4.fsf@gmail.com> Reply-To: pquessev@gmail.com Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="145909"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Jul 23 09:05:27 2019 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hporX-000By7-5q for geh-help-gnu-emacs@m.gmane.org; Tue, 23 Jul 2019 09:05:27 +0200 Original-Received: from localhost ([::1]:39674 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hporW-0008Ve-2A for geh-help-gnu-emacs@m.gmane.org; Tue, 23 Jul 2019 03:05:26 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36453) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hporR-0008VL-O1 for help-gnu-emacs@gnu.org; Tue, 23 Jul 2019 03:05:22 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hporQ-0002He-Kv for help-gnu-emacs@gnu.org; Tue, 23 Jul 2019 03:05:21 -0400 Original-Received: from 195-159-176-226.customer.powertech.no ([195.159.176.226]:45918 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hporQ-0002GK-Cd for help-gnu-emacs@gnu.org; Tue, 23 Jul 2019 03:05:20 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.89) (envelope-from ) id 1hporO-000BsD-44 for help-gnu-emacs@gnu.org; Tue, 23 Jul 2019 09:05:18 +0200 X-Injected-Via-Gmane: http://gmane.org/ X-Attribution: PQsr Cancel-Lock: sha1:TVValEZLHeY9RCJkZ4fHSSbM13A= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 195.159.176.226 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.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.org gmane.emacs.help:122044 >"SM" == Stefan Monnier writes: SM> In case of an error (or a C-g) during the execution of find-tag-default, SM> this will fail to restore the syntax-table to its original state, so SM> I recommend: SM> (defun my-find-tag-default-opascal () SM> (unwind-protect SM> (progn (modify-syntax-entry ?. "w") SM> (find-tag-default)) SM> (modify-syntax-entry ?. "."))) OK. > And in Delphi mode hook, I added: > > (setq find-tag-default-function 'my-find-tag-default-opascal) SM> This likely affects the variable globally, so maybe you'd want SM> to use `setq-local` instead. Yes, thank you. SM> Your approach above will make thing worse in several important SM> use cases (e.g. when point is on "." where we won't SM> find that tag anywhere (we'd have to lookup something like SM> "." instead)) Yes, we need both. SM> is by default, but I think we'd welcome patches which try to SM> improve on this (e.g. by first trying with the dots and if that SM> fails try again without them). I'm afraid I'm not expert enough to propose a modification of etags, either etags the program or the etags handling in emacs. In addition i use an old version of emacs (24.3) for delphi devlopment, where I don't have the new opascal mode, only delphi-mode. I still tried and produced those functions: (defun my-find-tag-opascal-helper (prompt) "Helper to call find-tag and catch errors. I was unable to call find-tag-interactive, so I used find-tag-tag without any options." (condition-case err (let ((tagname (find-tag-tag prompt))) (find-tag tagname) t) (error (message "%s" (error-message-string err)) nil))) (defun my-find-tag-opascal() "First call find-tag using current find-tag-default-function, and when no tags are found call find-tag again with find-tag-default-function set to nil." (interactive) (let ((xp (point)) (xb (current-buffer)) tfunc) (unless (my-find-tag-opascal-helper "Find tag: ") (set-buffer xb) (goto-char xp) (setq tfunc find-tag-default-function) (setq-local find-tag-default-function nil) (unwind-protect (my-find-tag-opascal-helper "Tag not found. Retry with: ") (set-buffer xb) (setq-local find-tag-default-function tfunc))))) -- Pascal Quesseveur pquessev@gmail.com