Skip to content

Commit

Permalink
io.pathnames: Revised ~ support to expand on the first tilde, and not…
Browse files Browse the repository at this point in the history
… on "~/".

This mimics the same behaviour as "ls ~" in the shell, which expands the alias
as a directory, and not as a filename. For the specific edge-case where a
filename called "~" must have a path constructed to it (e.g. "./~" or "~/~").
  • Loading branch information
otoburb committed Jan 11, 2012
1 parent 4e10f09 commit 251a2a1
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
4 changes: 2 additions & 2 deletions core/io/pathnames/pathnames-docs.factor
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ HELP: absolute-path
{ "path" "a pathname string" }
{ "path'" "a pathname string" }
}
{ $description "Prepends the " { $link current-directory } " to the pathname and resolves a " { $snippet "resource:" } ", " { $snippet "~/" } " or " { $snippet "vocab:" } " prefix, if present (see " { $link "io.pathnames.special" } ")." }
{ $description "Prepends the " { $link current-directory } " to the pathname and resolves a " { $snippet "resource:" } ", " { $snippet "~" } " or " { $snippet "vocab:" } " prefix, if present (see " { $link "io.pathnames.special" } ")." }
{ $notes "This word is exactly the same as " { $link normalize-path } ", except on Windows NT platforms, where it does not prepend the Unicode path prefix. Most code should call " { $link normalize-path } " instead." } ;

HELP: resolve-symlinks
Expand All @@ -133,7 +133,7 @@ ARTICLE: "io.pathnames.special" "Special pathnames"
$nl
"If a pathname begins with " { $snippet "vocab:" } ", then it will be searched for in all current vocabulary roots (see " { $link "add-vocab-roots" } ")."
$nl
"If a pathname begins with " { $snippet "~/" } ", it will be searched for in the home directory. Subsequent tildes in the pathname will be construed as literal tilde path or filenames and will not be treated specially. It should be noted that the " { $snippet "~" } " symbol without a forward slash will be also be treated as a literal path or filename." ;
"If a pathname begins with " { $snippet "~" } ", it will be searched for in the home directory. Subsequent tildes in the pathname will be construed as literal tilde path or filenames and will not be treated specially. To access a filename named " { $snippet "~" } ", you must construct a path to reference the filename, even if it's within the current directory such as " { $snippet "./~" } "." ;

ARTICLE: "io.pathnames.presentations" "Pathname presentations"
"Pathname presentations are objects that wrap a pathname string. Clicking a pathname presentation in the UI brings up the file in one of the supported editors. See " { $link "editor" } " for more details."
Expand Down
19 changes: 13 additions & 6 deletions core/io/pathnames/pathnames-tests.factor
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
USING: io.pathnames io.files.temp io.directories
continuations math io.files.private kernel
namespaces sequences tools.test io.pathnames.private ;
namespaces sequences system tools.test
io.backend io.pathnames.private ;
IN: io.pathnames.tests

[ "passwd" ] [ "/etc/passwd" file-name ] unit-test
Expand Down Expand Up @@ -71,8 +72,14 @@ IN: io.pathnames.tests
[ f ] [ "/funny.directory/file-with-no-extension" file-extension ] unit-test
[ "" ] [ "/funny.directory/file-with-no-extension." file-extension ] unit-test

! Testing ~/ special pathname
[ t ] [ "~/" absolute-path home = ] unit-test
[ f ] [ "~" absolute-path home = ] unit-test
[ t ] [ "~/~" absolute-path "/~" home prepend = ] unit-test
[ t ] [ "~/~/" absolute-path "/~/" home prepend = ] unit-test
! Testing ~ special pathname
[ t ] [ os windows? "~\\" "~/" ? absolute-path home = ] unit-test
[ t ] [ "~/" home [ normalize-path ] bi@ = ] unit-test

[ t ] [ "~" absolute-path home = ] unit-test
[ t ] [ "~" home [ normalize-path ] bi@ = ] unit-test

[ t ] [ "~" home [ "foo" append-path ] bi@ [ normalize-path ] bi@ = ] unit-test
[ t ] [ os windows? "~\\~/" "~/~/" ? "~" "~" append-path [ path-components ] bi@ = ] unit-test


2 changes: 1 addition & 1 deletion core/io/pathnames/pathnames.factor
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ M: string absolute-path
trim-head-separators vocab-path
absolute-path
] [
"~/" ?head [
"~" ?head [
trim-head-separators home prepend-path
absolute-path
] [
Expand Down

0 comments on commit 251a2a1

Please sign in to comment.