From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Fan Yang Newsgroups: gmane.emacs.bugs Subject: bug#38648: 27.0.50; Emacs `compile' command does not handle remote (over TRAMP) file name correctly Date: Tue, 17 Dec 2019 20:44:28 +0800 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="61996"; mail-complaints-to="usenet@blaine.gmane.org" To: 38648@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Dec 17 13:49:36 2019 Return-path: Envelope-to: geb-bug-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 1ihCIA-000Fws-B6 for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Dec 2019 13:49:34 +0100 Original-Received: from localhost ([::1]:39930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihCI8-00081Q-9d for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Dec 2019 07:49:32 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52748) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihCFp-00063a-2a for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:47:16 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ihCFi-0000j0-Kw for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:47:09 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:34825) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ihCFi-0000it-E2 for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:47:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ihCFi-0007u8-CW for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:47:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Fan Yang Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 17 Dec 2019 12:47:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 38648 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.157658678130333 (code B ref -1); Tue, 17 Dec 2019 12:47:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 17 Dec 2019 12:46:21 +0000 Original-Received: from localhost ([127.0.0.1]:40798 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ihCF1-0007t8-LB for submit@debbugs.gnu.org; Tue, 17 Dec 2019 07:46:21 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:47356) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ihCEx-0007sw-AB for submit@debbugs.gnu.org; Tue, 17 Dec 2019 07:46:17 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52576) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ihCEr-0004nM-1J for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:46:14 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ihCEk-000054-9w for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:46:08 -0500 Original-Received: from smtp180.sjtu.edu.cn ([202.120.2.180]:40084) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ihCEi-0008PI-IX for bug-gnu-emacs@gnu.org; Tue, 17 Dec 2019 07:46:02 -0500 Original-Received: from proxy01.sjtu.edu.cn (unknown [202.112.26.54]) by smtp180.sjtu.edu.cn (Postfix) with ESMTPS id 4810010087473 for ; Tue, 17 Dec 2019 20:45:32 +0800 (CST) Original-Received: from localhost (localhost [127.0.0.1]) by proxy01.sjtu.edu.cn (Postfix) with ESMTP id 32C7B201300E7 for ; Tue, 17 Dec 2019 20:45:32 +0800 (CST) X-Virus-Scanned: amavisd-new at proxy01.sjtu.edu.cn Original-Received: from proxy01.sjtu.edu.cn ([127.0.0.1]) by localhost (proxy01.sjtu.edu.cn [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id NT69prS0TTyU for ; Tue, 17 Dec 2019 20:45:31 +0800 (CST) Original-Received: from Fans-Air.ipads-lab.se.sjtu.edu.cn (unknown [202.120.40.82]) (Authenticated sender: Fan_Yang) by proxy01.sjtu.edu.cn (Postfix) with ESMTPSA id D4362200EDDA5 for ; Tue, 17 Dec 2019 20:45:31 +0800 (CST) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:173479 Archived-At: Re-produce steps: 1. `find-file' to my project root directory on a remote machine, namely, "/scp:vm00:pmdk-balloon/". 2. `M-x compile', and give compile command "make". 3. (Previously I have injected some typos in some of my source files, say "obj.c"). 4. In the *compilation* buffer, the "obj.c" file appears. But when I click the underlined text (or on it), an error occurs in the minibuffer: "Find this error in (default obj.c): /scp:vm00:/System/Volumes/Data/home= /fan/pmdk-balloon/src/libpmemobj" The "/System/Volumes/Data/" is actually a path on my local machine. 5. To further confirm, I use `C-u C-x =3D' on the underlined text in the *compilation* buffer. The "compilation-message" text property shows: #s(compilation--message (nil 42 (("../common/vec.h" "/scp:vm00:/System/Volumes/Data/home/fan/pmdk-b= alloon/src/libpmemobj") nil (42 #1)) nil nil) 0 nil) It appears that when compile.el was handling the remote path, it mixed-up part of my local machine path with the remote machine path, resulting the error. I use Edebug to instrument `compilation-get-file-structure' and then `file-truename' to find when my local path "/System/Volumes/Data/" is inserted, here is a backtrace: lines started with a "*" is what I think important. (file-symlink-p filename) (setq target (file-symlink-p filename)) (if (equal "." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name dir) done t) (setq filename (concat dir (file-name-nondirector= y filename))) (setq target (file-symlink-p filename)) (if target (setq file= name (files--splice-dirname-file dir target) done nil) (setq done t))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (direct= ory-file-name (file-name-directory (directory-file-name dir))) done t) (if = (equal "." (file-name-nondirectory filename)) (setq filename (directory-fil= e-name dir) done t) (setq filename (concat dir (file-name-nondirectory file= name))) (setq target (file-symlink-p filename)) (if target (setq filename (= files--splice-dirname-file dir target) done nil) (setq done t)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/System" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/System/Volumes" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) * file-truename("/System/Volumes/Data" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) * file-truename("/home" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/home/fan" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/home/fan/pmdk-balloon" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/home/fan/pmdk-balloon/src" (91) (nil)) (file-name-as-directory (file-truename dirfile counter prev-dirs)) (let ((old dir) (new (file-name-as-directory (file-truename dirfile count= er prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (= setq dir new)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir (car prev-dirs)= ))) (let ((old dir) (new (file-name-as-directory (file-truename dirfile cou= nter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs)))= (setq dir new))) (or (string=3D dir dirfile) (and (file-name-case-insensitive-p dir) (eq (= compare-strings dir 0 nil dirfile 0 nil t) t)) (if (assoc dir (car prev-dir= s)) (setq dir (cdr (assoc dir (car prev-dirs)))) (let ((old dir) (new (file= -name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar pre= v-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) (let ((dir (or (file-name-directory filename) default-directory)) target = dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfil= e) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil d= irfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc d= ir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory (file-tr= uename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new)= (car prev-dirs))) (setq dir new)))) (if (equal ".." (file-name-nondirector= y filename)) (setq filename (directory-file-name (file-name-directory (dire= ctory-file-name dir))) done t) (if (equal "." (file-name-nondirectory filen= ame)) (setq filename (directory-file-name dir) done t) (setq filename (conc= at dir (file-name-nondirectory filename))) (setq target (file-symlink-p fil= ename)) (if target (setq filename (files--splice-dirname-file dir target) d= one nil) (setq done t))))) (if handler (setq filename (funcall handler 'file-truename filename) done= t) (let ((dir (or (file-name-directory filename) default-directory)) targe= t dirfile) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirf= ile) (and (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil= dirfile 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc= dir (car prev-dirs)))) (let ((old dir) (new (file-name-as-directory ...)))= (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new))))= (if (equal ".." (file-name-nondirectory filename)) (setq filename (directo= ry-file-name (file-name-directory (directory-file-name dir))) done t) (if (= equal "." (file-name-nondirectory filename)) (setq filename (directory-file= -name dir) done t) (setq filename (concat dir (file-name-nondirectory filen= ame))) (setq target (file-symlink-p filename)) (if target (setq filename (f= iles--splice-dirname-file dir target) done nil) (setq done t)))))) (let ((handler (find-file-name-handler filename 'file-truename))) (if han= dler (setq filename (funcall handler 'file-truename filename) done t) (let = ((dir (or (file-name-directory filename) default-directory)) target dirfile= ) (setq dirfile (directory-file-name dir)) (or (string=3D dir dirfile) (and= (file-name-case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile = 0 nil t) t)) (if (assoc dir (car prev-dirs)) (setq dir (cdr (assoc dir ...)= )) (let ((old dir) (new ...)) (setcar prev-dirs (cons ... ...)) (setq dir n= ew)))) (if (equal ".." (file-name-nondirectory filename)) (setq filename (d= irectory-file-name (file-name-directory (directory-file-name dir))) done t)= (if (equal "." (file-name-nondirectory filename)) (setq filename (director= y-file-name dir) done t) (setq filename (concat dir (file-name-nondirectory= filename))) (setq target (file-symlink-p filename)) (if target (setq filen= ame (files--splice-dirname-file dir target) done nil) (setq done t))))))) (while (not done) (setcar counter (1- (car counter))) (if (< (car counter= ) 0) (error "Apparent cycle of symbolic links for %s" filename)) (let ((han= dler (find-file-name-handler filename 'file-truename))) (if handler (setq f= ilename (funcall handler 'file-truename filename) done t) (let ((dir (or (f= ile-name-directory filename) default-directory)) target dirfile) (setq dirf= ile (directory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-= case-insensitive-p dir) (eq (compare-strings dir 0 nil dirfile 0 nil t) t))= (if (assoc dir (car prev-dirs)) (setq dir (cdr ...)) (let (... ...) (setca= r prev-dirs ...) (setq dir new)))) (if (equal ".." (file-name-nondirectory = filename)) (setq filename (directory-file-name (file-name-directory ...)) d= one t) (if (equal "." (file-name-nondirectory filename)) (setq filename (di= rectory-file-name dir) done t) (setq filename (concat dir ...)) (setq targe= t (file-symlink-p filename)) (if target (setq filename ... done nil) (setq = done t)))))))) (let (done (file-name-handler-alist (if prev-dirs file-name-handler-alist= (let ((tem (copy-sequence file-name-handler-alist))) (delq (rassq 'ange-ft= p-completion-hook-function tem) tem))))) (or prev-dirs (setq prev-dirs (lis= t nil))) (if (eq system-type 'windows-nt) (if (string-match "[[*?]" filenam= e) nil (let ((longname (w32-long-file-name filename))) (if longname (setq f= ilename longname))))) (while (not done) (setcar counter (1- (car counter)))= (if (< (car counter) 0) (error "Apparent cycle of symbolic links for %s" f= ilename)) (let ((handler (find-file-name-handler filename 'file-truename)))= (if handler (setq filename (funcall handler 'file-truename filename) done = t) (let ((dir (or ... default-directory)) target dirfile) (setq dirfile (di= rectory-file-name dir)) (or (string=3D dir dirfile) (and (file-name-case-in= sensitive-p dir) (eq ... t)) (if (assoc dir ...) (setq dir ...) (let ... ..= . ...))) (if (equal ".." (file-name-nondirectory filename)) (setq filename = (directory-file-name ...) done t) (if (equal "." ...) (setq filename ... do= ne t) (setq filename ...) (setq target ...) (if target ... ...))))))) filen= ame) file-truename("/home/fan/pmdk-balloon/src/libpmemobj") (if (cdr file) (file-truename (cdr file))) (let ((filename (car file)) (spec-directory (if (cdr file) (file-truename= (cdr file))))) (when (and (boundp 'comint-file-name-prefix) (not (equal co= mint-file-name-prefix ""))) (if (file-name-absolute-p filename) (setq filen= ame (concat comint-file-name-prefix filename)) (if spec-directory (setq spe= c-directory (file-truename (concat comint-file-name-prefix spec-directory))= )))) (unless (memq compilation-parse-errors-filename-function '(nil identit= y)) (save-match-data (setq filename (funcall compilation-parse-errors-filen= ame-function filename)))) (if (stringp filename) (setq filename (command-li= ne-normalize-file-name filename))) (puthash file (or (gethash (cons filenam= e spec-directory) compilation-locs) (puthash (cons filename spec-directory)= (compilation--make-file-struct (list filename spec-directory) fmt) compila= tion-locs)) compilation-locs)) (or (gethash file compilation-locs) (let ((filename (car file)) (spec-dir= ectory (if (cdr file) (file-truename (cdr file))))) (when (and (boundp 'com= int-file-name-prefix) (not (equal comint-file-name-prefix ""))) (if (file-n= ame-absolute-p filename) (setq filename (concat comint-file-name-prefix fil= ename)) (if spec-directory (setq spec-directory (file-truename (concat comi= nt-file-name-prefix spec-directory)))))) (unless (memq compilation-parse-er= rors-filename-function '(nil identity)) (save-match-data (setq filename (fu= ncall compilation-parse-errors-filename-function filename)))) (if (stringp = filename) (setq filename (command-line-normalize-file-name filename))) (put= hash file (or (gethash (cons filename spec-directory) compilation-locs) (pu= thash (cons filename spec-directory) (compilation--make-file-struct (list f= ilename spec-directory) fmt) compilation-locs)) compilation-locs))) compilation-get-file-structure(("../common/vec.h" . "/home/fan/pmdk-ballo= on/src/libpmemobj") nil) compilation-internal-error-properties(("../common/vec.h" . "/home/fan/pmd= k-balloon/src/libpmemobj") 42 nil nil nil 0 nil) compilation-error-properties(1 2 nil 3 nil (4 . 5) nil) compilation-parse-errors(1941 #) compilation--parse-region(1941 #) compilation--ensure-parse(2462) compilation-filter(# "In file included from ../commo= n/vec.h:42,\n ...") Then I find that in my environment, `(file-symlink-p "/home")' is evaluated to "/System/Volumes/Data/home". Now I stuck here since I know little about TRAMP and how a remote file path should be handled. Do you have any suggestion or idea to fix this bug? Thanks in advance for your time. Other information: 1. macOS Catalina 10.15.2 2. My emacs is at commit 9ee5af315098245d9f58eb5562dca6997cab4426, Dec 14, = 2019. In GNU Emacs 27.0.50 (build 2, x86_64-apple-darwin19.2.0, NS appkit-1894.20= Version 10.15.2 (Build 19C57)) of 2019-12-15 built on Fans-Air.ipads-lab.se.sjtu.edu.cn Repository revision: 9ee5af315098245d9f58eb5562dca6997cab4426 Repository branch: master Windowing system distributor 'Apple', version 10.3.1894 System Description: Mac OS X 10.15.2 Recent messages: Tramp: Found remote shell prompt on =E2=80=98vm00=E2=80=99 Tramp: Opening connection for vm00 using scp...done Compilation exited abnormally with code 2 Mark saved where search started Type "q" in help window to restore its previous buffer. Char: h (104, #o150, #x68) point=3D1977 of 2808 (70%) column=3D36 mouse-2, RET: describe this character set mouse-2, RET: show this character in its character set mouse-2, RET: Push this button mouse-2, RET: pretty print value in another buffer Configured using: 'configure --prefix=3D/Users/fan/src/emacs/out CPPFLAGS=3D-I/usr/local/opt/libxml2/include/libxml2/ LDFLAGS=3D-L/usr/local/opt/libxml2/lib --with-ns' Configured features: RSVG GLIB NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS PDUMPER LCMS2 GMP Important settings: value of $LC_ALL:=20 value of $LC_COLLATE: zh_CN.UTF-8 value of $LC_CTYPE: zh_CN.UTF-8 value of $LC_MESSAGES: zh_CN.UTF-8 value of $LC_MONETARY: zh_CN.UTF-8 value of $LC_NUMERIC: zh_CN.UTF-8 value of $LC_TIME: zh_CN.UTF-8 value of $LANG: zh_CN.UTF-8 locale-coding-system: utf-8-unix Major mode: Help Minor modes in effect: shell-dirtrack-mode: t tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny rfc822 mml mml-sec epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils pp wid-edit descr-text help-mode easymenu misearch multi-isearch compile dired dired-loaddefs tramp-cache tramp-sh tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat shell pcomplete comint ansi-color ring parse-time iso8601 time-date ls-lisp format-spec auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map seq byte-opt gv bytecomp byte-compile cconv edmacro kmacro cl-loaddefs cl-lib china-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns lcms2 multi-tty make-network-process emacs) Memory information: ((conses 16 74466 9616) (symbols 48 20580 1) (strings 32 82411 1816) (string-bytes 1 2108733) (vectors 16 15285) (vector-slots 8 631222 14248) (floats 8 48 31) (intervals 56 749 0) (buffers 1000 18))