diff options
author | Gustavo Felisberto <humpback@gentoo.org> | 2005-07-10 00:45:52 +0000 |
---|---|---|
committer | Gustavo Felisberto <humpback@gentoo.org> | 2005-07-10 00:45:52 +0000 |
commit | f692537f7a0383e21757c96c2fa3144465abc7fc (patch) | |
tree | 682916cd218c188ad58e2277cfcfbf79b2d644ef /net-im | |
parent | QA: Don't assign default to S (diff) | |
download | historical-f692537f7a0383e21757c96c2fa3144465abc7fc.tar.gz historical-f692537f7a0383e21757c96c2fa3144465abc7fc.tar.bz2 historical-f692537f7a0383e21757c96c2fa3144465abc7fc.zip |
bad bad patch, no donut for you.
Package-Manager: portage-2.0.51.22-r1
Diffstat (limited to 'net-im')
-rw-r--r-- | net-im/psi/ChangeLog | 6 | ||||
-rw-r--r-- | net-im/psi/Manifest | 29 | ||||
-rw-r--r-- | net-im/psi/files/psi-add-status-history.patch | 382 | ||||
-rw-r--r-- | net-im/psi/psi-0.9.3-r4.ebuild | 4 |
4 files changed, 404 insertions, 17 deletions
diff --git a/net-im/psi/ChangeLog b/net-im/psi/ChangeLog index eefe6c2f3f7b..eaad824fd97b 100644 --- a/net-im/psi/ChangeLog +++ b/net-im/psi/ChangeLog @@ -1,6 +1,10 @@ # ChangeLog for net-im/psi # Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-im/psi/ChangeLog,v 1.74 2005/07/08 12:39:19 gustavoz Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-im/psi/ChangeLog,v 1.75 2005/07/10 00:45:52 humpback Exp $ + + 10 Jul 2005; Gustavo Felisberto <humpback@gentoo.org>; + +files/psi-add-status-history.patch, psi-0.9.3-r4.ebuild: + Fix for bad path in patch file. Closes bug #98503 08 Jul 2005; Gustavo Zacarias <gustavoz@gentoo.org> psi-0.9.3-r4.ebuild: Stable on sparc diff --git a/net-im/psi/Manifest b/net-im/psi/Manifest index dbd950882175..0b2ab2b11ca5 100644 --- a/net-im/psi/Manifest +++ b/net-im/psi/Manifest @@ -1,28 +1,29 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -MD5 e78c9062b503b64e980006a394b0e19d psi-0.9.3-r4.ebuild 9122 MD5 1769f596b6946b498e6f5850a4d5ed6f psi-0.9.3-r2.ebuild 9431 -MD5 9b91ead14acbf0da98d3b33e75c67e79 metadata.xml 306 +MD5 9a91ad08953450a985b6f893bfe76667 psi-0.9.3-r4.ebuild 9122 MD5 12c2c3a9493d869049a357f863646c88 psi-0.9.3-r1.ebuild 8145 -MD5 b2494aea54585ed4ed6dc99b87f14740 ChangeLog 9630 MD5 303d49d1d74fe87961051612047246bc psi-0.9.3-r3.ebuild 9830 -MD5 18253b59a4622a06bc3a17a4eef93d22 files/psi-status_indicator++_add-on_roster-nr.patch 9821 +MD5 3490d983b48552c1e70f075b2c4bdb78 ChangeLog 9800 +MD5 9b91ead14acbf0da98d3b33e75c67e79 metadata.xml 306 +MD5 b35105d488f11cae19484290159023b1 files/psi-add-status-history.patch 13703 +MD5 fc8fae7a49b592b4f2c2914c21494c11 files/digest-psi-0.9.3-r1 1924 +MD5 db2a4c5b68dbb0147392a4657f2dbc92 files/digest-psi-0.9.3-r2 2132 MD5 839e6fa5502e1f03a660918bc30e48b5 files/digest-psi-0.9.3-r3 2211 +MD5 55307aeb75ba675468f91832d951eff7 files/digest-psi-0.9.3-r4 1975 MD5 0d5cafd17325fc912c4855252d73378f files/psi-indicator.png 300 MD5 0250867fe42d1dc91e798336869a09d6 files/vcard-photo-interface.patch 32494 -MD5 fc8fae7a49b592b4f2c2914c21494c11 files/digest-psi-0.9.3-r1 1924 +MD5 4195bf9d000383fae25545249a3f8709 files/psi-desktop_file_and_icons_directories.patch 1454 +MD5 18253b59a4622a06bc3a17a4eef93d22 files/psi-status_indicator++_add-on_roster-nr.patch 9821 +MD5 5fa629c5177a7b1c5090428e22b7ec30 files/psi-emergency.png 295 +MD5 76f5cc28b75698adddaa068e5f4593f5 files/psi-pathfix.patch 462 MD5 893421922de588e6a40fbe8357976279 files/psi-reverse_trayicon.patch 937 MD5 1c741813b6d820d43475058dbfab3100 files/psi-desktop.patch 492 -MD5 76f5cc28b75698adddaa068e5f4593f5 files/psi-pathfix.patch 462 -MD5 55307aeb75ba675468f91832d951eff7 files/digest-psi-0.9.3-r4 1975 -MD5 5fa629c5177a7b1c5090428e22b7ec30 files/psi-emergency.png 295 -MD5 db2a4c5b68dbb0147392a4657f2dbc92 files/digest-psi-0.9.3-r2 2132 -MD5 4195bf9d000383fae25545249a3f8709 files/psi-desktop_file_and_icons_directories.patch 1454 -----BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.1-ecc0.1.6 (GNU/Linux) +Version: GnuPG v1.4.1 (GNU/Linux) -iD8DBQFCznQBKRy60XGEcJIRAtOLAJ911e2J3nLXW22cewqeXr1RnExjpQCdFo5L -CqRaAwB+Z8B9EXgnTMPgxSE= -=tG92 +iD8DBQFC0G/c8zY1VwezZiERAh20AJ9EUtJQRVRkPUFHfxtLhi7jWoWrsACgnObR ++9daJB2z4ejA7LOp1P7IUE4= +=/GtI -----END PGP SIGNATURE----- diff --git a/net-im/psi/files/psi-add-status-history.patch b/net-im/psi/files/psi-add-status-history.patch new file mode 100644 index 000000000000..a0ea648b8d94 --- /dev/null +++ b/net-im/psi/files/psi-add-status-history.patch @@ -0,0 +1,382 @@ +This patch adds an option for contacts status messages logging. + +Original author of patch: +Tomasz 'bla' Fortuna + +Per-contact statuses loging: +Przemysław 'Troll' Maciąg <pmaciag (at) gmail (dot) com> + +Current version lets you: +* set global properties of logging statuses (non-empty and all) +* set per-contact properties of logging statuses (non-empty and all) + +Patch requires custom-sound-popup.diff available from +http://home.unclassified.de/files/psi/patches/ + +diff -Naur psi-0.9.3-orig/src/common.h psi-0.9.3/src/common.h +--- psi-0.9.3-orig/src/common.h 2005-05-19 11:55:21.000000000 +0000 ++++ psi-0.9.3/src/common.h 2005-05-19 11:55:23.000000000 +0000 +@@ -100,6 +100,7 @@ + QMap<QString, int> contactSoundMsg; + QMap<QString, int> contactPopupAvail; + QMap<QString, int> contactVisible; ++ QMap<QString, int> contactLogStatus; + + // Avatars + bool avatarsEnabled, avatarsChatdlgEnabled; +@@ -163,6 +164,10 @@ + bool clIconsAtTop; + bool clTransportStatus; + ++ // Status logging ++ bool clLogStatus; ++ bool clLogEmptyStatus; ++ + // passive popups + bool ppIsOn; + bool ppMessage, ppHeadline, ppChat, ppOnline, ppStatus, ppOffline, ppFile; +diff -Naur psi-0.9.3-orig/src/contactview.cpp psi-0.9.3/src/contactview.cpp +--- psi-0.9.3-orig/src/contactview.cpp 2005-05-19 11:55:22.000000000 +0000 ++++ psi-0.9.3/src/contactview.cpp 2005-05-19 11:55:23.000000000 +0000 +@@ -1367,6 +1367,34 @@ + if (n > -1) vism->setItemChecked(vism->idAt(n), true); + mm->insertItem(tr("&Visibility on roster"), vism); + } ++ ++ // Log contact statuses ++ { ++ QPopupMenu *slog = new QPopupMenu(mm); ++ slog->setCheckable(true); ++ d->cv->qa_contactLogStatusAll->addTo(slog); ++ d->cv->qa_contactLogStatusOn->addTo(slog); ++ d->cv->qa_contactLogStatusOff->addTo(slog); ++ d->cv->qa_contactLogStatusDefault->addTo(slog); ++ int n = -1; ++ if (option.contactLogStatus.contains(i->u()->jid().bare())) ++ { ++ switch (option.contactLogStatus[i->u()->jid().bare()]) ++ { ++ case 2: n = 0; break; ++ case 1: n = 1; break; ++ case 0: n = 2; break; ++ case -1: ++ default: n = 3; break; ++ } ++ } ++ else ++ { ++ n = 3; ++ } ++ slog->setItemChecked(slog->idAt(n), true); ++ mm->insertItem(tr("&Log statuses"), slog); ++ } + + // Avatars + QPopupMenu *avpm = new QPopupMenu(mm); +@@ -1988,6 +2016,15 @@ + qa_contactPopupAvailDefault = new IconAction("", tr("Default"), QKeySequence(), this); + connect(qa_contactPopupAvailDefault, SIGNAL(activated()), SLOT(doContactPopupAvailDefault())); + ++ qa_contactLogStatusAll = new IconAction("", tr("All"), QKeySequence(), this); ++ connect(qa_contactLogStatusAll, SIGNAL(activated()), SLOT(doContactLogStatusAll())); ++ qa_contactLogStatusOn = new IconAction("", tr("Non-empty"), QKeySequence(), this); ++ connect(qa_contactLogStatusOn, SIGNAL(activated()), SLOT(doContactLogStatusOn())); ++ qa_contactLogStatusOff = new IconAction("", tr("Off"), QKeySequence(), this); ++ connect(qa_contactLogStatusOff, SIGNAL(activated()), SLOT(doContactLogStatusOff())); ++ qa_contactLogStatusDefault = new IconAction("", tr("Default"), QKeySequence(), this); ++ connect(qa_contactLogStatusDefault, SIGNAL(activated()), SLOT(doContactLogStatusDefault())); ++ + qa_contactVisibleOn = new IconAction("", tr("On"), QKeySequence(), this); + connect(qa_contactVisibleOn, SIGNAL(activated()), SLOT(doContactVisibleOn())); + qa_contactVisibleOff = new IconAction("", tr("Off"), QKeySequence(), this); +@@ -2358,6 +2395,33 @@ + option.contactPopupAvail[i->u()->jid().bare()] = -1; + } + ++// Log status messages ++void ContactView::doContactLogStatusAll() ++{ ++ ContactViewItem *i = (ContactViewItem *)selectedItem(); ++ option.contactLogStatus[i->u()->jid().bare()] = 2; ++ //QMessageBox::information(0, "Sound on for JID", i->u()->jid().bare()); ++} ++ ++void ContactView::doContactLogStatusOn() ++{ ++ ContactViewItem *i = (ContactViewItem *)selectedItem(); ++ option.contactLogStatus[i->u()->jid().bare()] = 1; ++ //QMessageBox::information(0, "Sound on for JID", i->u()->jid().bare()); ++} ++ ++void ContactView::doContactLogStatusOff() ++{ ++ ContactViewItem *i = (ContactViewItem *)selectedItem(); ++ option.contactLogStatus[i->u()->jid().bare()] = 0; ++} ++ ++void ContactView::doContactLogStatusDefault() ++{ ++ ContactViewItem *i = (ContactViewItem *)selectedItem(); ++ option.contactLogStatus[i->u()->jid().bare()] = -1; ++} ++ + // Visibility on roster + void ContactView::doContactVisibleOn() + { +diff -Naur psi-0.9.3-orig/src/contactview.h psi-0.9.3/src/contactview.h +--- psi-0.9.3-orig/src/contactview.h 2005-05-19 11:55:21.000000000 +0000 ++++ psi-0.9.3/src/contactview.h 2005-05-19 11:55:23.000000000 +0000 +@@ -201,6 +201,7 @@ + // More properties + IconAction *qa_contactSoundMsgOn, *qa_contactSoundMsgOff, *qa_contactSoundMsgDefault; + IconAction *qa_contactPopupAvailOn, *qa_contactPopupAvailOff, *qa_contactPopupAvailDefault; ++ IconAction *qa_contactLogStatusAll, *qa_contactLogStatusOn, *qa_contactLogStatusOff, *qa_contactLogStatusDefault; + IconAction *qa_contactVisibleOn, *qa_contactVisibleOff, *qa_contactVisibleDefault; + // Avatars + IconAction *qa_assignAvatar, *qa_clearAvatar; +@@ -254,6 +255,10 @@ + void doContactPopupAvailOn(); + void doContactPopupAvailOff(); + void doContactPopupAvailDefault(); ++ void doContactLogStatusAll(); ++ void doContactLogStatusOn(); ++ void doContactLogStatusOff(); ++ void doContactLogStatusDefault(); + void doContactVisibleOn(); + void doContactVisibleOff(); + void doContactVisibleDefault(); +diff -Naur psi-0.9.3-orig/src/options/opt_status.cpp psi-0.9.3/src/options/opt_status.cpp +--- psi-0.9.3-orig/src/options/opt_status.cpp 2005-05-19 11:55:18.000000000 +0000 ++++ psi-0.9.3/src/options/opt_status.cpp 2005-05-19 11:55:23.000000000 +0000 +@@ -81,6 +81,12 @@ + " an extended message when you set your status to \"online\"." + " Check this option if you want to have this prompt.")); + ++ QWhatsThis::add(d->ck_LogStatus, ++ tr("Press this button to log contacts status messages (non-empty).")); ++ QWhatsThis::add(d->ck_LogEmptyStatus, ++ tr("Press this button to log contacts every status messages.")); ++ connect(d->ck_LogStatus, SIGNAL(clicked()), SLOT(giveEmptyStatuses())); ++ + return w; + } + +@@ -100,6 +106,8 @@ + opt->use_asWhileDnd = d->ck_asWhileDnd->isChecked(); + opt->use_asMessage = d->ck_asMessage->isChecked(); + opt->asMessage = d->te_asMessage->text(); ++ opt->clLogStatus = d->ck_LogStatus->isChecked(); ++ opt->clLogEmptyStatus = d->ck_LogEmptyStatus->isChecked(); + + opt->sp = o->sp; + +@@ -133,6 +141,9 @@ + d->ck_asMessage->setChecked( opt->use_asMessage ); + d->te_asMessage->setEnabled( opt->use_asMessage ); + d->te_asMessage->setText( opt->asMessage ); ++ d->ck_LogStatus->setChecked( opt->clLogStatus ); ++ d->ck_LogEmptyStatus->setEnabled( opt->clLogStatus ); ++ d->ck_LogEmptyStatus->setChecked( opt->clLogEmptyStatus ); + + o->sp = opt->sp; + d->lb_sp->clear(); +@@ -240,3 +251,11 @@ + o->sp.set(d->lb_sp->text(id), d->te_sp->text()); + emit dataChanged(); + } ++ ++void OptionsTabStatus::giveEmptyStatuses() ++{ ++ OptStatusUI *d = (OptStatusUI *)w; ++ ++ d->ck_LogEmptyStatus->setEnabled( d->ck_LogStatus->isChecked() ); ++} ++ +diff -Naur psi-0.9.3-orig/src/options/opt_status.h psi-0.9.3/src/options/opt_status.h +--- psi-0.9.3-orig/src/options/opt_status.h 2003-12-01 10:57:55.000000000 +0000 ++++ psi-0.9.3/src/options/opt_status.h 2005-05-19 11:55:23.000000000 +0000 +@@ -25,6 +25,7 @@ + void newStatusPreset(); + void removeStatusPreset(); + void changeStatusPreset(); ++ void giveEmptyStatuses(); + + private: + QWidget *w, *parentWidget; +diff -Naur psi-0.9.3-orig/src/options/opt_status-ui.ui psi-0.9.3/src/options/opt_status-ui.ui +--- psi-0.9.3-orig/src/options/opt_status-ui.ui 2005-05-19 11:55:18.000000000 +0000 ++++ psi-0.9.3/src/options/opt_status-ui.ui 2005-05-19 11:55:23.000000000 +0000 +@@ -125,6 +125,22 @@ + <string>Auto Offline After:</string> + </property> + </widget> ++ <widget class="QCheckBox" row="3" column="0"> ++ <property name="name"> ++ <cstring>ck_LogStatus</cstring> ++ </property> ++ <property name="text"> ++ <string>Log status changes</string> ++ </property> ++ </widget> ++ <widget class="QCheckBox" row="4" column="0"> ++ <property name="name"> ++ <cstring>ck_LogEmptyStatus</cstring> ++ </property> ++ <property name="text"> ++ <string>Additionaly log empty status changes</string> ++ </property> ++ </widget> + <widget class="QCheckBox" row="1" column="0"> + <property name="name"> + <cstring>ck_asXa</cstring> +diff -Naur psi-0.9.3-orig/src/psiaccount.cpp psi-0.9.3/src/psiaccount.cpp +--- psi-0.9.3-orig/src/psiaccount.cpp 2005-05-19 11:55:22.000000000 +0000 ++++ psi-0.9.3/src/psiaccount.cpp 2005-05-19 11:55:23.000000000 +0000 +@@ -2177,6 +2177,39 @@ + return u; + } + ++void PsiAccount::logStatusEvent(const UserListItem &u, bool force) ++{ ++ /* Retrieve status from dark structures. */ ++ UserResourceList::ConstIterator rit = u.userResourceList().priority(); ++ QString StatusString = (*rit).status().status(); ++ int status = makeSTATUS((*rit).status()); ++ ++ /* Create line */ ++ if (!force && (StatusString == "") && !option.clLogEmptyStatus) ++ return; ++ ++ QString Content = status2txt(status); ++ if (StatusString != "") ++ Content += " [" + StatusString + "]"; ++ ++ /* Create Message */ ++ Message m; ++ m.setTimeStamp(QDateTime::currentDateTime()); ++ m.setType(""); /* or error or headline */ ++ m.setFrom(u.jid()); ++ m.setBody(Content); ++ ++ /* Create event from message */ ++ MessageEvent *Event = new MessageEvent(m, 0); ++ Event->setFrom(u.jid()); ++ ++ /* Add event to history */ ++ EDBFlatFile::File h(u.jid()); ++ QDateTime Time = QDateTime::currentDateTime(); ++ Event->setTimeStamp(Time); ++ logEvent(u.jid(), Event); ++} ++ + void PsiAccount::cpUpdate(const UserListItem &u, const QString &rname, bool fromPresence) + { + PsiEvent *e = d->eventQueue->peek(u.jid()); +@@ -2196,6 +2229,18 @@ + updateContact(j); + updateContact(j, fromPresence); + d->psi->updateContactGlobal(this, j); ++ ++ // more properties - status messages logging ++ if (option.contactLogStatus.contains(j.bare()) && ++ option.contactLogStatus[j.bare()] == 0) ++ return; ++ else if (option.contactLogStatus.contains(j.bare()) && ++ option.contactLogStatus[j.bare()] == 2) ++ logStatusEvent(u, true); ++ else if ((fromPresence && option.clLogStatus) || ++ (option.contactLogStatus.contains(j.bare()) && ++ option.contactLogStatus[j.bare()] == 1)) ++ logStatusEvent(u, false); + } + + QLabel *PsiAccount::accountLabel(QWidget *par, bool simpleMode) +diff -Naur psi-0.9.3-orig/src/psiaccount.h psi-0.9.3/src/psiaccount.h +--- psi-0.9.3-orig/src/psiaccount.h 2005-05-19 11:55:21.000000000 +0000 ++++ psi-0.9.3/src/psiaccount.h 2005-05-19 11:55:23.000000000 +0000 +@@ -354,6 +354,7 @@ + void simulateContactOffline(UserListItem *); + void simulateRosterOffline(); + void cpUpdate(const UserListItem &, const QString &rname="", bool fromPresence=false); ++ void logStatusEvent(const UserListItem &u, bool force = false); + void logEvent(const Jid &, PsiEvent *); + void queueEvent(PsiEvent *); + void openNextEvent(const UserListItem &); +diff -Naur psi-0.9.3-orig/src/psi_profiles.cpp psi-0.9.3/src/psi_profiles.cpp +--- psi-0.9.3-orig/src/psi_profiles.cpp 2005-05-19 11:55:21.000000000 +0000 ++++ psi-0.9.3/src/psi_profiles.cpp 2005-05-19 11:55:23.000000000 +0000 +@@ -471,6 +471,9 @@ + prefs.clStIndicator = TRUE; + prefs.clIconsAtTop = TRUE; + ++ prefs.clLogStatus = false; ++ prefs.clLogEmptyStatus = false; ++ + // calculate the small font size + const int minimumFontSize = 7; + prefs.smallFontSize = qApp->font().pointSize(); +@@ -934,6 +937,25 @@ + } + } + ++ // More contact properties: custom status messages logging ++ { ++ QDomElement p_csound = doc.createElement("contactLogStatus"); ++ p_events.appendChild(p_csound); ++ ++ QString jid; ++ QMapIterator<QString, int> it = prefs.contactLogStatus.begin(); ++ for ( ; it != prefs.contactLogStatus.end(); ++it) { ++ if (it.data() != -1) // don't save "default" setting ++ { ++ QDomElement contact = doc.createElement("contact"); ++ p_csound.appendChild(contact); ++ ++ contact.setAttribute("jid", it.key()); ++ contact.setAttribute("logstatus", it.data()); ++ } ++ } ++ } ++ + // More contact properties: custom visibility on roster + { + QDomElement p_cvis = doc.createElement("contactVisible"); +@@ -991,6 +1013,9 @@ + e = textTag(doc, "message", prefs.asMessage); + setBoolAttribute(e, "use", prefs.use_asMessage); + tag.appendChild(e); ++ ++ tag.appendChild(textTag(doc, "LogStatus", prefs.clLogStatus)); ++ tag.appendChild(textTag(doc, "LogEmptyStatus", prefs.clLogEmptyStatus)); + } + { + p_pres.appendChild(prefs.sp.toXml(doc, "statuspresets")); +@@ -1590,6 +1615,19 @@ + } + } + ++ // More contact properties: custom status messages logging ++ QDomElement logstatus = findSubTag(p_events, "contactLogStatus", &found); ++ if (found) { ++ prefs.contactLogStatus.clear(); ++ for (QDomNode n = logstatus.firstChild(); !n.isNull(); n = n.nextSibling()) { ++ QDomElement el = n.toElement(); ++ if ( el.isNull() || el.nodeName() != "contact") ++ continue; ++ ++ prefs.contactLogStatus[el.attribute("jid")] = el.attribute("logstatus").toInt(); ++ } ++ } ++ + // More contact properties: custom visibility on roster + QDomElement cvis = findSubTag(p_events, "contactVisible", &found); + if (found) { +@@ -1622,6 +1660,8 @@ + if(found) { + bool found; + QDomElement e; ++ readBoolEntry(tag, "LogStatus", &prefs.clLogStatus); ++ readBoolEntry(tag, "LogEmptyStatus", &prefs.clLogEmptyStatus); + e = findSubTag(tag, "away", &found); + if(found) { + if(e.hasAttribute("use")) diff --git a/net-im/psi/psi-0.9.3-r4.ebuild b/net-im/psi/psi-0.9.3-r4.ebuild index 7e0c3a76e4e4..b5dda450e621 100644 --- a/net-im/psi/psi-0.9.3-r4.ebuild +++ b/net-im/psi/psi-0.9.3-r4.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-im/psi/psi-0.9.3-r4.ebuild,v 1.8 2005/07/08 12:39:19 gustavoz Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-im/psi/psi-0.9.3-r4.ebuild,v 1.9 2005/07/10 00:45:52 humpback Exp $ inherit eutils @@ -160,7 +160,7 @@ src_unpack() { epatch ${PATCHDIR}/hide-no-resource-from-contextmenu.diff # from bugs.gentoo.org - epatch ${PATCHDIR}/psi-add-status-history.patch + epatch ${FILESDIR}/psi-add-status-history.patch # from http://www.uni-bonn.de/~nieuwenh/ epatch ${PATCHDIR}/libTeXFormula.diff |