in reply to Shortening paths for display

There used to be an undocumented win32 function called 'PathSetDlgItemPath'.

A quick google for that function at ms.com turns up this page; and the first line of the description says that this is the function that underlies it.

Looking at the example for the latter page, its functionality can be described as: throw away characters, preceding the right-most backslash until the specified width is met; or, only ... is left preceding that backslash. (Ignoring that it uses pixels and the current font.)

So, a simple perl implementation might be:

#! perl -slw use strict; sub compactPath { my( $p, $n ) = @_; my $discard = length( $p ) - $n + 3; my $min = $p =~ m[\\[^\\]+$]; $p =~ s[.{$min,$discard}(?=\\[^\\]+$)][...]; return $p; } my $path = "C:\\path1\\path2\\sample.txt";; print $path; print compactPath( $path, $_ ) for reverse 0 .. length $path; __END__ C:\test>junk47 C:\path1\path2\sample.txt C:\path1\pa...\sample.txt C:\path1\p...\sample.txt C:\path1\...\sample.txt C:\path1...\sample.txt C:\path...\sample.txt C:\pat...\sample.txt C:\pa...\sample.txt C:\p...\sample.txt C:\...\sample.txt C:...\sample.txt C...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt

Does that meet your expectations?


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Shortening paths for display
by morelenmir (Beadle) on Oct 23, 2016 at 01:42 UTC

    Many thanks indeed!!! The code snippet looks perfect and I will try to learn from it, not just do a copy/paste! Its surprizing nothing similar has made its way in to File::Spec or some such - perhaps exactly because it is so straightforward to implement.

    Going back to that link, it looks like the API function finally made it out of the undocumented locker at some point over the last 17 years!!!

    "Aure Entuluva!" - Hurin Thalion at the Nirnaeth Arnoediad.