unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Tino Calancha <tino.calancha@gmail.com>
Cc: psainty@orcon.net.nz, tzz@lifelogs.com, clement.pit@gmail.com,
	michael.albinus@gmx.de, 24150@debbugs.gnu.org, sdl.web@gmail.com
Subject: bug#24150: 26.0.50; New command: dired-create-empty-file
Date: Fri, 27 Jul 2018 11:39:38 +0300	[thread overview]
Message-ID: <83r2jprs1h.fsf@gnu.org> (raw)
In-Reply-To: <87va9661uy.fsf@calancha-pc.dy.bbexcite.jp> (message from Tino Calancha on Mon, 23 Jul 2018 12:57:09 +0900)

> From: Tino Calancha <tino.calancha@gmail.com>
> Cc: bug-gnu-emacs-bounces+psainty=orcon.net.nz@gnu.org,  psainty@orcon.net.nz,  tzz@lifelogs.com,  clement.pit@gmail.com,  michael.albinus@gmx.de,  24150@debbugs.gnu.org,  sdl.web@gmail.com
> Date: Mon, 23 Jul 2018 12:57:09 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I was somewhat surprised to see how much
> > code you needed.  We have the capability of creating parent
> > directories in 'make-directory', so I thought all we'd need for
> > creating a new file is this two-step dance:
> >
> >   . call make-directory to maybe create the file's parent directory
> >   . call write-region to create the file itself
> >
> > What did I miss that needs so many lines of code?
> Right.  Too much dance.
> Updated the patch to follow your recomendation:

Thanks, this is much better IMO.

> +@deffn Command make-empty-file filename &optional parents
> +This command creates an empty file named @var{filename}.
> +As @code{make-directory}, this command creates parent directories
> +if @var{parents} is non-@code{nil}.
> +If @var{filename} already exists, then this command signal an error.
                                                       ^^^^^^
"signals".  And I would drop the "then" part, it is not needed here.

> +(defun dired--find-topmost-parent-dir (filename)
> +  "Return the topmost nonexistent parent dir of FILENAME.
> +FILENAME is a full file name."
> +  (let ((try filename) new)
> +    (while (and try (not (file-exists-p try)) (not (equal new try)))
> +      (setq new try
> +	    try (directory-file-name (file-name-directory try))))
> +    new))

What is the purpose of using this function in dired-create-empty-file?
What you do with the result of this function doesn't seem to be
reflected in the doc string of dired-create-empty-file.

> +(defun make-empty-file (filename &optional parents)
> +  "Create an empty file FILENAME.
> +Optional arg PARENTS, if non-nil then creates parent dirs as needed.

"Optional arg PARENTS, if non-nil, means create parent dirs as needed."

> +If called interactively, then PARENTS is non-nil."
> +  (interactive
> +   (let ((filename (read-file-name "Create empty file: ")))
> +     (list filename t)))
> +  (let ((paren-dir (file-name-directory filename)))
> +    (when paren-dir (make-directory paren-dir parents)))
> +  (if (and (file-exists-p filename) (null parents))
> +      (signal 'file-already-exists `("File exists" ,filename) )

Shouldn't we check for file existing before creating the missing
parent directories?

Thanks.





  reply	other threads:[~2018-07-27  8:39 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-04 13:25 bug#24150: 25.1.50; New command: dired-create-empty-file Tino Calancha
2016-08-04 13:54 ` Clément Pit--Claudel
2016-08-04 16:29 ` Leo Liu
2016-08-04 17:13   ` Ted Zlatanov
2016-08-04 17:29     ` Drew Adams
2016-08-05  6:03 ` Tino Calancha
2016-08-05 14:48   ` Drew Adams
2016-08-06 12:38     ` Tino Calancha
2016-08-05  6:07 ` Tino Calancha
2017-05-03  8:23 ` Tino Calancha
2017-07-03  4:51 ` bug#24150: 26.0.50; " Tino Calancha
2017-07-03 14:24   ` Eli Zaretskii
2017-07-03 15:04     ` Tino Calancha
2017-07-03 16:33       ` Eli Zaretskii
2017-07-03 20:18         ` Thien-Thi Nguyen
2017-07-07 13:13         ` Ted Zlatanov
2017-07-07 13:17           ` Drew Adams
2017-07-07 13:31             ` Ted Zlatanov
2017-07-03 15:12     ` Drew Adams
2017-07-05 18:28   ` Eli Zaretskii
2017-07-05 19:34     ` Drew Adams
2017-07-07  5:36       ` Tino Calancha
2017-07-07 11:11         ` Drew Adams
2018-07-10  7:01           ` Tino Calancha
2018-07-10  7:42             ` Phil Sainty
2018-07-17  7:39               ` Tino Calancha
2018-07-20  9:03                 ` Eli Zaretskii
2018-07-23  3:57                   ` Tino Calancha
2018-07-27  8:39                     ` Eli Zaretskii [this message]
2018-07-31  4:47                       ` Tino Calancha
2018-07-31 16:20                         ` Eli Zaretskii
2018-08-01  5:16                           ` Tino Calancha
2018-08-01  6:24                             ` Eli Zaretskii
2018-08-01  7:13                               ` Tino Calancha
2018-08-01  8:56                                 ` Eli Zaretskii
2018-08-01  9:31                                   ` Tino Calancha
2018-08-01 11:45                                     ` Eli Zaretskii
2018-08-02  4:34                                       ` Tino Calancha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83r2jprs1h.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=24150@debbugs.gnu.org \
    --cc=clement.pit@gmail.com \
    --cc=michael.albinus@gmx.de \
    --cc=psainty@orcon.net.nz \
    --cc=sdl.web@gmail.com \
    --cc=tino.calancha@gmail.com \
    --cc=tzz@lifelogs.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).