Update method used to detect man page interface.

pull/2/head
Alexander Golubev 11 years ago committed by Darrell Anderson
parent 5a7a258f87
commit 14ffd77b37

@ -271,15 +271,6 @@ if( BUILD_STARTTDE )
endif() endif()
##### Determine whether older manpage support is used ##########
if( EXISTS "/usr/sbin/makewhatis" )
set( WITH_MAKEWHATIS "1" )
message( STATUS "Selected makewhatis for tdeio-man on your system" )
else()
message( STATUS "Selected man-db for tdeio-man on your system" )
endif()
##### Checks for a distribution-specific 1st menu item, generally a control center ##### Checks for a distribution-specific 1st menu item, generally a control center
if(EXISTS "/usr/share/applications/YaST.desktop") if(EXISTS "/usr/share/applications/YaST.desktop")
set( KICKOFF_DIST_CONFIG_SHORTCUT1 "/usr/share/applications/YaST.desktop" ) set( KICKOFF_DIST_CONFIG_SHORTCUT1 "/usr/share/applications/YaST.desktop" )

@ -196,9 +196,6 @@
// Defined when wanting ksmserver shutdown debugging timing markers in .xsession-errors // Defined when wanting ksmserver shutdown debugging timing markers in .xsession-errors
#cmakedefine BUILD_PROFILE_SHUTDOWN 1 #cmakedefine BUILD_PROFILE_SHUTDOWN 1
// Use makewhatis manpage support
#cmakedefine WITH_MAKEWHATIS "@WITH_MAKEWHATIS@"
// Kickoff menu // Kickoff menu
#cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT1 "@KICKOFF_DIST_CONFIG_SHORTCUT1@" #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT1 "@KICKOFF_DIST_CONFIG_SHORTCUT1@"
#cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT2 "@KICKOFF_DIST_CONFIG_SHORTCUT2@" #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT2 "@KICKOFF_DIST_CONFIG_SHORTCUT2@"

@ -581,47 +581,62 @@ char *MANProtocol::readManPage(const char *_filename)
} }
lastdir = filename.left(filename.findRev('/')); lastdir = filename.left(filename.findRev('/'));
#ifdef WITH_MAKEWHATIS size_t len;
TQIODevice *fd= KFilterDev::deviceForFile(filename);
if ( !fd || !fd->open(IO_ReadOnly)) if( hasManRecode() ) {
{ myStdStream = TQString::null;
delete fd; TDEProcess proc;
return 0;
}
TQByteArray array(fd->readAll());
kdDebug(7107) << "read " << array.size() << endl;
fd->close();
delete fd;
if (array.isEmpty()) proc << "man" << "--recode" << "UTF-8" << filename;
return 0;
const int len = array.size(); TQApplication::connect(&proc, TQT_SIGNAL(receivedStdout (TDEProcess *, char *, int)),
buf = new char[len + 4]; this, TQT_SLOT(slotGetStdOutputUtf8(TDEProcess *, char *, int)));
tqmemmove(buf + 1, array.data(), len); proc.start(TDEProcess::Block, TDEProcess::All);
#else
myStdStream = TQString::null;
TDEProcess proc;
/* TODO: detect availability of 'man --recode' so that this can go
* upstream */
proc << "man" << "--recode" << "UTF-8" << filename;
TQApplication::connect(&proc, TQT_SIGNAL(receivedStdout (TDEProcess *, char *, int)), const TQCString cstr=myStdStream.utf8();
this, TQT_SLOT(slotGetStdOutputUtf8(TDEProcess *, char *, int))); len = cstr.size() != 0 ? cstr.size() - 1 : 0;
proc.start(TDEProcess::Block, TDEProcess::All); buf = new char[len + 4];
tqmemmove(buf + 1, cstr.data(), len);
} else {
TQIODevice *fd= KFilterDev::deviceForFile(filename);
const TQCString cstr=myStdStream.utf8(); if ( !fd || !fd->open(IO_ReadOnly))
const int len = cstr.size()-1; {
buf = new char[len + 4]; delete fd;
tqmemmove(buf + 1, cstr.data(), len); return 0;
#endif }
TQByteArray array(fd->readAll());
kdDebug(7107) << "read " << array.size() << endl;
fd->close();
delete fd;
if (array.isEmpty())
return 0;
len = array.size();
buf = new char[len + 4];
tqmemmove(buf + 1, array.data(), len);
}
buf[0]=buf[len]='\n'; // Start and end with a end of line buf[0]=buf[len]='\n'; // Start and end with a end of line
buf[len+1]=buf[len+2]='\0'; // Two NUL characters at end buf[len+1]=buf[len+2]='\0'; // Two NUL characters at end
} }
return buf; return buf;
} }
bool MANProtocol::hasManRecode(bool force) {
static bool rv=0, wasChecked=0;
if ( !wasChecked || force ) {
TDEProcess proc;
// lets' try to recode the man page of man.
// that should be enough to be sure that man-db is installed.
proc << "man" << "--recode" << "UTF-8" << "man";
proc.start(TDEProcess::Block, TDEProcess::All);
rv = proc.exitStatus() == 0;
wasChecked = 1;
}
return rv;
}
void MANProtocol::outputError(const TQString& errmsg) void MANProtocol::outputError(const TQString& errmsg)
{ {

@ -66,6 +66,7 @@ private slots:
private: private:
void checkManPaths(); void checkManPaths();
TQStringList manDirectories(); TQStringList manDirectories();
static bool hasManRecode(bool force=0);
TQMap<TQString, TQString> buildIndexMap(const TQString& section); TQMap<TQString, TQString> buildIndexMap(const TQString& section);
bool addWhatIs(TQMap<TQString, TQString>& i, const TQString& f, const TQString& mark); bool addWhatIs(TQMap<TQString, TQString>& i, const TQString& f, const TQString& mark);
void parseWhatIs( TQMap<TQString, TQString> &i, TQTextStream &t, const TQString &mark ); void parseWhatIs( TQMap<TQString, TQString> &i, TQTextStream &t, const TQString &mark );

Loading…
Cancel
Save