diff --git a/ChangeLog b/ChangeLog index 6f39bff..3254f9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,7 @@ - allow to remove log files of successful builds - print update summary right before running the addcommand - print full add command and PACKAGE_DIR info when using install/update -v +- Make 'cat' and 'readme' use $PAGER if set * 0.5.11 29.05.2005 Johannes Winkelmann - add --path to 'ls' diff --git a/doc/prt-get.8 b/doc/prt-get.8 index 4b41b2c..b2fac60 100644 --- a/doc/prt-get.8 +++ b/doc/prt-get.8 @@ -190,7 +190,7 @@ Print the path of a port .TP .B readme -Print the port's README file if it exists +Print the port's README file if it exists; if set, uses $PAGER .TP .B depends [ ...] @@ -339,7 +339,7 @@ Prints out a listing of the port's directory .TP .B cat [] -Prints out the file to stdout. If is not specified, 'Pkgfile' is used +Prints out the file to stdout. If is not specified, 'Pkgfile' is used. If set, uses $PAGER .TP .B edit diff --git a/src/prtget.cpp b/src/prtget.cpp index e66cfd0..9deb26b 100644 --- a/src/prtget.cpp +++ b/src/prtget.cpp @@ -1212,6 +1212,25 @@ void PrtGet::readme() const Package* p = m_repo->getPackage( arg ); if ( p ) { string file = p->path() + "/" + p->name() + "/README"; + printFile(file); + } else { + cerr << "Package '" << arg << "' not found" << endl; + m_returnValue = PG_GENERAL_ERROR; + return; + } +} + +bool PrtGet::printFile(const string& file) +{ + if (!File::fileExists(file)) { + return false; + } + + char* pager = getenv("PAGER"); + if (pager) { + Process proc(pager, file); + proc.executeShell(); + } else { FILE* fp = fopen( file.c_str(), "r" ); char buf[255]; if ( fp ) { @@ -1220,15 +1239,11 @@ void PrtGet::readme() } fclose( fp ); } - - } else { - cerr << "Package '" << arg << "' not found" << endl; - m_returnValue = PG_GENERAL_ERROR; - return; } + + return true; } - void PrtGet::printDependendent() { assertExactArgCount(1); @@ -1623,19 +1638,11 @@ void PrtGet::cat() fileName = *it; } string file = p->path() + "/" + p->name() + "/" + fileName; - FILE* fp = fopen( file.c_str(), "r" ); - char buf[255]; - if ( fp ) { - while ( fgets( buf, 255, fp ) ) { - cout << buf; - } - fclose( fp ); - } else { + if (!printFile(file)) { cerr << "File '" << *it << "' not found" << endl; m_returnValue = PG_GENERAL_ERROR; return; } - } else { cerr << "Package '" << arg << "' not found" << endl; m_returnValue = PG_GENERAL_ERROR; diff --git a/src/prtget.h b/src/prtget.h index 1b93fbb..2a27c21 100644 --- a/src/prtget.h +++ b/src/prtget.h @@ -128,7 +128,7 @@ protected: string m_cacheFile; int m_returnValue; - + bool m_useRegex; /*! Name of default configuration file */ @@ -142,7 +142,8 @@ protected: void assertMaxArgCount(int count); void assertExactArgCount(int count); void argCountFailure(int count, const string& specifier); - + + static bool printFile(const string& file); }; #endif /* _PRTGET_H_ */