From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tino Calancha Newsgroups: gmane.emacs.devel Subject: Add a predicate for canonical file name Date: Mon, 12 Sep 2016 17:23:03 +0900 (JST) Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset=US-ASCII X-Trace: blaine.gmane.org 1473668705 32021 195.159.176.226 (12 Sep 2016 08:25:05 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 12 Sep 2016 08:25:05 +0000 (UTC) User-Agent: Alpine 2.20 (DEB 67 2015-01-07) Cc: tino.calancha@gmail.com To: Emacs developers Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Sep 12 10:24:57 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bjMXu-00076w-7U for ged-emacs-devel@m.gmane.org; Mon, 12 Sep 2016 10:24:54 +0200 Original-Received: from localhost ([::1]:41035 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjMXs-0007ko-1Z for ged-emacs-devel@m.gmane.org; Mon, 12 Sep 2016 04:24:52 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60012) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjMXG-0007kb-LJ for emacs-devel@gnu.org; Mon, 12 Sep 2016 04:24:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bjMX9-0006HT-8Z for emacs-devel@gnu.org; Mon, 12 Sep 2016 04:24:13 -0400 Original-Received: from mail-pf0-f180.google.com ([209.85.192.180]:32866) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjMX9-0006HL-2T for emacs-devel@gnu.org; Mon, 12 Sep 2016 04:24:07 -0400 Original-Received: by mail-pf0-f180.google.com with SMTP id g202so50414170pfb.0 for ; Mon, 12 Sep 2016 01:24:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:date:to:cc:subject:message-id:user-agent:mime-version; bh=oL3hg/VpyQNhOWIXU9Y1KhCQc8k8xf2LXT1RpPePbP8=; b=BWwF8VHWBXE91FoXYe6SZcScbrMuHjIowavQpuZut+nTO5LPvt7WPn/R+5JUNly8mT 4ffpvtu0dziZG71czfTAtzWM96Uzk22ZQyGzSvt7Qyto4xE0tsr8wSJ/4pGVFJmSPdEh hAzv6evBeOT3DREtO0jAW4xLQTT8VMZ+uwODm1vewgIYrwB+ZZ9FzFABTTWQCX8OYj2T PMgd0aCCr480SwjcpT4mwwyy3oYiUc6A8tsnql6SxKdRUXCeAMlm1pc8wPjFzj+20Ayl N2fJmyIG4LFujY61zrQLzsto/JsWuFUZ6UXkopzeIbS6bso4zYajn2Lc+VC9K13b5AD7 e+qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:date:to:cc:subject:message-id:user-agent :mime-version; bh=oL3hg/VpyQNhOWIXU9Y1KhCQc8k8xf2LXT1RpPePbP8=; b=bERBb27uiV8gFWGh6AP9fBjsVyBR8RFurqyCd4WPr2cFzQCP5qY1Xk+8EZpZmab7kt PtmWfp4OdMpUKbKx7cvdZI2NqyMOqkMdpYeLbewVc12UNJG90Dn1AOoxax6bKA+bsdJD LGs0IK2067DbbXByhcwyoPqRTN57/tVeB/DScF2CnKSO56aS97SQ82I28vQvrumtdJRC wZMXNF9liYCUyGEyiSdD/DweOMKQoQHHfVnpf6sHLFYvXseTmnhlWEOeyJAvgNw5ExbX D0BVkk+V9xim1nldx0/rzABgrfwV7hAq8ajowjYEqPhfeZQ992Gfi7Q7d+SAv03CccQH L2Ng== X-Gm-Message-State: AE9vXwO+m5JISyat/7fxxmUpTVufaQVuqFKWFcMQr2uZNcBZWll0g0bs1I//RW8xc9LQ1w== X-Received: by 10.98.32.78 with SMTP id g75mr30840670pfg.103.1473668586109; Mon, 12 Sep 2016 01:23:06 -0700 (PDT) Original-Received: from calancha-pc (57.92.100.220.dy.bbexcite.jp. [220.100.92.57]) by smtp.gmail.com with ESMTPSA id xv9sm22452706pab.36.2016.09.12.01.23.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Sep 2016 01:23:05 -0700 (PDT) X-Google-Original-From: Tino Calancha X-X-Sender: calancha@calancha-pc X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.192.180 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:207380 Archived-At: Hi, i dont see in Emacs a predicate for a file name being canonical. We have a predicate for absolute file names, `file-name-absolute-p'. In some cases we might want to check if the file name is canonical. For instance, following might fail to set point in simple.el line: it fails when `dired-goto-file' argument is not canonical: (let* ((dir (expand-file-name "lisp" source-directory)) (file (expand-file-name "simple.el" dir))) (when (file-name-absolute-p file) (dired-other-window dir) (goto-char (point-min)) (dired-goto-file (abbreviate-file-name file)))) ;; (dired-goto-file file))) ; This works. Do you think has sense to add a predicate as follows?: If the answer is yes: where should be defined? (defsubst myfile-name-canonical-p (filename) "Return non-nil if FILENAME specifies an absolute canonical file name." (string= filename (expand-file-name filename))) Following is a simple comparison `file-name-absolute-p' with `myfile-name-canonical-p': (let ((dirs '("./foo" "../foo" "/foo//bar" "/foo/./bar" "/foo/../bar" "~/bar" "//foo/bar" "/foo/bar" "/foo/bar/" "/sudo:baz@-pc:/foo/bar/"))) (mapcar 'file-name-absolute-p dirs)) => (nil nil t t t t t t t t) (let ((dirs '("./foo" "../foo" "/foo//bar" "/foo/./bar" "/foo/../bar" "~/bar" "//foo/bar" "/foo/bar" "/foo/bar/" "/sudo:baz@-pc:/foo/bar/"))) (mapcar 'myfile-name-canonical-p dirs)) => (nil nil nil nil nil nil t t t t)