| File: | local/lib/perl5/File/HomeDir/FreeDesktop.pm |
| Coverage: | 40.5% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | package File::HomeDir::FreeDesktop; | |||||
| 2 | ||||||
| 3 | # Specific functionality for unixes running free desktops | |||||
| 4 | # compatible with (but not using) File-BaseDir-0.03 | |||||
| 5 | ||||||
| 6 | # See POD at the end of the file for more documentation. | |||||
| 7 | ||||||
| 8 | 2 2 | 17 3 | use 5.00503; | |||
| 9 | 2 2 2 | 4 0 24 | use strict; | |||
| 10 | 2 2 2 | 3 1 8 | use Carp (); | |||
| 11 | 2 2 2 | 4 1 7 | use File::Spec (); | |||
| 12 | 2 2 2 | 4 1 8 | use File::Which (); | |||
| 13 | 2 2 2 | 310 2 17 | use File::HomeDir::Unix (); | |||
| 14 | ||||||
| 15 | 2 2 2 | 5 1 50 | use vars qw{$VERSION @ISA}; | |||
| 16 | BEGIN { | |||||
| 17 | 2 | 0 | $VERSION = '1.00'; | |||
| 18 | 2 | 301 | @ISA = 'File::HomeDir::Unix'; | |||
| 19 | } | |||||
| 20 | ||||||
| 21 | # xdg uses $ENV{XDG_CONFIG_HOME}/user-dirs.dirs to know where are the | |||||
| 22 | # various "my xxx" directories. That is a shell file. The official API | |||||
| 23 | # is the xdg-user-dir executable. It has no provision for assessing | |||||
| 24 | # the directories of a user that is different than the one we are | |||||
| 25 | # running under; the standard substitute user mechanisms are needed to | |||||
| 26 | # overcome this. | |||||
| 27 | ||||||
| 28 | my $xdgprog = File::Which::which('xdg-user-dir'); | |||||
| 29 | ||||||
| 30 | sub _my { | |||||
| 31 | # No quoting because input is hard-coded and only comes from this module | |||||
| 32 | 0 | my $thingy = qx($xdgprog $_[1]); | ||||
| 33 | 0 | chomp $thingy; | ||||
| 34 | 0 | return $thingy; | ||||
| 35 | } | |||||
| 36 | ||||||
| 37 | # Simple stuff | |||||
| 38 | 0 | sub my_desktop { shift->_my('DESKTOP') } | ||||
| 39 | 0 | sub my_documents { shift->_my('DOCUMENTS') } | ||||
| 40 | 0 | sub my_music { shift->_my('MUSIC') } | ||||
| 41 | 0 | sub my_pictures { shift->_my('PICTURES') } | ||||
| 42 | 0 | sub my_videos { shift->_my('VIDEOS') } | ||||
| 43 | ||||||
| 44 | sub my_data { | |||||
| 45 | 0 | $ENV{XDG_DATA_HOME} | ||||
| 46 | or | |||||
| 47 | File::Spec->catdir( | |||||
| 48 | shift->my_home, | |||||
| 49 | qw{ .local share } | |||||
| 50 | ); | |||||
| 51 | } | |||||
| 52 | ||||||
| 53 | sub my_config { | |||||
| 54 | 0 | $ENV{XDG_CONFIG_HOME} | ||||
| 55 | or | |||||
| 56 | File::Spec->catdir( | |||||
| 57 | shift->my_home, | |||||
| 58 | qw{ .config } | |||||
| 59 | ); | |||||
| 60 | } | |||||
| 61 | ||||||
| 62 | # Custom locations (currently undocumented) | |||||
| 63 | 0 | sub my_download { shift->_my('DOWNLOAD') } | ||||
| 64 | 0 | sub my_publicshare { shift->_my('PUBLICSHARE') } | ||||
| 65 | 0 | sub my_templates { shift->_my('TEMPLATES') } | ||||
| 66 | ||||||
| 67 | sub my_cache { | |||||
| 68 | 0 | $ENV{XDG_CACHE_HOME} | ||||
| 69 | || | |||||
| 70 | File::Spec->catdir(shift->my_home, qw{ .cache }); | |||||
| 71 | } | |||||
| 72 | ||||||
| 73 | ||||||
| 74 | ||||||
| 75 | ||||||
| 76 | ||||||
| 77 | ##################################################################### | |||||
| 78 | # General User Methods | |||||
| 79 | ||||||
| 80 | 0 | sub users_desktop { Carp::croak('The users_desktop method is not available on an XDG based system.'); } | ||||
| 81 | 0 | sub users_documents { Carp::croak('The users_documents method is not available on an XDG based system.'); } | ||||
| 82 | 0 | sub users_music { Carp::croak('The users_music method is not available on an XDG based system.'); } | ||||
| 83 | 0 | sub users_pictures { Carp::croak('The users_pictures method is not available on an XDG based system.'); } | ||||
| 84 | 0 | sub users_videos { Carp::croak('The users_videos method is not available on an XDG based system.'); } | ||||
| 85 | 0 | sub users_data { Carp::croak('The users_data method is not available on an XDG based system.'); } | ||||
| 86 | ||||||
| 87 | 1; | |||||
| 88 | ||||||
| 89 - 136 | =pod =head1 NAME File::HomeDir::FreeDesktop - Find your home and other directories on FreeDesktop.org Unix =head1 DESCRIPTION This module provides implementations for determining common user directories. In normal usage this module will always be used via L<File::HomeDir>. =head1 SYNOPSIS use File::HomeDir; # Find directories for the current user $home = File::HomeDir->my_home; # /home/mylogin $desktop = File::HomeDir->my_desktop; $docs = File::HomeDir->my_documents; $music = File::HomeDir->my_music; $pics = File::HomeDir->my_pictures; $videos = File::HomeDir->my_videos; $data = File::HomeDir->my_data; =head1 AUTHORS Jerome Quelin E<lt>jquellin@cpan.org<gt> Adam Kennedy E<lt>adamk@cpan.orgE<gt> =head1 SEE ALSO L<File::HomeDir>, L<File::HomeDir::Win32> (legacy) =head1 COPYRIGHT Copyright 2009 - 2011 Jerome Quelin. Some parts copyright 2010 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =cut | |||||