Cherry-picking upstream version 0.6.0+20150709.

Symbols fixed for amd64 and i386
ubuntu/cosmic
Alf Gaida 9 years ago
parent c6d1836118
commit cb12beea28

@ -15,7 +15,6 @@ set(QTERMWIDGET_VERSION_PATCH "0")
set(QTERMWIDGET_VERSION "${QTERMWIDGET_VERSION_MAJOR}.${QTERMWIDGET_VERSION_MINOR}.${QTERMWIDGET_VERSION_PATCH}")
include(CheckFunctionExists)
include(GNUInstallDirs)
@ -92,15 +91,15 @@ set(HDRS_DISTRIB
)
# dirs
set(KB_LAYOUT_DIR "${CMAKE_INSTALL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/kb-layouts/")
set(KB_LAYOUT_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/kb-layouts")
message(STATUS "Keyboard layouts will be installed in: ${KB_LAYOUT_DIR}")
add_definitions(-DKB_LAYOUT_DIR="${CMAKE_INSTALL_PREFIX}/${KB_LAYOUT_DIR}")
add_definitions(-DKB_LAYOUT_DIR="${KB_LAYOUT_DIR}")
set(COLORSCHEMES_DIR "${CMAKE_INSTALL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/color-schemes/")
set(COLORSCHEMES_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/color-schemes")
message(STATUS "Color schemes will be installed in: ${COLORSCHEMES_DIR}" )
add_definitions(-DCOLORSCHEMES_DIR="${CMAKE_INSTALL_PREFIX}/${COLORSCHEMES_DIR}")
add_definitions(-DCOLORSCHEMES_DIR="${COLORSCHEMES_DIR}")
set(QTERMWIDGET_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${QTERMWIDGET_LIBRARY_NAME}")
set(QTERMWIDGET_INCLUDE_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/${QTERMWIDGET_LIBRARY_NAME}")
#| Defines
add_definitions(-DHAVE_POSIX_OPENPT -DHAVE_SYS_TIME_H)
@ -133,7 +132,7 @@ set_target_properties( ${QTERMWIDGET_LIBRARY_NAME} PROPERTIES
if(APPLE)
set (CMAKE_SKIP_RPATH 1)
# this is a must to load the lib correctly
set_target_properties( ${QTERMWIDGET_LIBRARY_NAME} PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} )
set_target_properties(${QTERMWIDGET_LIBRARY_NAME} PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR})
endif()
install(TARGETS ${QTERMWIDGET_LIBRARY_NAME} DESTINATION "${CMAKE_INSTALL_LIBDIR}")
@ -195,11 +194,11 @@ if (BUILD_DESIGNER_PLUGIN)
if(APPLE)
# this is a must to load the lib correctly
set_target_properties(qtermwidget4plugin PROPERTIES
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/qt4/plugins/designer"
INSTALL_NAME_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/qt4/plugins/designer"
)
endif()
install(TARGETS qtermwidget4plugin DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/qt4/plugins/designer")
install(TARGETS qtermwidget4plugin DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/qt4/plugins/designer")
endif (BUILD_DESIGNER_PLUGIN)
# end of designer plugin

1
debian/.gitignore vendored

@ -0,0 +1 @@
/mangled

7
debian/changelog vendored

@ -1,3 +1,10 @@
qtermwidget (0.6.0+20150709-1) unstable; urgency=medium
* Cherry-picking upstream version 0.6.0+20150709.
* Symbols fixed for amd64 and i386
-- Alf Gaida <agaida@siduction.org> Sun, 06 Sep 2015 04:05:43 +0200
qtermwidget (0.6.0-1) unstable; urgency=medium
[ Alf Gaida ]

@ -18,17 +18,10 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"KPtyDevice::readData(char*, long long)@Base" 0.6.0
(c++)"KPtyDevice::writeData(char const*, long long)@Base" 0.6.0
(c++)"KPtyDevice::KPtyDevice(QObject*)@Base" 0.6.0
(c++)"KPtyDevice::KPtyDevice(QObject*)@Base" 0.6.0
(c++)"KPtyDevice::~KPtyDevice()@Base" 0.6.0
(c++)"KPtyDevice::~KPtyDevice()@Base" 0.6.0
(c++)"KPtyDevice::~KPtyDevice()@Base" 0.6.0
(c++)"QByteArray::~QByteArray()@Base" 0.6.0
(c++)"QByteArray::~QByteArray()@Base" 0.6.0
(c++)"KPtyPrivate::chownpty(bool)@Base" 0.6.0
(c++)"KPtyPrivate::KPtyPrivate(KPty*)@Base" 0.6.0
(c++)"KPtyPrivate::KPtyPrivate(KPty*)@Base" 0.6.0
(c++)"KPtyPrivate::~KPtyPrivate()@Base" 0.6.0
(c++)"KPtyPrivate::~KPtyPrivate()@Base" 0.6.0
(c++)"KPtyPrivate::~KPtyPrivate()@Base" 0.6.0
(c++)"KPtyProcess::setUseUtmp(bool)@Base" 0.6.0
(c++)"KPtyProcess::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
@ -41,12 +34,9 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"KPtyProcess::KPtyProcess(QObject*)@Base" 0.6.0
(c++)"KPtyProcess::KPtyProcess(int, QObject*)@Base" 0.6.0
(c++)"KPtyProcess::~KPtyProcess()@Base" 0.6.0
(c++)"KPtyProcess::~KPtyProcess()@Base" 0.6.0
(c++)"KPtyProcess::~KPtyProcess()@Base" 0.6.0
(c++)"QLinkedList<QByteArray>::detach_helper2(QLinkedList<QByteArray>::iterator)@Base" 0.6.0
(c++)"QLinkedList<QByteArray>::append(QByteArray const&)@Base" 0.6.0
(c++)"QLinkedList<QByteArray>::~QLinkedList()@Base" 0.6.0
(c++)"QLinkedList<QByteArray>::~QLinkedList()@Base" 0.6.0
(c++)"QTermWidget::matchFound(int, int, int, int)@Base" 0.6.0
(c++)"QTermWidget::getShellPID()@Base" 0.6.0
(c++)"QTermWidget::keyBindings()@Base" 0.6.0
@ -70,12 +60,13 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QTermWidget::setHistorySize(int)@Base" 0.6.0
(c++)"QTermWidget::setKeyBindings(QString const&)@Base" 0.6.0
(c++)"QTermWidget::termKeyPressed(QKeyEvent*)@Base" 0.6.0
(c++)"QTermWidget::getSelectionEnd(int&, int&)@Base" 0.6.0+20150709
(c++)"QTermWidget::getTerminalFont()@Base" 0.6.0
(c++)"QTermWidget::sessionFinished()@Base" 0.6.0
(c++)"QTermWidget::setSelectionEnd(int&, int&)@Base" 0.6.0
(c++)"QTermWidget::setSelectionEnd(int, int)@Base" 0.6.0
(c++)"QTermWidget::setShellProgram(QString const&)@Base" 0.6.0
(c++)"QTermWidget::setTerminalFont(QFont const&)@Base" 0.6.0
(c++)"QTermWidget::screenLinesCount()@Base" 0.6.0+20150709
(c++)"QTermWidget::selectionChanged(bool)@Base" 0.6.0
(c++)"QTermWidget::staticMetaObject@Base" 0.6.0
(c++)"QTermWidget::workingDirectory()@Base" 0.6.0
@ -96,6 +87,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QTermWidget::availableColorSchemes()@Base" 0.6.0
(c++)"QTermWidget::setFlowControlEnabled(bool)@Base" 0.6.0
(c++)"QTermWidget::setMotionAfterPasting(int)@Base" 0.6.0
(c++)"QTermWidget::startTerminalTeletype()@Base" 0.6.0+20150709
(c++)"QTermWidget::setFlowControlWarningEnabled(bool)@Base" 0.6.0
(c++)"QTermWidget::bell(QString const&)@Base" 0.6.0
(c++)"QTermWidget::find()@Base" 0.6.0
@ -111,6 +103,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QTermWidget::activity()@Base" 0.6.0
(c++)"QTermWidget::findNext()@Base" 0.6.0
(c++)"QTermWidget::finished()@Base" 0.6.0
(c++)"QTermWidget::sendData(char const*, int)@Base" 0.6.0+20150709
(c++)"QTermWidget::sendText(QString const&)@Base" 0.6.0
(c++)"QTermWidget::changeDir(QString const&)@Base" 0.6.0
(c++)"QTermWidget::QTermWidget(QWidget*)@Base" 0.6.0
@ -118,9 +111,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QTermWidget::QTermWidget(QWidget*)@Base" 0.6.0
(c++)"QTermWidget::QTermWidget(int, QWidget*)@Base" 0.6.0
(c++)"QTermWidget::~QTermWidget()@Base" 0.6.0
(c++)"QTermWidget::~QTermWidget()@Base" 0.6.0
(c++)"QTermWidget::~QTermWidget()@Base" 0.6.0
(c++)"QWeakPointer<QObject>::~QWeakPointer()@Base" 0.6.0
(c++)"QWeakPointer<QObject>::~QWeakPointer()@Base" 0.6.0
(c++)"Ui_SearchBar::setupUi(QWidget*)@Base" 0.6.0
(c++)"HistorySearch::matchFound(int, int, int, int)@Base" 0.6.0
@ -132,14 +122,10 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"HistorySearch::search(int, int, int, int)@Base" 0.6.0
(c++)"HistorySearch::search()@Base" 0.6.0
(c++)"HistorySearch::HistorySearch(QPointer<Konsole::Emulation>, QRegExp, bool, int, int, QObject*)@Base" 0.6.0
(c++)"HistorySearch::HistorySearch(QPointer<Konsole::Emulation>, QRegExp, bool, int, int, QObject*)@Base" 0.6.0
(c++)"HistorySearch::~HistorySearch()@Base" 0.6.0
(c++)"HistorySearch::~HistorySearch()@Base" 0.6.0
(c++)"HistorySearch::~HistorySearch()@Base" 0.6.0
(c++)"TermWidgetImpl::createSession(QWidget*)@Base" 0.6.0
(c++)"TermWidgetImpl::createTerminalDisplay(Konsole::Session*, QWidget*)@Base" 0.6.0
(c++)"TermWidgetImpl::TermWidgetImpl(QWidget*)@Base" 0.6.0
(c++)"TermWidgetImpl::TermWidgetImpl(QWidget*)@Base" 0.6.0
(c++)"KProcessPrivate::forwardStd(QProcess::ProcessChannel, int)@Base" 0.6.0
(c++)"KProcessPrivate::_k_forwardStderr()@Base" 0.6.0
(c++)"KProcessPrivate::_k_forwardStdout()@Base" 0.6.0
@ -150,8 +136,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"KPtyDevicePrivate::_k_canWrite()@Base" 0.6.0
(c++)"KPtyDevicePrivate::doWait(int, bool)@Base" 0.6.0
(c++)"KPtyDevicePrivate::~KPtyDevicePrivate()@Base" 0.6.0
(c++)"KPtyDevicePrivate::~KPtyDevicePrivate()@Base" 0.6.0
(c++)"KPtyDevicePrivate::~KPtyDevicePrivate()@Base" 0.6.0
(c++)"KPty::closeSlave()@Base" 0.6.0
(c++)"KPty::setWinSize(int, int)@Base" 0.6.0
(c++)"KPty::open(int)@Base" 0.6.0
@ -168,13 +152,11 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"KPty::KPty(KPtyPrivate*)@Base" 0.6.0
(c++)"KPty::KPty()@Base" 0.6.0
(c++)"KPty::~KPty()@Base" 0.6.0
(c++)"KPty::~KPty()@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::detach_helper()@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::remove(QString const&)@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::~QHash()@Base" 0.6.0
(c++)"QHash<QString, Konsole::ColorScheme const*>::~QHash()@Base" 0.6.0
(c++)"QHash<QString, Konsole::KeyboardTranslator*>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<QString, Konsole::KeyboardTranslator*>::detach_helper()@Base" 0.6.0
(c++)"QHash<QString, Konsole::KeyboardTranslator*>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
@ -187,87 +169,65 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QHash<int, QString>::detach_helper()@Base" 0.6.0
(c++)"QHash<int, QString>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<int, QString>::~QHash()@Base" 0.6.0
(c++)"QHash<int, QString>::~QHash()@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::detach_helper()@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::erase(QHash<int, Konsole::KeyboardTranslator::Entry>::iterator)@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::~QHash()@Base" 0.6.0
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::~QHash()@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::detach_helper()@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::~QHash()@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::~QHash()@Base" 0.6.0
(c++)"QHash<int, unsigned long>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<int, unsigned long>::detach_helper()@Base" 0.6.0
(c++)"QHash<int, unsigned long>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::detach_helper()@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::~QHash()@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::~QHash()@Base" 0.6.0
(c++)"QList<QUrl>::detach_helper(int)@Base" 0.6.0
(c++)"QList<QUrl>::~QList()@Base" 0.6.0
(c++)"QList<QUrl>::~QList()@Base" 0.6.0
(c++)"QList<QString>::detach_helper(int)@Base" 0.6.0
(c++)"QList<QString>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<QString>::append(QString const&)@Base" 0.6.0
(c++)"QList<QString>::removeAll(QString const&)@Base" 0.6.0
(c++)"QList<QString>::QList(QList<QString> const&)@Base" 0.6.0
(c++)"QList<QString>::QList(QList<QString> const&)@Base" 0.6.0
(c++)"QList<QString>::~QList()@Base" 0.6.0
(c++)"QList<QString>::~QList()@Base" 0.6.0
(c++)"QList<QString>::operator+=(QList<QString> const&)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::append(Konsole::KeyboardTranslator::Entry const&)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::QList(QList<Konsole::KeyboardTranslator::Entry> const&)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::QList(QList<Konsole::KeyboardTranslator::Entry> const&)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslator::Entry>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslatorReader::Token>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslatorReader::Token>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslatorReader::Token>::append(Konsole::KeyboardTranslatorReader::Token const&)@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslatorReader::Token>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::KeyboardTranslatorReader::Token>::~QList()@Base" 0.6.0
(c++)"QList<QAction*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<QAction*>::append(QAction* const&)@Base" 0.6.0
(c++)"QList<Konsole::ColorScheme const*>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::ColorScheme const*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::ColorScheme const*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::ColorScheme const*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::append(Konsole::ScreenWindow* const&)@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::QList(QList<Konsole::ScreenWindow*> const&)@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::QList(QList<Konsole::ScreenWindow*> const&)@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::ScreenWindow*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::append(Konsole::TerminalDisplay* const&)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::removeAll(Konsole::TerminalDisplay* const&)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::QList(QList<Konsole::TerminalDisplay*> const&)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::QList(QList<Konsole::TerminalDisplay*> const&)@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::TerminalDisplay*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::clear()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::append(Konsole::CompactHistoryLine* const&)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryLine*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::clear()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::append(Konsole::CompactHistoryBlock* const&)@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::CompactHistoryBlock*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::append(Konsole::Filter::HotSpot* const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::QList(QList<Konsole::Filter::HotSpot*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::QList(QList<Konsole::Filter::HotSpot*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Filter::HotSpot*>::operator+=(QList<Konsole::Filter::HotSpot*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::detach_helper(int)@Base" 0.6.0
@ -275,34 +235,22 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QList<Konsole::Filter*>::append(Konsole::Filter* const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::removeAll(Konsole::Filter* const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::QList(QList<Konsole::Filter*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::QList(QList<Konsole::Filter*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Filter*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Session*>::detach_helper(int)@Base" 0.6.0
(c++)"QList<Konsole::Session*>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<Konsole::Session*>::append(Konsole::Session* const&)@Base" 0.6.0
(c++)"QList<Konsole::Session*>::QList(QList<Konsole::Session*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Session*>::QList(QList<Konsole::Session*> const&)@Base" 0.6.0
(c++)"QList<Konsole::Session*>::~QList()@Base" 0.6.0
(c++)"QList<Konsole::Session*>::~QList()@Base" 0.6.0
(c++)"QList<int>::detach_helper(int)@Base" 0.6.0
(c++)"QList<int>::detach_helper_grow(int, int)@Base" 0.6.0
(c++)"QList<int>::append(int const&)@Base" 0.6.0
(c++)"QList<int>::QList(QList<int> const&)@Base" 0.6.0
(c++)"QList<int>::QList(QList<int> const&)@Base" 0.6.0
(c++)"QList<int>::~QList()@Base" 0.6.0
(c++)"QList<int>::~QList()@Base" 0.6.0
(c++)"Konsole::BlockArray::decreaseBuffer(unsigned long)@Base" 0.6.0
(c++)"Konsole::BlockArray::increaseBuffer()@Base" 0.6.0
(c++)"Konsole::BlockArray::setHistorySize(unsigned long)@Base" 0.6.0
(c++)"Konsole::BlockArray::at(unsigned long)@Base" 0.6.0
(c++)"Konsole::BlockArray::unmap()@Base" 0.6.0
(c++)"Konsole::BlockArray::append(Konsole::Block*)@Base" 0.6.0
(c++)"Konsole::BlockArray::setSize(unsigned long)@Base" 0.6.0
(c++)"Konsole::BlockArray::newBlock()@Base" 0.6.0
(c++)"Konsole::BlockArray::BlockArray()@Base" 0.6.0
(c++)"Konsole::BlockArray::BlockArray()@Base" 0.6.0
(c++)"Konsole::BlockArray::~BlockArray()@Base" 0.6.0
(c++)"Konsole::BlockArray::~BlockArray()@Base" 0.6.0
(c++)"Konsole::ColorScheme::colorNames@Base" 0.6.0
(c++)"Konsole::ColorScheme::setOpacity(double)@Base" 0.6.0
@ -322,7 +270,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::ColorScheme::ColorScheme(Konsole::ColorScheme const&)@Base" 0.6.0
(c++)"Konsole::ColorScheme::ColorScheme()@Base" 0.6.0
(c++)"Konsole::ColorScheme::~ColorScheme()@Base" 0.6.0
(c++)"Konsole::ColorScheme::~ColorScheme()@Base" 0.6.0
(c++)"Konsole::FilterChain::removeFilter(Konsole::Filter*)@Base" 0.6.0
(c++)"Konsole::FilterChain::containsFilter(Konsole::Filter*)@Base" 0.6.0
(c++)"Konsole::FilterChain::clear()@Base" 0.6.0
@ -331,8 +278,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::FilterChain::addFilter(Konsole::Filter*)@Base" 0.6.0
(c++)"Konsole::FilterChain::setBuffer(QString const*, QList<int> const*)@Base" 0.6.0
(c++)"Konsole::FilterChain::~FilterChain()@Base" 0.6.0
(c++)"Konsole::FilterChain::~FilterChain()@Base" 0.6.0
(c++)"Konsole::FilterChain::~FilterChain()@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::decodeLine(Konsole::Character const*, int, unsigned char)@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::setColorTable(Konsole::ColorEntry const*)@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::end()@Base" 0.6.0
@ -340,9 +285,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HTMLDecoder::openSpan(QString&, QString const&)@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::closeSpan(QString&)@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::HTMLDecoder()@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::HTMLDecoder()@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::~HTMLDecoder()@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::~HTMLDecoder()@Base" 0.6.0
(c++)"Konsole::HTMLDecoder::~HTMLDecoder()@Base" 0.6.0
(c++)"Konsole::HistoryFile::add(unsigned char const*, int)@Base" 0.6.0
(c++)"Konsole::HistoryFile::get(unsigned char*, int, int)@Base" 0.6.0
@ -351,15 +293,9 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryFile::unmap()@Base" 0.6.0
(c++)"Konsole::HistoryFile::isMapped()@Base" 0.6.0
(c++)"Konsole::HistoryFile::HistoryFile()@Base" 0.6.0
(c++)"Konsole::HistoryFile::HistoryFile()@Base" 0.6.0
(c++)"Konsole::HistoryFile::~HistoryFile()@Base" 0.6.0
(c++)"Konsole::HistoryFile::~HistoryFile()@Base" 0.6.0
(c++)"Konsole::HistoryFile::~HistoryFile()@Base" 0.6.0
(c++)"Konsole::HistoryType::HistoryType()@Base" 0.6.0
(c++)"Konsole::HistoryType::HistoryType()@Base" 0.6.0
(c++)"Konsole::HistoryType::~HistoryType()@Base" 0.6.0
(c++)"Konsole::HistoryType::~HistoryType()@Base" 0.6.0
(c++)"Konsole::HistoryType::~HistoryType()@Base" 0.6.0
(c++)"Konsole::FilterObject::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
(c++)"Konsole::FilterObject::qt_metacast(char const*)@Base" 0.6.0
(c++)"Konsole::FilterObject::emitActivated(QUrl const&)@Base" 0.6.0
@ -367,22 +303,14 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::FilterObject::activated(QUrl const&)@Base" 0.6.0
(c++)"Konsole::FilterObject::activated()@Base" 0.6.0
(c++)"Konsole::FilterObject::~FilterObject()@Base" 0.6.0
(c++)"Konsole::FilterObject::~FilterObject()@Base" 0.6.0
(c++)"Konsole::FilterObject::~FilterObject()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::newHotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::setCapturedTexts(QStringList const&)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::activate(QString const&)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::process()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::setRegExp(QRegExp const&)@Base" 0.6.0
(c++)"Konsole::RegExpFilter::RegExpFilter()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::RegExpFilter()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::~RegExpFilter()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::~RegExpFilter()@Base" 0.6.0
(c++)"Konsole::RegExpFilter::~RegExpFilter()@Base" 0.6.0
(c++)"Konsole::ScreenWindow::isSelected(int, int)@Base" 0.6.0
(c++)"Konsole::ScreenWindow::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
@ -407,9 +335,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::ScreenWindow::scrolled(int)@Base" 0.6.0
(c++)"Konsole::ScreenWindow::setScreen(Konsole::Screen*)@Base" 0.6.0
(c++)"Konsole::ScreenWindow::ScreenWindow(QObject*)@Base" 0.6.0
(c++)"Konsole::ScreenWindow::ScreenWindow(QObject*)@Base" 0.6.0
(c++)"Konsole::ScreenWindow::~ScreenWindow()@Base" 0.6.0
(c++)"Konsole::ScreenWindow::~ScreenWindow()@Base" 0.6.0
(c++)"Konsole::ScreenWindow::~ScreenWindow()@Base" 0.6.0
(c++)"Konsole::SessionGroup::addSession(Konsole::Session*)@Base" 0.6.0
(c++)"Konsole::SessionGroup::connectAll(bool)@Base" 0.6.0
@ -422,9 +347,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::SessionGroup::setMasterStatus(Konsole::Session*, bool)@Base" 0.6.0
(c++)"Konsole::SessionGroup::staticMetaObject@Base" 0.6.0
(c++)"Konsole::SessionGroup::SessionGroup()@Base" 0.6.0
(c++)"Konsole::SessionGroup::SessionGroup()@Base" 0.6.0
(c++)"Konsole::SessionGroup::~SessionGroup()@Base" 0.6.0
(c++)"Konsole::SessionGroup::~SessionGroup()@Base" 0.6.0
(c++)"Konsole::SessionGroup::~SessionGroup()@Base" 0.6.0
(c++)"Konsole::ShellCommand::expand(QStringList const&)@Base" 0.6.0
(c++)"Konsole::ShellCommand::expand(QString const&)@Base" 0.6.0
@ -435,9 +357,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryScroll::addCellsVector(QVector<Konsole::Character> const&)@Base" 0.6.0
(c++)"Konsole::HistoryScroll::hasScroll()@Base" 0.6.0
(c++)"Konsole::HistoryScroll::HistoryScroll(Konsole::HistoryType*)@Base" 0.6.0
(c++)"Konsole::HistoryScroll::HistoryScroll(Konsole::HistoryType*)@Base" 0.6.0
(c++)"Konsole::HistoryScroll::~HistoryScroll()@Base" 0.6.0
(c++)"Konsole::HistoryScroll::~HistoryScroll()@Base" 0.6.0
(c++)"Konsole::HistoryScroll::~HistoryScroll()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::resetModes()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::saveCursor()@Base" 0.6.0
@ -481,20 +400,11 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Vt102Emulation::sendText(QString const&)@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::resetMode(int)@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::Vt102Emulation()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::Vt102Emulation()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::~Vt102Emulation()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::~Vt102Emulation()@Base" 0.6.0
(c++)"Konsole::Vt102Emulation::~Vt102Emulation()@Base" 0.6.0
(c++)"Konsole::vt100_graphics@Base" 0.6.0
(c++)"Konsole::HistoryTypeFile::HistoryTypeFile(QString const&)@Base" 0.6.0
(c++)"Konsole::HistoryTypeFile::HistoryTypeFile(QString const&)@Base" 0.6.0
(c++)"Konsole::HistoryTypeFile::~HistoryTypeFile()@Base" 0.6.0
(c++)"Konsole::HistoryTypeFile::~HistoryTypeFile()@Base" 0.6.0
(c++)"Konsole::HistoryTypeFile::~HistoryTypeFile()@Base" 0.6.0
(c++)"Konsole::HistoryTypeNone::HistoryTypeNone()@Base" 0.6.0
(c++)"Konsole::HistoryTypeNone::HistoryTypeNone()@Base" 0.6.0
(c++)"Konsole::HistoryTypeNone::~HistoryTypeNone()@Base" 0.6.0
(c++)"Konsole::HistoryTypeNone::~HistoryTypeNone()@Base" 0.6.0
(c++)"Konsole::HistoryTypeNone::~HistoryTypeNone()@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::blinkEvent()@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::clearImage()@Base" 0.6.0
@ -557,7 +467,9 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::TerminalDisplay::keyPressedSignal(QKeyEvent*)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::selectionChanged()@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::staticMetaObject@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::usesMouseChanged()@Base" 0.6.0+20150709
(c++)"Konsole::TerminalDisplay::HAVE_TRANSPARENCY@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::calculateTextArea(int, int, int, int, int)@Base" 0.6.0+20150709
(c++)"Konsole::TerminalDisplay::mouseReleaseEvent(QMouseEvent*)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::setBlinkingCursor(bool)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::setWordCharacters(QString const&)@Base" 0.6.0
@ -595,9 +507,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::TerminalDisplay::setVTFont(QFont const&)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::showEvent(QShowEvent*)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::TerminalDisplay(QWidget*)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::TerminalDisplay(QWidget*)@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::~TerminalDisplay()@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::~TerminalDisplay()@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::~TerminalDisplay()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::decodeLine(Konsole::Character const*, int, unsigned char)@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::setTrailingWhitespace(bool)@Base" 0.6.0
@ -605,9 +514,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::PlainTextDecoder::end()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::begin(QTextStream*)@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::PlainTextDecoder()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::PlainTextDecoder()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::~PlainTextDecoder()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::~PlainTextDecoder()@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::~PlainTextDecoder()@Base" 0.6.0
(c++)"Konsole::base_color_table@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::timerEvent(QTimerEvent*)@Base" 0.6.0
@ -616,15 +522,10 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::AutoScrollHandler::qt_metacast(char const*)@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::staticMetaObject@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::AutoScrollHandler(QWidget*)@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::AutoScrollHandler(QWidget*)@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::~AutoScrollHandler()@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::~AutoScrollHandler()@Base" 0.6.0
(c++)"Konsole::AutoScrollHandler::~AutoScrollHandler()@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::createExtendedChar(unsigned short*, unsigned short)@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::instance@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::ExtendedCharTable()@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::ExtendedCharTable()@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::~ExtendedCharTable()@Base" 0.6.0
(c++)"Konsole::ExtendedCharTable::~ExtendedCharTable()@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::getLineLen(int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::startOfLine(int)@Base" 0.6.0
@ -634,9 +535,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryScrollFile::getCells(int, int, int, Konsole::Character*)@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::getLines()@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::HistoryScrollFile(QString const&)@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::HistoryScrollFile(QString const&)@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::~HistoryScrollFile()@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::~HistoryScrollFile()@Base" 0.6.0
(c++)"Konsole::HistoryScrollFile::~HistoryScrollFile()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::getLineLen(int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::isWrappedLine(int)@Base" 0.6.0
@ -646,15 +544,9 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryScrollNone::getLines()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::hasScroll()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::HistoryScrollNone()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::HistoryScrollNone()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::~HistoryScrollNone()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::~HistoryScrollNone()@Base" 0.6.0
(c++)"Konsole::HistoryScrollNone::~HistoryScrollNone()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBuffer::HistoryTypeBuffer(unsigned int)@Base" 0.6.0
(c++)"Konsole::HistoryTypeBuffer::HistoryTypeBuffer(unsigned int)@Base" 0.6.0
(c++)"Konsole::HistoryTypeBuffer::~HistoryTypeBuffer()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBuffer::~HistoryTypeBuffer()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBuffer::~HistoryTypeBuffer()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::allColorSchemes()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::findColorScheme(QString const&)@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::loadColorScheme(QString const&)@Base" 0.6.0
@ -668,41 +560,27 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::ColorSchemeManager::theColorSchemeManager@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::instance()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::ColorSchemeManager()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::ColorSchemeManager()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::~ColorSchemeManager()@Base" 0.6.0
(c++)"Konsole::ColorSchemeManager::~ColorSchemeManager()@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::setWrapped(bool)@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::getCharacter(int, Konsole::Character&)@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::getCharacters(Konsole::Character*, int, int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::CompactHistoryLine(QVector<Konsole::Character> const&, Konsole::CompactHistoryBlockList&)@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::CompactHistoryLine(QVector<Konsole::Character> const&, Konsole::CompactHistoryBlockList&)@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::~CompactHistoryLine()@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::~CompactHistoryLine()@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::~CompactHistoryLine()@Base" 0.6.0
(c++)"Konsole::CompactHistoryLine::operator new(unsigned long, Konsole::CompactHistoryBlockList&)@Base" 0.6.0
(c++)"Konsole::CompactHistoryType::CompactHistoryType(unsigned int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryType::CompactHistoryType(unsigned int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryType::~CompactHistoryType()@Base" 0.6.0
(c++)"Konsole::CompactHistoryType::~CompactHistoryType()@Base" 0.6.0
(c++)"Konsole::CompactHistoryType::~CompactHistoryType()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::removeEntry(Konsole::KeyboardTranslator::Entry const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::replaceEntry(Konsole::KeyboardTranslator::Entry const&, Konsole::KeyboardTranslator::Entry const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::setDescription(QString const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::Entry::Entry()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::Entry::Entry()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::setName(QString const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::addEntry(Konsole::KeyboardTranslator::Entry const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::KeyboardTranslator(QString const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslator::KeyboardTranslator(QString const&)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::deallocate()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::length()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::isInUse()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::allocate(unsigned long)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::contains(void*)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::remaining()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::~CompactHistoryBlock()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::~CompactHistoryBlock()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlock::~CompactHistoryBlock()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::getLineLen(int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::bufferIndex(int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::isWrappedLine(int)@Base" 0.6.0
@ -713,9 +591,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryScrollBuffer::getCells(int, int, int, Konsole::Character*)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::getLines()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::HistoryScrollBuffer(unsigned int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::HistoryScrollBuffer(unsigned int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::~HistoryScrollBuffer()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::~HistoryScrollBuffer()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBuffer::~HistoryScrollBuffer()@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::getLineLen(int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::isWrappedLine(int)@Base" 0.6.0
@ -726,25 +601,14 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::CompactHistoryScroll::getCells(int, int, int, Konsole::Character*)@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::getLines()@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::CompactHistoryScroll(unsigned int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::CompactHistoryScroll(unsigned int)@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::~CompactHistoryScroll()@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::~CompactHistoryScroll()@Base" 0.6.0
(c++)"Konsole::CompactHistoryScroll::~CompactHistoryScroll()@Base" 0.6.0
(c++)"Konsole::AccessibleColorScheme::AccessibleColorScheme()@Base" 0.6.0
(c++)"Konsole::AccessibleColorScheme::AccessibleColorScheme()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBlockArray::HistoryTypeBlockArray(unsigned long)@Base" 0.6.0
(c++)"Konsole::HistoryTypeBlockArray::HistoryTypeBlockArray(unsigned long)@Base" 0.6.0
(c++)"Konsole::HistoryTypeBlockArray::~HistoryTypeBlockArray()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBlockArray::~HistoryTypeBlockArray()@Base" 0.6.0
(c++)"Konsole::HistoryTypeBlockArray::~HistoryTypeBlockArray()@Base" 0.6.0
(c++)"Konsole::KDE3ColorSchemeReader::readColorLine(QString const&, Konsole::ColorScheme*)@Base" 0.6.0
(c++)"Konsole::KDE3ColorSchemeReader::readTitleLine(QString const&, Konsole::ColorScheme*)@Base" 0.6.0
(c++)"Konsole::KDE3ColorSchemeReader::read()@Base" 0.6.0
(c++)"Konsole::KDE3ColorSchemeReader::KDE3ColorSchemeReader(QIODevice*)@Base" 0.6.0
(c++)"Konsole::KDE3ColorSchemeReader::KDE3ColorSchemeReader(QIODevice*)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlockList::deallocate(void*)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlockList::allocate(unsigned long)@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlockList::~CompactHistoryBlockList()@Base" 0.6.0
(c++)"Konsole::CompactHistoryBlockList::~CompactHistoryBlockList()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::getLineLen(int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::isWrappedLine(int)@Base" 0.6.0
@ -752,10 +616,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::HistoryScrollBlockArray::addCells(Konsole::Character const*, int)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::getCells(int, int, int, Konsole::Character*)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::getLines()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::HistoryScrollBlockArray(unsigned long)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::HistoryScrollBlockArray(unsigned long)@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::~HistoryScrollBlockArray()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::~HistoryScrollBlockArray()@Base" 0.6.0
(c++)"Konsole::HistoryScrollBlockArray::~HistoryScrollBlockArray()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::parseError()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::createEntry(QString const&, QString const&)@Base" 0.6.0
@ -769,20 +629,13 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::KeyboardTranslatorReader::tokenize(QString const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::nextEntry()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::KeyboardTranslatorReader(QIODevice*)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::KeyboardTranslatorReader(QIODevice*)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::~KeyboardTranslatorReader()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorReader::~KeyboardTranslatorReader()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::writeEntry(Konsole::KeyboardTranslator::Entry const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::writeHeader(QString const&)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::KeyboardTranslatorWriter(QIODevice*)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::KeyboardTranslatorWriter(QIODevice*)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::~KeyboardTranslatorWriter()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorWriter::~KeyboardTranslatorWriter()@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::setImage(Konsole::Character const*, int, int, QVector<unsigned char> const&)@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::TerminalImageFilterChain()@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::TerminalImageFilterChain()@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::~TerminalImageFilterChain()@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::~TerminalImageFilterChain()@Base" 0.6.0
(c++)"Konsole::TerminalImageFilterChain::~TerminalImageFilterChain()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::addTranslator(Konsole::KeyboardTranslator*)@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::allTranslators()@Base" 0.6.0
@ -798,8 +651,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::KeyboardTranslatorManager::theKeyboardTranslatorManager@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::instance()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::KeyboardTranslatorManager()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::KeyboardTranslatorManager()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::~KeyboardTranslatorManager()@Base" 0.6.0
(c++)"Konsole::KeyboardTranslatorManager::~KeyboardTranslatorManager()@Base" 0.6.0
(c++)"Konsole::Pty::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
(c++)"Konsole::Pty::qt_metacast(char const*)@Base" 0.6.0
@ -810,6 +661,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Pty::setWindowSize(int, int)@Base" 0.6.0
(c++)"Konsole::Pty::staticMetaObject@Base" 0.6.0
(c++)"Konsole::Pty::setupChildProcess()@Base" 0.6.0
(c++)"Konsole::Pty::setEmptyPTYProperties()@Base" 0.6.0+20150709
(c++)"Konsole::Pty::setFlowControlEnabled(bool)@Base" 0.6.0
(c++)"Konsole::Pty::addEnvironmentVariables(QStringList const&)@Base" 0.6.0
(c++)"Konsole::Pty::init()@Base" 0.6.0
@ -822,8 +674,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Pty::Pty(QObject*)@Base" 0.6.0
(c++)"Konsole::Pty::Pty(int, QObject*)@Base" 0.6.0
(c++)"Konsole::Pty::~Pty()@Base" 0.6.0
(c++)"Konsole::Pty::~Pty()@Base" 0.6.0
(c++)"Konsole::Pty::~Pty()@Base" 0.6.0
(c++)"Konsole::Filter::addHotSpot(Konsole::Filter::HotSpot*)@Base" 0.6.0
(c++)"Konsole::Filter::getLineColumn(int, int&, int&)@Base" 0.6.0
(c++)"Konsole::Filter::reset()@Base" 0.6.0
@ -831,15 +681,9 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Filter::HotSpot::actions()@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::setType(Konsole::Filter::HotSpot::Type)@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::Filter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::Filter::setBuffer(QString const*, QList<int> const*)@Base" 0.6.0
(c++)"Konsole::Filter::Filter()@Base" 0.6.0
(c++)"Konsole::Filter::Filter()@Base" 0.6.0
(c++)"Konsole::Filter::~Filter()@Base" 0.6.0
(c++)"Konsole::Filter::~Filter()@Base" 0.6.0
(c++)"Konsole::Filter::~Filter()@Base" 0.6.0
(c++)"Konsole::Screen::clearImage(int, int, char)@Base" 0.6.0
(c++)"Konsole::Screen::cursorDown(int)@Base" 0.6.0
@ -909,8 +753,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Screen::resetMode(int)@Base" 0.6.0
(c++)"Konsole::Screen::setScroll(Konsole::HistoryType const&, bool)@Base" 0.6.0
(c++)"Konsole::Screen::Screen(int, int)@Base" 0.6.0
(c++)"Konsole::Screen::Screen(int, int)@Base" 0.6.0
(c++)"Konsole::Screen::~Screen()@Base" 0.6.0
(c++)"Konsole::Screen::~Screen()@Base" 0.6.0
(c++)"Konsole::Session::removeView(Konsole::TerminalDisplay*)@Base" 0.6.0
(c++)"Konsole::Session::sendSignal(int)@Base" 0.6.0
@ -918,6 +760,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Session::bellRequest(QString const&)@Base" 0.6.0
(c++)"Konsole::Session::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
(c++)"Konsole::Session::qt_metacast(char const*)@Base" 0.6.0
(c++)"Konsole::Session::runEmptyPTY()@Base" 0.6.0+20150709
(c++)"Konsole::Session::setIconName(QString const&)@Base" 0.6.0
(c++)"Konsole::Session::setIconText(QString const&)@Base" 0.6.0
(c++)"Konsole::Session::clearHistory()@Base" 0.6.0
@ -968,9 +811,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Session::setCodec(QTextCodec*)@Base" 0.6.0
(c++)"Konsole::Session::setTitle(Konsole::Session::TitleRole, QString const&)@Base" 0.6.0
(c++)"Konsole::Session::Session(QObject*)@Base" 0.6.0
(c++)"Konsole::Session::Session(QObject*)@Base" 0.6.0
(c++)"Konsole::Session::~Session()@Base" 0.6.0
(c++)"Konsole::Session::~Session()@Base" 0.6.0
(c++)"Konsole::Session::~Session()@Base" 0.6.0
(c++)"Konsole::Emulation::sendString(char const*, int)@Base" 0.6.0
(c++)"Konsole::Emulation::setHistory(Konsole::HistoryType const&)@Base" 0.6.0
@ -1005,9 +845,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Emulation::stateSet(int)@Base" 0.6.0
(c++)"Konsole::Emulation::setScreen(int)@Base" 0.6.0
(c++)"Konsole::Emulation::Emulation()@Base" 0.6.0
(c++)"Konsole::Emulation::Emulation()@Base" 0.6.0
(c++)"Konsole::Emulation::~Emulation()@Base" 0.6.0
(c++)"Konsole::Emulation::~Emulation()@Base" 0.6.0
(c++)"Konsole::Emulation::~Emulation()@Base" 0.6.0
(c++)"Konsole::UrlFilter::newHotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::UrlFilter::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
@ -1019,31 +856,20 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::UrlFilter::HotSpot::actions()@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::activate(QString const&)@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::HotSpot(int, int, int, int)@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::UrlFilter::HotSpot::~HotSpot()@Base" 0.6.0
(c++)"Konsole::UrlFilter::activated(QUrl const&)@Base" 0.6.0
(c++)"Konsole::UrlFilter::UrlFilter()@Base" 0.6.0
(c++)"Konsole::UrlFilter::UrlFilter()@Base" 0.6.0
(c++)"Konsole::UrlFilter::~UrlFilter()@Base" 0.6.0
(c++)"Konsole::UrlFilter::~UrlFilter()@Base" 0.6.0
(c++)"Konsole::UrlFilter::~UrlFilter()@Base" 0.6.0
(c++)"QString::~QString()@Base" 0.6.0
(c++)"QString::~QString()@Base" 0.6.0
(c++)"QVector<QRect>::~QVector()@Base" 0.6.0
(c++)"QVector<QRect>::~QVector()@Base" 0.6.0
(c++)"QVector<Konsole::Character>::reallocData(int, int, QFlags<QArrayData::AllocationOption>)@Base" 0.6.0
(c++)"QVector<Konsole::Character>::insert(Konsole::Character*, int, Konsole::Character const&)@Base" 0.6.0
(c++)"QVector<Konsole::Character>::resize(int)@Base" 0.6.0
(c++)"QVector<Konsole::Character>::QVector(int)@Base" 0.6.0
(c++)"QVector<Konsole::Character>::QVector(int)@Base" 0.6.0
(c++)"QVector<Konsole::Character>::~QVector()@Base" 0.6.0
(c++)"QVector<Konsole::Character>::~QVector()@Base" 0.6.0
(c++)"QVector<Konsole::Character>::operator=(QVector<Konsole::Character> const&)@Base" 0.6.0
(c++)"QVector<unsigned char>::reallocData(int, int, QFlags<QArrayData::AllocationOption>)@Base" 0.6.0
(c++)"QVector<unsigned char>::~QVector()@Base" 0.6.0
(c++)"QVector<unsigned char>::~QVector()@Base" 0.6.0
(c++)"KProcess::setProgram(QStringList const&)@Base" 0.6.0
(c++)"KProcess::setProgram(QString const&, QStringList const&)@Base" 0.6.0
(c++)"KProcess::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.6.0
@ -1067,8 +893,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"KProcess::KProcess(KProcessPrivate*, QObject*)@Base" 0.6.0
(c++)"KProcess::KProcess(QObject*)@Base" 0.6.0
(c++)"KProcess::~KProcess()@Base" 0.6.0
(c++)"KProcess::~KProcess()@Base" 0.6.0
(c++)"KProcess::~KProcess()@Base" 0.6.0
(c++)"KProcess::operator<<(QStringList const&)@Base" 0.6.0
(c++)"KProcess::operator<<(QString const&)@Base" 0.6.0
(c++)"SearchBar::searchText()@Base" 0.6.0
@ -1087,9 +911,6 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"SearchBar::findNext()@Base" 0.6.0
(c++)"SearchBar::matchCase()@Base" 0.6.0
(c++)"SearchBar::SearchBar(QWidget*)@Base" 0.6.0
(c++)"SearchBar::SearchBar(QWidget*)@Base" 0.6.0
(c++)"SearchBar::~SearchBar()@Base" 0.6.0
(c++)"SearchBar::~SearchBar()@Base" 0.6.0
(c++)"SearchBar::~SearchBar()@Base" 0.6.0
(c++)"KPtyDevice::metaObject() const@Base" 0.6.0
(c++)"KPtyDevice::canReadLine() const@Base" 0.6.0
@ -1105,6 +926,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QTermWidget::metaObject() const@Base" 0.6.0
(c++)"QTermWidget::getHotSpotAt(QPoint const&) const@Base" 0.6.0
(c++)"QTermWidget::getHotSpotAt(int, int) const@Base" 0.6.0
(c++)"QTermWidget::getPtySlaveFd() const@Base" 0.6.0+20150709
(c++)"QTermWidget::sizeHint() const@Base" 0.6.0
(c++)"HistorySearch::metaObject() const@Base" 0.6.0
(c++)"KPty::slaveFd() const@Base" 0.6.0
@ -1121,10 +943,8 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"QHash<int, Konsole::KeyboardTranslator::Entry>::findNode(int const&, unsigned int*) const@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::values(int const&) const@Base" 0.6.0
(c++)"QHash<int, Konsole::Filter::HotSpot*>::findNode(int const&, unsigned int*) const@Base" 0.6.0
(c++)"QHash<int, unsigned long>::findNode(int const&, unsigned int*) const@Base" 0.6.0
(c++)"QHash<unsigned short, unsigned short*>::findNode(unsigned short const&, unsigned int*) const@Base" 0.6.0
(c++)"QList<QString>::mid(int, int) const@Base" 0.6.0
(c++)"Konsole::BlockArray::has(unsigned long) const@Base" 0.6.0
(c++)"Konsole::BlockArray::lastBlock() const@Base" 0.6.0
(c++)"Konsole::ColorScheme::colorEntry(int, unsigned int) const@Base" 0.6.0
(c++)"Konsole::ColorScheme::colorTable() const@Base" 0.6.0
@ -1190,6 +1010,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::TerminalDisplay::getCharacterPosition(QPoint const&, int&, int&) const@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::sizeHint() const@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::charClass(QChar) const@Base" 0.6.0
(c++)"Konsole::TerminalDisplay::textWidth(int, int, int) const@Base" 0.6.0+20150709
(c++)"Konsole::TerminalDisplay::usesMouse() const@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::linePositions() const@Base" 0.6.0
(c++)"Konsole::PlainTextDecoder::trailingWhitespace() const@Base" 0.6.0
@ -1267,6 +1088,7 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"Konsole::Session::environment() const@Base" 0.6.0
(c++)"Konsole::Session::historyType() const@Base" 0.6.0
(c++)"Konsole::Session::keyBindings() const@Base" 0.6.0
(c++)"Konsole::Session::getPtySlaveFd() const@Base" 0.6.0+20150709
(c++)"Konsole::Session::tabTitleFormat(Konsole::Session::TabTitleContext) const@Base" 0.6.0
(c++)"Konsole::Session::isMonitorSilence() const@Base" 0.6.0
(c++)"Konsole::Session::hasDarkBackground() const@Base" 0.6.0
@ -1437,10 +1259,39 @@ libqtermwidget5.so.0 libqtermwidget5-0 #MINVER#
(c++)"vtable for Konsole::UrlFilter::HotSpot@Base" 0.6.0
(c++)"vtable for Konsole::UrlFilter@Base" 0.6.0
(c++)"non-virtual thunk to QTermWidget::~QTermWidget()@Base" 0.6.0
(c++)"non-virtual thunk to QTermWidget::~QTermWidget()@Base" 0.6.0
(c++)"non-virtual thunk to Konsole::TerminalDisplay::~TerminalDisplay()@Base" 0.6.0
(c++)"non-virtual thunk to Konsole::TerminalDisplay::~TerminalDisplay()@Base" 0.6.0
(c++)"non-virtual thunk to SearchBar::~SearchBar()@Base" 0.6.0
(c++)"non-virtual thunk to SearchBar::~SearchBar()@Base" 0.6.0
(c++)"operator+(QString const&, char)@Base" 0.6.0
createTermWidget@Base 0.6.0
(arch=amd64|c++)"Konsole::BlockArray::at(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::BlockArray::decreaseBuffer(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::BlockArray::has(unsigned long) const@Base" 0.6.0
(arch=amd64|c++)"Konsole::BlockArray::setHistorySize(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::BlockArray::setSize(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::CompactHistoryBlock::allocate(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::CompactHistoryBlockList::allocate(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::CompactHistoryLine::operator new(unsigned long, Konsole::CompactHistoryBlockList&)@Base" 0.6.0
(arch=amd64|c++)"Konsole::HistoryScrollBlockArray::HistoryScrollBlockArray(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"Konsole::HistoryTypeBlockArray::HistoryTypeBlockArray(unsigned long)@Base" 0.6.0
(arch=amd64|c++)"QHash<int, unsigned long>::deleteNode2(QHashData::Node*)@Base" 0.6.0
(arch=amd64|c++)"QHash<int, unsigned long>::detach_helper()@Base" 0.6.0
(arch=amd64|c++)"QHash<int, unsigned long>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0
(arch=amd64|c++)"QHash<int, unsigned long>::findNode(int const&, unsigned int*) const@Base" 0.6.0
(arch=i386|c++)"QHash<int, unsigned int>::deleteNode2(QHashData::Node*)@Base" 0.6.0+20150709
(arch=i386|c++)"QHash<int, unsigned int>::detach_helper()@Base" 0.6.0+20150709
(arch=i386|c++)"QHash<int, unsigned int>::duplicateNode(QHashData::Node*, void*)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::BlockArray::decreaseBuffer(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::BlockArray::setHistorySize(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::BlockArray::at(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::BlockArray::setSize(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::CompactHistoryLine::operator new(unsigned int, Konsole::CompactHistoryBlockList&)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::CompactHistoryBlock::allocate(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::HistoryTypeBlockArray::HistoryTypeBlockArray(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::CompactHistoryBlockList::allocate(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::HistoryScrollBlockArray::HistoryScrollBlockArray(unsigned int)@Base" 0.6.0+20150709
(arch=i386|c++)"QHash<int, unsigned int>::findNode(int const&, unsigned int*) const@Base" 0.6.0+20150709
(arch=i386|c++)"Konsole::BlockArray::has(unsigned int) const@Base" 0.6.0+20150709

@ -1 +1,2 @@
tar-ignore=.gitignore
tar-ignore=mangled

@ -1,6 +1,6 @@
/*
This file is part of Konsole, KDE's terminal.
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -56,7 +56,7 @@ static const int LINE_DOUBLEHEIGHT = (1 << 2);
class Character
{
public:
/**
/**
* Constructs a new character.
*
* @param _c The unicode character value of this character.
@ -74,25 +74,25 @@ public:
{
/** The unicode character value for this character. */
quint16 character;
/**
/**
* Experimental addition which allows a single Character instance to contain more than
* one unicode character.
*
* charSequence is a hash code which can be used to look up the unicode
* character sequence in the ExtendedCharTable used to create the sequence.
*/
quint16 charSequence;
quint16 charSequence;
};
/** A combination of RENDITION flags which specify options for drawing the character. */
quint8 rendition;
/** The foreground color used to draw this character. */
CharacterColor foregroundColor;
CharacterColor foregroundColor;
/** The color used to draw this character's background. */
CharacterColor backgroundColor;
/**
/**
* Returns true if this character has a transparent background when
* it is drawn with the specified @p palette.
*/
@ -100,16 +100,16 @@ public:
/**
* Returns true if this character should always be drawn in bold when
* it is drawn with the specified @p palette, independent of whether
* or not the character has the RE_BOLD rendition flag.
* or not the character has the RE_BOLD rendition flag.
*/
ColorEntry::FontWeight fontWeight(const ColorEntry* base) const;
/**
/**
* returns true if the format (color, rendition flag) of the compared characters is equal
*/
bool equalsFormat(const Character &other) const;
/**
/**
* Compares two characters and returns true if they have the same unicode character value,
* rendition and colors.
*/
@ -122,36 +122,36 @@ public:
};
inline bool operator == (const Character& a, const Character& b)
{
return a.character == b.character &&
a.rendition == b.rendition &&
a.foregroundColor == b.foregroundColor &&
{
return a.character == b.character &&
a.rendition == b.rendition &&
a.foregroundColor == b.foregroundColor &&
a.backgroundColor == b.backgroundColor;
}
inline bool operator != (const Character& a, const Character& b)
{
return a.character != b.character ||
a.rendition != b.rendition ||
a.foregroundColor != b.foregroundColor ||
return a.character != b.character ||
a.rendition != b.rendition ||
a.foregroundColor != b.foregroundColor ||
a.backgroundColor != b.backgroundColor;
}
inline bool Character::isTransparent(const ColorEntry* base) const
{
return ((backgroundColor._colorSpace == COLOR_SPACE_DEFAULT) &&
return ((backgroundColor._colorSpace == COLOR_SPACE_DEFAULT) &&
base[backgroundColor._u+0+(backgroundColor._v?BASE_COLORS:0)].transparent)
|| ((backgroundColor._colorSpace == COLOR_SPACE_SYSTEM) &&
|| ((backgroundColor._colorSpace == COLOR_SPACE_SYSTEM) &&
base[backgroundColor._u+2+(backgroundColor._v?BASE_COLORS:0)].transparent);
}
inline bool Character::equalsFormat(const Character& other) const
{
return
return
backgroundColor==other.backgroundColor &&
foregroundColor==other.foregroundColor &&
rendition==other.rendition;
}
}
inline ColorEntry::FontWeight Character::fontWeight(const ColorEntry* base) const
{
@ -196,7 +196,7 @@ public:
* which was added to the table using createExtendedChar().
*
* @param hash The hash key returned by createExtendedChar()
* @param length This variable is set to the length of the
* @param length This variable is set to the length of the
* character sequence.
*
* @return A unicode character sequence of size @p length.
@ -208,7 +208,7 @@ public:
private:
// calculates the hash key of a sequence of unicode points of size 'length'
ushort extendedCharHash(ushort* unicodePoints , ushort length) const;
// tests whether the entry in the table specified by 'hash' matches the
// tests whether the entry in the table specified by 'hash' matches the
// character sequence 'unicodePoints' of size 'length'
bool extendedCharMatch(ushort hash , ushort* unicodePoints , ushort length) const;
// internal, maps hash keys to character sequence buffers. The first ushort

@ -1,6 +1,6 @@
/*
This file is part of Konsole, KDE's terminal.
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -32,14 +32,14 @@
namespace Konsole
{
/**
* An entry in a terminal display's color palette.
/**
* An entry in a terminal display's color palette.
*
* A color palette is an array of 16 ColorEntry instances which map
* system color indexes (from 0 to 15) into actual colors.
*
* Each entry can be set as bold, in which case any text
* drawn using the color should be drawn in bold.
* drawn using the color should be drawn in bold.
*
* Each entry can also be transparent, in which case the terminal
* display should avoid drawing the background for any characters
@ -49,58 +49,58 @@ class ColorEntry
{
public:
/** Specifies the weight to use when drawing text with this color. */
enum FontWeight
enum FontWeight
{
/** Always draw text in this color with a bold weight. */
Bold,
/** Always draw text in this color with a normal weight. */
Normal,
/**
* Use the current font weight set by the terminal application.
/**
* Use the current font weight set by the terminal application.
* This is the default behavior.
*/
UseCurrentFormat
};
/**
/**
* Constructs a new color palette entry.
*
* @param c The color value for this entry.
* @param tr Specifies that the color should be transparent when used as a background color.
* @param weight Specifies the font weight to use when drawing text with this color.
* @param weight Specifies the font weight to use when drawing text with this color.
*/
ColorEntry(QColor c, bool tr, FontWeight weight = UseCurrentFormat)
ColorEntry(QColor c, bool tr, FontWeight weight = UseCurrentFormat)
: color(c), transparent(tr), fontWeight(weight) {}
/**
* Constructs a new color palette entry with an undefined color, and
* with the transparent and bold flags set to false.
*/
ColorEntry() : transparent(false), fontWeight(UseCurrentFormat) {}
*/
ColorEntry() : transparent(false), fontWeight(UseCurrentFormat) {}
/**
* Sets the color, transparency and boldness of this color to those of @p rhs.
*/
void operator=(const ColorEntry& rhs)
{
color = rhs.color;
transparent = rhs.transparent;
fontWeight = rhs.fontWeight;
*/
void operator=(const ColorEntry& rhs)
{
color = rhs.color;
transparent = rhs.transparent;
fontWeight = rhs.fontWeight;
}
/** The color value of this entry for display. */
QColor color;
/**
* If true character backgrounds using this color should be transparent.
/**
* If true character backgrounds using this color should be transparent.
* This is not applicable when the color is used to render text.
*/
bool transparent;
/**
* Specifies the font weight to use when drawing text with this color.
* Specifies the font weight to use when drawing text with this color.
* This is not applicable when the color is used to draw a character's background.
*/
FontWeight fontWeight;
FontWeight fontWeight;
};
@ -151,15 +151,15 @@ class CharacterColor
public:
/** Constructs a new CharacterColor whoose color and color space are undefined. */
CharacterColor()
: _colorSpace(COLOR_SPACE_UNDEFINED),
_u(0),
_v(0),
_w(0)
CharacterColor()
: _colorSpace(COLOR_SPACE_UNDEFINED),
_u(0),
_v(0),
_w(0)
{}
/**
* Constructs a new CharacterColor using the specified @p colorSpace and with
/**
* Constructs a new CharacterColor using the specified @p colorSpace and with
* color value @p co
*
* The meaning of @p co depends on the @p colorSpace used.
@ -168,10 +168,10 @@ public:
*
* TODO : Add documentation about available color spaces.
*/
CharacterColor(quint8 colorSpace, int co)
: _colorSpace(colorSpace),
_u(0),
_v(0),
CharacterColor(quint8 colorSpace, int co)
: _colorSpace(colorSpace),
_u(0),
_v(0),
_w(0)
{
switch (colorSpace)
@ -183,7 +183,7 @@ public:
_u = co & 7;
_v = (co >> 3) & 1;
break;
case COLOR_SPACE_256:
case COLOR_SPACE_256:
_u = co & 255;
break;
case COLOR_SPACE_RGB:
@ -196,32 +196,32 @@ public:
}
}
/**
/**
* Returns true if this character color entry is valid.
*/
bool isValid()
bool isValid()
{
return _colorSpace != COLOR_SPACE_UNDEFINED;
}
/**
/**
* Toggles the value of this color between a normal system color and the corresponding intensive
* system color.
*
*
* This is only applicable if the color is using the COLOR_SPACE_DEFAULT or COLOR_SPACE_SYSTEM
* color spaces.
*/
void toggleIntensive();
/**
/**
* Returns the color within the specified color @p palette
*
* The @p palette is only used if this color is one of the 16 system colors, otherwise
* it is ignored.
*/
QColor color(const ColorEntry* palette) const;
/**
/**
* Compares two colors and returns true if they represent the same color value and
* use the same color space.
*/
@ -235,14 +235,14 @@ public:
private:
quint8 _colorSpace;
// bytes storing the character color
quint8 _u;
quint8 _v;
quint8 _w;
// bytes storing the character color
quint8 _u;
quint8 _v;
quint8 _w;
};
inline bool operator == (const CharacterColor& a, const CharacterColor& b)
{
{
return a._colorSpace == b._colorSpace &&
a._u == b._u &&
a._v == b._v &&
@ -263,7 +263,7 @@ inline const QColor color256(quint8 u, const ColorEntry* base)
if (u < 216) return QColor(((u/36)%6) ? (40*((u/36)%6)+55) : 0,
((u/ 6)%6) ? (40*((u/ 6)%6)+55) : 0,
((u/ 1)%6) ? (40*((u/ 1)%6)+55) : 0); u -= 216;
// 232..255: gray, leaving out black and white
int gray = u*10+8; return QColor(gray,gray,gray);
}

@ -164,15 +164,15 @@ void ColorScheme::setColorTableEntry(int index , const ColorEntry& entry)
{
Q_ASSERT( index >= 0 && index < TABLE_COLORS );
if ( !_table )
if ( !_table )
{
_table = new ColorEntry[TABLE_COLORS];
for (int i=0;i<TABLE_COLORS;i++)
_table[i] = defaultTable[i];
}
_table[index] = entry;
_table[index] = entry;
}
ColorEntry ColorScheme::colorEntry(int index , uint randomSeed) const
{
@ -183,19 +183,19 @@ ColorEntry ColorScheme::colorEntry(int index , uint randomSeed) const
ColorEntry entry = colorTable()[index];
if ( randomSeed != 0 &&
_randomTable != 0 &&
if ( randomSeed != 0 &&
_randomTable != 0 &&
!_randomTable[index].isNull() )
{
const RandomizationRange& range = _randomTable[index];
int hueDifference = range.hue ? (qrand() % range.hue) - range.hue/2 : 0;
int saturationDifference = range.saturation ? (qrand() % range.saturation) - range.saturation/2 : 0;
int valueDifference = range.value ? (qrand() % range.value) - range.value/2 : 0;
QColor& color = entry.color;
int newHue = qAbs( (color.hue() + hueDifference) % MAX_HUE );
int newValue = qMin( qAbs(color.value() + valueDifference) , 255 );
int newSaturation = qMin( qAbs(color.saturation() + saturationDifference) , 255 );
@ -216,13 +216,13 @@ bool ColorScheme::randomizedBackgroundColor() const
}
void ColorScheme::setRandomizedBackgroundColor(bool randomize)
{
// the hue of the background colour is allowed to be randomly
// the hue of the background colour is allowed to be randomly
// adjusted as much as possible.
//
// the value and saturation are left alone to maintain read-ability
if ( randomize )
{
setRandomizationRange( 1 /* background color index */ , MAX_HUE , 255 , 0 );
setRandomizationRange( 1 /* background color index */ , MAX_HUE , 255 , 0 );
}
else
{
@ -305,7 +305,7 @@ void ColorScheme::write(KConfig& config) const
configGroup.writeEntry("Description",_description);
configGroup.writeEntry("Opacity",_opacity);
for (int i=0 ; i < TABLE_COLORS ; i++)
{
RandomizationRange random = _randomTable != 0 ? _randomTable[i] : RandomizationRange();
@ -314,13 +314,13 @@ void ColorScheme::write(KConfig& config) const
}
#endif
QString ColorScheme::colorNameForIndex(int index)
QString ColorScheme::colorNameForIndex(int index)
{
Q_ASSERT( index >= 0 && index < TABLE_COLORS );
return QString(colorNames[index]);
}
QString ColorScheme::translatedColorNameForIndex(int index)
QString ColorScheme::translatedColorNameForIndex(int index)
{
Q_ASSERT( index >= 0 && index < TABLE_COLORS );
@ -330,7 +330,7 @@ QString ColorScheme::translatedColorNameForIndex(int index)
void ColorScheme::readColorEntry(QSettings * s , int index)
{
s->beginGroup(colorNameForIndex(index));
ColorEntry entry;
QStringList rgbList = s->value("Color", QStringList()).toStringList();
@ -343,7 +343,7 @@ void ColorScheme::readColorEntry(QSettings * s , int index)
g = rgbList[1].toInt();
b = rgbList[2].toInt();
entry.color = QColor(r, g, b);
entry.transparent = s->value("Transparent",false).toBool();
// Deprecated key from KDE 4.0 which set 'Bold' to true to force
@ -362,7 +362,7 @@ void ColorScheme::readColorEntry(QSettings * s , int index)
setColorTableEntry( index , entry );
if ( hue != 0 || value != 0 || saturation != 0 )
setRandomizationRange( index , hue , saturation , value );
setRandomizationRange( index , hue , saturation , value );
s->endGroup();
}
@ -379,8 +379,8 @@ void ColorScheme::writeColorEntry(KConfig& config , const QString& colorName, co
configGroup.writeEntry("Bold",entry.fontWeight == ColorEntry::Bold);
}
// record randomization if this color has randomization or
// if one of the keys already exists
// record randomization if this color has randomization or
// if one of the keys already exists
if ( !random.isNull() || configGroup.hasKey("MaxRandomHue") )
{
configGroup.writeEntry("MaxRandomHue",(int)random.hue);
@ -390,28 +390,28 @@ void ColorScheme::writeColorEntry(KConfig& config , const QString& colorName, co
}
#endif
//
//
// Work In Progress - A color scheme for use on KDE setups for users
// with visual disabilities which means that they may have trouble
// reading text with the supplied color schemes.
//
// This color scheme uses only the 'safe' colors defined by the
// KColorScheme class.
// KColorScheme class.
//
// A complication this introduces is that each color provided by
// A complication this introduces is that each color provided by
// KColorScheme is defined as a 'background' or 'foreground' color.
// Only foreground colors are allowed to be used to render text and
// Only foreground colors are allowed to be used to render text and
// only background colors are allowed to be used for backgrounds.
//
// The ColorEntry and TerminalDisplay classes do not currently
// support this restriction.
// support this restriction.
//
// Requirements:
// - A color scheme which uses only colors from the KColorScheme class
// - Ability to restrict which colors the TerminalDisplay widget
// - Ability to restrict which colors the TerminalDisplay widget
// uses as foreground and background color
// - Make use of KGlobalSettings::allowDefaultBackgroundImages() as
// a hint to determine whether this accessible color scheme should
// a hint to determine whether this accessible color scheme should
// be used by default.
//
//
@ -444,13 +444,13 @@ AccessibleColorScheme::AccessibleColorScheme()
colorScheme.foreground( colorScheme.NeutralText )
};
for ( int i = 0 ; i < TABLE_COLORS ; i++ )
for ( int i = 0 ; i < TABLE_COLORS ; i++ )
{
ColorEntry entry;
entry.color = colors[ i % ColorRoleCount ].color();
setColorTableEntry( i , entry );
}
setColorTableEntry( i , entry );
}
#endif
}
@ -458,7 +458,7 @@ KDE3ColorSchemeReader::KDE3ColorSchemeReader( QIODevice* device ) :
_device(device)
{
}
ColorScheme* KDE3ColorSchemeReader::read()
ColorScheme* KDE3ColorSchemeReader::read()
{
Q_ASSERT( _device->openMode() == QIODevice::ReadOnly ||
_device->openMode() == QIODevice::ReadWrite );
@ -489,7 +489,7 @@ ColorScheme* KDE3ColorSchemeReader::read()
{
qDebug() << "KDE 3 color scheme contains an unsupported feature, '" <<
line << "'";
}
}
}
return scheme;
@ -502,7 +502,7 @@ bool KDE3ColorSchemeReader::readColorLine(const QString& line,ColorScheme* schem
return false;
if (list.first() != "color")
return false;
int index = list[1].toInt();
int red = list[2].toInt();
int green = list[3].toInt();
@ -613,7 +613,7 @@ bool ColorSchemeManager::loadKDE3ColorScheme(const QString& filePath)
delete scheme;
return false;
}
QFileInfo info(filePath);
if ( !_colorSchemes.contains(info.baseName()) )
@ -628,7 +628,7 @@ bool ColorSchemeManager::loadKDE3ColorScheme(const QString& filePath)
return true;
}
#if 0
void ColorSchemeManager::addColorScheme(ColorScheme* scheme)
void ColorSchemeManager::addColorScheme(ColorScheme* scheme)
{
_colorSchemes.insert(scheme->name(),scheme);
@ -658,17 +658,17 @@ bool ColorSchemeManager::loadColorScheme(const QString& filePath)
QFileInfo info(filePath);
const QString& schemeName = info.baseName();
ColorScheme* scheme = new ColorScheme();
scheme->setName(schemeName);
scheme->read(filePath);
if (scheme->name().isEmpty())
if (scheme->name().isEmpty())
{
qDebug() << "Color scheme in" << filePath << "does not have a valid name and was not loaded.";
delete scheme;
return false;
}
}
if ( !_colorSchemes.contains(schemeName) )
{
@ -678,11 +678,11 @@ bool ColorSchemeManager::loadColorScheme(const QString& filePath)
{
qDebug() << "color scheme with name" << schemeName << "has already been" <<
"found, ignoring.";
delete scheme;
}
return true;
return true;
}
QList<QString> ColorSchemeManager::listKDE3ColorSchemes()
{
@ -691,7 +691,7 @@ QList<QString> ColorSchemeManager::listKDE3ColorSchemes()
QStringList filters;
filters << "*.schema";
dir.setNameFilters(filters);
QStringList list = dir.entryList(filters);
QStringList list = dir.entryList(filters);
QStringList ret;
foreach(QString i, list)
ret << dname + "/" + i;
@ -726,7 +726,7 @@ bool ColorSchemeManager::deleteColorScheme(const QString& name)
{
Q_ASSERT( _colorSchemes.contains(name) );
// lookup the path and delete
// lookup the path and delete
QString path = findColorSchemePath(name);
if ( QFile::remove(path) )
{
@ -744,14 +744,14 @@ QString ColorSchemeManager::findColorSchemePath(const QString& name) const
// QString path = KStandardDirs::locate("data","konsole/"+name+".colorscheme");
QString path(get_color_schemes_dir() + "/"+ name + ".colorscheme");
if ( !path.isEmpty() )
return path;
return path;
//path = KStandardDirs::locate("data","konsole/"+name+".schema");
path = get_color_schemes_dir() + "/"+ name + ".schema";
return path;
}
const ColorScheme* ColorSchemeManager::findColorScheme(const QString& name)
const ColorScheme* ColorSchemeManager::findColorScheme(const QString& name)
{
if ( name.isEmpty() )
return defaultColorScheme();
@ -761,12 +761,12 @@ const ColorScheme* ColorSchemeManager::findColorScheme(const QString& name)
else
{
// look for this color scheme
QString path = findColorSchemePath(name);
QString path = findColorSchemePath(name);
if ( !path.isEmpty() && loadColorScheme(path) )
{
return findColorScheme(name);
}
else
return findColorScheme(name);
}
else
{
if (!path.isEmpty() && loadKDE3ColorScheme(path))
return findColorScheme(name);
@ -774,7 +774,7 @@ const ColorScheme* ColorSchemeManager::findColorScheme(const QString& name)
qDebug() << "Could not find color scheme - " << name;
return 0;
return 0;
}
}

@ -40,16 +40,16 @@ namespace Konsole
{
/**
* Represents a color scheme for a terminal display.
* Represents a color scheme for a terminal display.
*
* The color scheme includes the palette of colors used to draw the text and character backgrounds
* in the display and the opacity level of the display background.
* in the display and the opacity level of the display background.
*/
class ColorScheme
{
public:
/**
* Constructs a new color scheme which is initialised to the default color set
/**
* Constructs a new color scheme which is initialised to the default color set
* for Konsole.
*/
ColorScheme();
@ -78,7 +78,7 @@ public:
/** Sets a single entry within the color palette. */
void setColorTableEntry(int index , const ColorEntry& entry);
/**
/**
* Copies the color entries which form the palette for this color scheme
* into @p table. @p table should be an array with TABLE_COLORS entries.
*
@ -88,7 +88,7 @@ public:
* palette to be randomized. The seed is used to pick the random color.
*/
void getColorTable(ColorEntry* table, uint randomSeed = 0) const;
/**
* Retrieves a single color entry from the table.
*
@ -96,28 +96,28 @@ public:
*/
ColorEntry colorEntry(int index , uint randomSeed = 0) const;
/**
* Convenience method. Returns the
* foreground color for this scheme,
* this is the primary color used to draw the
/**
* Convenience method. Returns the
* foreground color for this scheme,
* this is the primary color used to draw the
* text in this scheme.
*/
QColor foregroundColor() const;
/**
* Convenience method. Returns the background color for
* this scheme, this is the primary color used to
* Convenience method. Returns the background color for
* this scheme, this is the primary color used to
* draw the terminal background in this scheme.
*/
QColor backgroundColor() const;
/**
/**
* Returns true if this color scheme has a dark background.
* The background color is said to be dark if it has a value of less than 127
* in the HSV color space.
*/
bool hasDarkBackground() const;
/**
/**
* Sets the opacity level of the display background. @p opacity ranges
* between 0 (completely transparent background) and 1 (completely
* opaque background).
@ -127,18 +127,18 @@ public:
* TODO: More documentation
*/
void setOpacity(qreal opacity);
/**
/**
* Returns the opacity level for this color scheme, see setOpacity()
* TODO: More documentation
*/
qreal opacity() const;
/**
/**
* Enables randomization of the background color. This will cause
* the palette returned by getColorTable() and colorEntry() to
* be adjusted depending on the value of the random seed argument
* to them.
*/
*/
void setRandomizedBackgroundColor(bool randomize);
/** Returns true if the background color is randomized. */
@ -154,7 +154,7 @@ private:
public:
RandomizationRange() : hue(0) , saturation(0) , value(0) {}
bool isNull() const
bool isNull() const
{
return ( hue == 0 && saturation == 0 && value == 0 );
}
@ -172,14 +172,14 @@ private:
// implemented upstream - user apps
// reads a single colour entry from a KConfig source
// and sets the palette entry at 'index' to the entry read.
void readColorEntry(KConfig& config , int index);
void readColorEntry(KConfig& config , int index);
// writes a single colour entry to a KConfig source
void writeColorEntry(KConfig& config , const QString& colorName, const ColorEntry& entry,const RandomizationRange& range) const;
#endif
void readColorEntry(QSettings *s, int index);
// sets the amount of randomization allowed for a particular color
// in the palette. creates the randomization table if
// sets the amount of randomization allowed for a particular color
// in the palette. creates the randomization table if
// it does not already exist
void setRandomizationRange( int index , quint16 hue , quint8 saturation , quint8 value );
@ -202,7 +202,7 @@ private:
static const ColorEntry defaultTable[]; // table of default color entries
};
/**
/**
* A color scheme which uses colors from the standard KDE color palette.
*
* This is designed primarily for the benefit of users who are using specially
@ -228,13 +228,13 @@ public:
class KDE3ColorSchemeReader
{
public:
/**
* Constructs a new reader which reads from the specified device.
* The device should be open in read-only mode.
/**
* Constructs a new reader which reads from the specified device.
* The device should be open in read-only mode.
*/
KDE3ColorSchemeReader( QIODevice* device );
/**
/**
* Reads and parses the contents of the .schema file from the input
* device and returns the ColorScheme defined within it.
*
@ -277,7 +277,7 @@ public:
* Returns the default color scheme for Konsole
*/
const ColorScheme* defaultColorScheme() const;
/**
* Returns the color scheme with the given name or 0 if no
* scheme with that name exists. If @p name is empty, the
@ -298,18 +298,18 @@ public:
void addColorScheme(ColorScheme* scheme);
#endif
/**
* Deletes a color scheme. Returns true on successful deletion or false otherwise.
* Deletes a color scheme. Returns true on successful deletion or false otherwise.
*/
bool deleteColorScheme(const QString& name);
/**
* Returns a list of the all the available color schemes.
/**
* Returns a list of the all the available color schemes.
* This may be slow when first called because all of the color
* scheme resources on disk must be located, read and parsed.
*
* Subsequent calls will be inexpensive.
* Subsequent calls will be inexpensive.
*/
QList<const ColorScheme*> allColorSchemes();
QList<const ColorScheme*> allColorSchemes();
/** Returns the global color scheme manager instance. */
static ColorSchemeManager* instance();

@ -1,5 +1,5 @@
/*
Copyright 2007-2008 Robert Knight <robertknight@gmail.com>
Copyright 2007-2008 Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
Copyright 1996 by Matthias Ettrich <ettrich@kde.org>
@ -64,9 +64,9 @@ Emulation::Emulation() :
QObject::connect(&_bulkTimer1, SIGNAL(timeout()), this, SLOT(showBulk()) );
QObject::connect(&_bulkTimer2, SIGNAL(timeout()), this, SLOT(showBulk()) );
// listen for mouse status changes
connect( this , SIGNAL(programUsesMouseChanged(bool)) ,
connect( this , SIGNAL(programUsesMouseChanged(bool)) ,
SLOT(usesMouseChanged(bool)) );
}
@ -112,7 +112,7 @@ void Emulation::setScreen(int n)
{
Screen *old = _currentScreen;
_currentScreen = _screen[n & 1];
if (_currentScreen != old)
if (_currentScreen != old)
{
// tell all windows onto this emulation to switch to the newly active screen
foreach(ScreenWindow* window,_windows)
@ -191,7 +191,7 @@ void Emulation::receiveChar(int c)
void Emulation::sendKeyEvent( QKeyEvent* ev )
{
emit stateSet(NOTIFYNORMAL);
if (!ev->text().isEmpty())
{ // A block of text
// Note that the text is proper unicode.
@ -220,7 +220,7 @@ void Emulation::receiveData(const char* text, int length)
emit stateSet(NOTIFYACTIVITY);
bufferedUpdate();
QString unicodeText = _decoder->toUnicode(text,length);
//send characters to terminal emulator
@ -248,13 +248,13 @@ void Emulation::receiveData(const char* text, int length)
//
//There is something about stopping the _decoder if "we get a control code halfway a multi-byte sequence" (see below)
//which hasn't been ported into the newer function (above). Hopefully someone who understands this better
//can find an alternative way of handling the check.
//can find an alternative way of handling the check.
/*void Emulation::onRcvBlock(const char *s, int len)
{
emit notifySessionState(NOTIFYACTIVITY);
bufferedUpdate();
for (int i = 0; i < len; i++)
{
@ -289,9 +289,9 @@ void Emulation::receiveData(const char* text, int length)
}
}*/
void Emulation::writeToStream( TerminalCharacterDecoder* _decoder ,
void Emulation::writeToStream( TerminalCharacterDecoder* _decoder ,
int startLine ,
int endLine)
int endLine)
{
_currentScreen->writeLinesToStream(_decoder,startLine,endLine);
}
@ -334,7 +334,7 @@ char Emulation::eraseChar() const
void Emulation::setImageSize(int lines, int columns)
{
if ((lines < 1) || (columns < 1))
if ((lines < 1) || (columns < 1))
return;
QSize screenSize[2] = { QSize(_screen[0]->getColumns(),
@ -344,7 +344,7 @@ void Emulation::setImageSize(int lines, int columns)
QSize newSize(columns,lines);
if (newSize == screenSize[0] && newSize == screenSize[1])
return;
return;
_screen[0]->resizeImage(lines,columns);
_screen[1]->resizeImage(lines,columns);
@ -372,17 +372,17 @@ bool ExtendedCharTable::extendedCharMatch(ushort hash , ushort* unicodePoints ,
{
ushort* entry = extendedCharTable[hash];
// compare given length with stored sequence length ( given as the first ushort in the
// stored buffer )
if ( entry == 0 || entry[0] != length )
// compare given length with stored sequence length ( given as the first ushort in the
// stored buffer )
if ( entry == 0 || entry[0] != length )
return false;
// if the lengths match, each character must be checked. the stored buffer starts at
// entry[1]
for ( int i = 0 ; i < length ; i++ )
{
if ( entry[i+1] != unicodePoints[i] )
return false;
}
return false;
}
return true;
}
ushort ExtendedCharTable::createExtendedChar(ushort* unicodePoints , ushort length)
@ -395,7 +395,7 @@ ushort ExtendedCharTable::createExtendedChar(ushort* unicodePoints , ushort leng
{
if ( extendedCharMatch(hash,unicodePoints,length) )
{
// this sequence already has an entry in the table,
// this sequence already has an entry in the table,
// return its hash
return hash;
}
@ -405,16 +405,16 @@ ushort ExtendedCharTable::createExtendedChar(ushort* unicodePoints , ushort leng
// points then try next hash
hash++;
}
}
}
// add the new sequence to the table and
// return that index
ushort* buffer = new ushort[length+1];
buffer[0] = length;
for ( int i = 0 ; i < length ; i++ )
buffer[i+1] = unicodePoints[i];
buffer[i+1] = unicodePoints[i];
extendedCharTable.insert(hash,buffer);
return hash;

@ -1,6 +1,6 @@
/*
This file is part of Konsole, an X terminal.
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -26,7 +26,7 @@
// System
#include <stdio.h>
// Qt
// Qt
#include <QKeyEvent>
//#include <QPointer>
#include <QTextCodec>
@ -46,56 +46,56 @@ class Screen;
class ScreenWindow;
class TerminalCharacterDecoder;
/**
* This enum describes the available states which
/**
* This enum describes the available states which
* the terminal emulation may be set to.
*
* These are the values used by Emulation::stateChanged()
* These are the values used by Emulation::stateChanged()
*/
enum
{
enum
{
/** The emulation is currently receiving user input. */
NOTIFYNORMAL=0,
/**
NOTIFYNORMAL=0,
/**
* The terminal program has triggered a bell event
* to get the user's attention.
*/
NOTIFYBELL=1,
/**
* The emulation is currently receiving data from its
NOTIFYBELL=1,
/**
* The emulation is currently receiving data from its
* terminal input.
*/
NOTIFYACTIVITY=2,
// unused here?
NOTIFYSILENCE=3
// unused here?
NOTIFYSILENCE=3
};
/**
* Base class for terminal emulation back-ends.
*
* The back-end is responsible for decoding an incoming character stream and
* The back-end is responsible for decoding an incoming character stream and
* producing an output image of characters.
*
* When input from the terminal is received, the receiveData() slot should be called with
* the data which has arrived. The emulation will process the data and update the
* the data which has arrived. The emulation will process the data and update the
* screen image accordingly. The codec used to decode the incoming character stream
* into the unicode characters used internally can be specified using setCodec()
* into the unicode characters used internally can be specified using setCodec()
*
* The size of the screen image can be specified by calling setImageSize() with the
* The size of the screen image can be specified by calling setImageSize() with the
* desired number of lines and columns. When new lines are added, old content
* is moved into a history store, which can be set by calling setHistory().
* is moved into a history store, which can be set by calling setHistory().
*
* The screen image can be accessed by creating a ScreenWindow onto this emulation
* by calling createWindow(). Screen windows provide access to a section of the
* output. Each screen window covers the same number of lines and columns as the
* The screen image can be accessed by creating a ScreenWindow onto this emulation
* by calling createWindow(). Screen windows provide access to a section of the
* output. Each screen window covers the same number of lines and columns as the
* image size returned by imageSize(). The screen window can be moved up and down
* and provides transparent access to both the current on-screen image and the
* and provides transparent access to both the current on-screen image and the
* previous output. The screen windows emit an outputChanged signal
* when the section of the image they are looking at changes.
* Graphical views can then render the contents of a screen window, listening for notifications
* of output changes from the screen window which they are associated with and updating
* accordingly.
* of output changes from the screen window which they are associated with and updating
* accordingly.
*
* The emulation also is also responsible for converting input from the connected views such
* as keypresses and mouse activity into a character string which can be sent
@ -108,9 +108,9 @@ enum
* character sequences. The name of the key bindings set used can be specified using
* setKeyBindings()
*
* The emulation maintains certain state information which changes depending on the
* input received. The emulation can be reset back to its starting state by calling
* reset().
* The emulation maintains certain state information which changes depending on the
* input received. The emulation can be reset back to its starting state by calling
* reset().
*
* The emulation also maintains an activity state, which specifies whether
* terminal is currently active ( when data is received ), normal
@ -121,12 +121,12 @@ enum
* a 'bell' event in different ways.
*/
class KONSOLEPRIVATE_EXPORT Emulation : public QObject
{
{
Q_OBJECT
public:
/** Constructs a new terminal emulation */
/** Constructs a new terminal emulation */
Emulation();
~Emulation();
@ -142,15 +142,15 @@ public:
/**
* Returns the total number of lines, including those stored in the history.
*/
*/
int lineCount() const;
/**
/**
* Sets the history store used by this emulation. When new lines
* are added to the output, older lines at the top of the screen are transferred to a history
* store.
* store.
*
* The number of lines which are kept and the storage location depend on the
* The number of lines which are kept and the storage location depend on the
* type of store.
*/
void setHistory(const HistoryType&);
@ -159,49 +159,49 @@ public:
/** Clears the history scroll. */
void clearHistory();
/**
* Copies the output history from @p startLine to @p endLine
/**
* Copies the output history from @p startLine to @p endLine
* into @p stream, using @p decoder to convert the terminal
* characters into text.
* characters into text.
*
* @param decoder A decoder which converts lines of terminal characters with
* @param decoder A decoder which converts lines of terminal characters with
* appearance attributes into output text. PlainTextDecoder is the most commonly
* used decoder.
* @param startLine Index of first line to copy
* @param endLine Index of last line to copy
*/
virtual void writeToStream(TerminalCharacterDecoder* decoder,int startLine,int endLine);
/** Returns the codec used to decode incoming characters. See setCodec() */
const QTextCodec* codec() const { return _codec; }
/** Sets the codec used to decode incoming characters. */
void setCodec(const QTextCodec*);
/**
* Convenience method.
/**
* Convenience method.
* Returns true if the current codec used to decode incoming
* characters is UTF-8
*/
bool utf8() const
{ Q_ASSERT(_codec); return _codec->mibEnum() == 106; }
/** TODO Document me */
virtual char eraseChar() const;
/**
/**
* Sets the key bindings used to key events
* ( received through sendKeyEvent() ) into character
* streams to send to the terminal.
*/
void setKeyBindings(const QString& name);
/**
/**
* Returns the name of the emulation's current key bindings.
* See setKeyBindings()
*/
QString keyBindings() const;
/**
/**
* Copies the current image into the history and clears the screen.
*/
virtual void clearEntireScreen() =0;
@ -209,7 +209,7 @@ public:
/** Resets the state of the terminal. */
virtual void reset() =0;
/**
/**
* Returns true if the active terminal program wants
* mouse input events.
*
@ -218,42 +218,42 @@ public:
*/
bool programUsesMouse() const;
public slots:
public slots:
/** Change the size of the emulation's image */
virtual void setImageSize(int lines, int columns);
/**
/**
* Interprets a sequence of characters and sends the result to the terminal.
* This is equivalent to calling sendKeyEvent() for each character in @p text in succession.
*/
virtual void sendText(const QString& text) = 0;
/**
/**
* Interprets a key press event and emits the sendData() signal with
* the resulting character stream.
* the resulting character stream.
*/
virtual void sendKeyEvent(QKeyEvent*);
/**
/**
* Converts information about a mouse event into an xterm-compatible escape
* sequence and emits the character sequence via sendData()
*/
virtual void sendMouseEvent(int buttons, int column, int line, int eventType);
/**
* Sends a string of characters to the foreground terminal process.
* Sends a string of characters to the foreground terminal process.
*
* @param string The characters to send.
* @param string The characters to send.
* @param length Length of @p string or if set to a negative value, @p string will
* be treated as a null-terminated string and its length will be determined automatically.
*/
virtual void sendString(const char* string, int length = -1) = 0;
/**
/**
* Processes an incoming stream of characters. receiveData() decodes the incoming
* character buffer using the current codec(), and then calls receiveChar() for
* each unicode character in the resulting buffer.
* each unicode character in the resulting buffer.
*
* receiveData() also starts a timer which causes the outputChanged() signal
* to be emitted when it expires. The timer allows multiple updates in quick
@ -266,8 +266,8 @@ public slots:
signals:
/**
* Emitted when a buffer of data is ready to send to the
/**
* Emitted when a buffer of data is ready to send to the
* standard input of the terminal.
*
* @param data The buffer of data ready to be sent
@ -275,20 +275,20 @@ signals:
*/
void sendData(const char* data,int len);
/**
/**
* Requests that sending of input to the emulation
* from the terminal process be suspended or resumed.
*
* @param suspend If true, requests that sending of
* input from the terminal process' stdout be
* @param suspend If true, requests that sending of
* input from the terminal process' stdout be
* suspended. Otherwise requests that sending of
* input be resumed.
* input be resumed.
*/
void lockPtyRequest(bool suspend);
/**
* Requests that the pty used by the terminal process
* be set to UTF 8 mode.
* be set to UTF 8 mode.
*
* TODO: More documentation
*/
@ -316,7 +316,7 @@ signals:
*/
void changeTabTextColorRequest(int color);
/**
/**
* This is emitted when the program running in the shell indicates whether or
* not it is interested in mouse events.
*
@ -325,7 +325,7 @@ signals:
*/
void programUsesMouseChanged(bool usesMouse);
/**
/**
* Emitted when the contents of the screen image change.
* The emulation buffers the updates from successive image changes,
* and only emits outputChanged() at sensible intervals when
@ -335,14 +335,14 @@ signals:
* created with createWindow() to listen for this signal.
*
* ScreenWindow objects created using createWindow() will emit their
* own outputChanged() signal in response to this signal.
* own outputChanged() signal in response to this signal.
*/
void outputChanged();
/**
* Emitted when the program running in the terminal wishes to update the
* Emitted when the program running in the terminal wishes to update the
* session's title. This also allows terminal programs to customize other
* aspects of the terminal emulation display.
* aspects of the terminal emulation display.
*
* This signal is emitted when the escape sequence "\033]ARG;VALUE\007"
* is received in the input string, where ARG is a number specifying what
@ -350,7 +350,7 @@ signals:
*
* TODO: The name of this method is not very accurate since this method
* is used to perform a whole range of tasks besides just setting
* the user-title of the session.
* the user-title of the session.
*
* @param title Specifies what to change.
* <ul>
@ -359,16 +359,16 @@ signals:
* <li>2 - Set session title to @p newTitle</li>
* <li>11 - Set the session's default background color to @p newTitle,
* where @p newTitle can be an HTML-style string ("#RRGGBB") or a named
* color (eg 'red', 'blue').
* color (eg 'red', 'blue').
* See http://doc.trolltech.com/4.2/qcolor.html#setNamedColor for more
* details.
* </li>
* <li>31 - Supposedly treats @p newTitle as a URL and opens it (NOT IMPLEMENTED)</li>
* <li>32 - Sets the icon associated with the session. @p newTitle is the name
* <li>32 - Sets the icon associated with the session. @p newTitle is the name
* of the icon to use, which can be the name of any icon in the current KDE icon
* theme (eg: 'konsole', 'kate', 'folder_home')</li>
* </ul>
* @param newTitle Specifies the new title
* @param newTitle Specifies the new title
*/
void titleChanged(int title,const QString& newTitle);
@ -379,9 +379,9 @@ signals:
*/
void imageSizeChanged(int lineCount , int columnCount);
/**
/**
* Emitted when the terminal program requests to change various properties
* of the terminal display.
* of the terminal display.
*
* A profile change command occurs when a special escape sequence, followed
* by a string containing a series of name and value pairs is received.
@ -392,7 +392,7 @@ signals:
*/
void profileChangeCommandReceived(const QString& text);
/**
/**
* Emitted when a flow control key combination ( Ctrl+S or Ctrl+Q ) is pressed.
* @param suspendKeyPressed True if Ctrl+S was pressed to suspend output or Ctrl+Q to
* resume output.
@ -402,21 +402,21 @@ signals:
protected:
virtual void setMode(int mode) = 0;
virtual void resetMode(int mode) = 0;
/**
/**
* Processes an incoming character. See receiveData()
* @p ch A unicode character code.
* @p ch A unicode character code.
*/
virtual void receiveChar(int ch);
/**
/**
* Sets the active screen. The terminal has two screens, primary and alternate.
* The primary screen is used by default. When certain interactive programs such
* as Vim are run, they trigger a switch to the alternate screen.
*
* @param index 0 to switch to the primary screen, or 1 to switch to the alternate screen
*/
void setScreen(int index);
void setScreen(int index);
enum EmulationCodec
{
@ -427,35 +427,35 @@ protected:
QList<ScreenWindow*> _windows;
Screen* _currentScreen; // pointer to the screen which is currently active,
Screen* _currentScreen; // pointer to the screen which is currently active,
// this is one of the elements in the screen[] array
Screen* _screen[2]; // 0 = primary screen ( used by most programs, including the shell
// scrollbars are enabled in this mode )
// 1 = alternate ( used by vi , emacs etc.
// scrollbars are not enabled in this mode )
//decodes an incoming C-style character stream into a unicode QString using
//decodes an incoming C-style character stream into a unicode QString using
//the current text codec. (this allows for rendering of non-ASCII characters in text files etc.)
const QTextCodec* _codec;
QTextDecoder* _decoder;
const KeyboardTranslator* _keyTranslator; // the keyboard layout
protected slots:
/**
/**
* Schedules an update of attached views.
* Repeated calls to bufferedUpdate() in close succession will result in only a single update,
* much like the Qt buffered update of widgets.
* much like the Qt buffered update of widgets.
*/
void bufferedUpdate();
private slots:
private slots:
// triggered by timer, causes the emulation to send an updated screen image to each
// view
void showBulk();
void showBulk();
void usesMouseChanged(bool usesMouse);
@ -463,7 +463,7 @@ private:
bool _usesMouse;
QTimer _bulkTimer1;
QTimer _bulkTimer2;
};
}

@ -47,7 +47,7 @@ using namespace Konsole;
FilterChain::~FilterChain()
{
QMutableListIterator<Filter*> iter(*this);
while ( iter.hasNext() )
{
Filter* filter = iter.next();
@ -141,7 +141,7 @@ void TerminalImageFilterChain::setImage(const Character* const image , int lines
PlainTextDecoder decoder;
decoder.setTrailingWhitespace(false);
// setup new shared buffers for the filters to process on
QString* newBuffer = new QString();
QList<int>* newLinePositions = new QList<int>();
@ -167,7 +167,7 @@ void TerminalImageFilterChain::setImage(const Character* const image , int lines
// being treated as part of a link that occurs at the start of the next line
//
// the downside is that links which are spread over more than one line are not
// highlighted.
// highlighted.
//
// TODO - Use the "line wrapped" attribute associated with lines in a
// terminal image to avoid adding this imaginary character for wrapped
@ -219,7 +219,7 @@ void Filter::getLineColumn(int position , int& startLine , int& startColumn)
else
nextLine = _linePositions->value(i+1);
if ( _linePositions->value(i) <= position && position < nextLine )
if ( _linePositions->value(i) <= position && position < nextLine )
{
startLine = i;
startColumn = string_width(buffer()->mid(_linePositions->value(i),position - _linePositions->value(i)));
@ -227,7 +227,7 @@ void Filter::getLineColumn(int position , int& startLine , int& startColumn)
}
}
}
/*void Filter::addLine(const QString& text)
{
@ -249,7 +249,7 @@ void Filter::addHotSpot(HotSpot* spot)
for (int line = spot->startLine() ; line <= spot->endLine() ; line++)
{
_hotspots.insert(line,spot);
}
}
}
QList<Filter::HotSpot*> Filter::hotSpots() const
{
@ -267,12 +267,12 @@ Filter::HotSpot* Filter::hotSpotAt(int line , int column) const
while (spotIter.hasNext())
{
HotSpot* spot = spotIter.next();
if ( spot->startLine() == line && spot->startColumn() > column )
continue;
if ( spot->endLine() == line && spot->endColumn() < column )
continue;
return spot;
}
@ -343,7 +343,7 @@ QStringList RegExpFilter::HotSpot::capturedTexts() const
return _capturedTexts;
}
void RegExpFilter::setRegExp(const QRegExp& regExp)
void RegExpFilter::setRegExp(const QRegExp& regExp)
{
_searchText = regExp;
}
@ -386,14 +386,14 @@ void RegExpFilter::process()
endLine,endColumn);
spot->setCapturedTexts(_searchText.capturedTexts());
addHotSpot( spot );
addHotSpot( spot );
pos += _searchText.matchedLength();
// if matchedLength == 0, the program will get stuck in an infinite loop
if ( _searchText.matchedLength() == 0 )
pos = -1;
}
}
}
}
RegExpFilter::HotSpot* RegExpFilter::newHotSpot(int startLine,int startColumn,
@ -425,16 +425,16 @@ QString UrlFilter::HotSpot::tooltip() const
const UrlType kind = urlType();
if ( kind == StandardUrl )
return QString();
return QString();
else if ( kind == Email )
return QString();
return QString();
else
return QString();
}
UrlFilter::HotSpot::UrlType UrlFilter::HotSpot::urlType() const
{
QString url = capturedTexts().first();
if ( FullUrlRegExp.exactMatch(url) )
return StandardUrl;
else if ( EmailAddressRegExp.exactMatch(url) )
@ -465,23 +465,23 @@ void UrlFilter::HotSpot::activate(const QString& actionName)
{
url.prepend("http://");
}
}
}
else if ( kind == Email )
{
url.prepend("mailto:");
}
_urlObject->emitActivated(url);
}
}
// Note: Altering these regular expressions can have a major effect on the performance of the filters
// Note: Altering these regular expressions can have a major effect on the performance of the filters
// used for finding URLs in the text, especially if they are very general and could match very long
// pieces of text.
// Please be careful when altering them.
//regexp matches:
// full url:
// full url:
// protocolname:// or www. followed by anything other than whitespaces, <, >, ' or ", and ends before whitespaces, <, >, ', ", ], !, comma and dot
const QRegExp UrlFilter::FullUrlRegExp("(www\\.(?!\\.)|[a-z][a-z0-9+.-]*://)[^\\s<>'\"]+[^!,\\.\\s<>'\"\\]]");
// email address:
@ -551,7 +551,7 @@ QList<QAction*> UrlFilter::HotSpot::actions()
list << openAction;
list << copyAction;
return list;
return list;
}
//#include "Filter.moc"

@ -46,7 +46,7 @@ class Character;
* activate() method should be called. Depending on the type of hotspot this will trigger a suitable response.
*
* For example, if a hotspot represents a URL then a suitable action would be opening that URL in a web browser.
* Hotspots may have more than one action, in which case the list of actions can be obtained using the
* Hotspots may have more than one action, in which case the list of actions can be obtained using the
* actions() method.
*
* Different subclasses of filter will return different types of hotspot.
@ -66,13 +66,13 @@ public:
* activate() method should be called. Depending on the type of hotspot this will trigger a suitable response.
*
* For example, if a hotspot represents a URL then a suitable action would be opening that URL in a web browser.
* Hotspots may have more than one action, in which case the list of actions can be obtained using the
* actions() method. These actions may then be displayed in a popup menu or toolbar for example.
* Hotspots may have more than one action, in which case the list of actions can be obtained using the
* actions() method. These actions may then be displayed in a popup menu or toolbar for example.
*/
class HotSpot
{
public:
/**
/**
* Constructs a new hotspot which covers the area from (@p startLine,@p startColumn) to (@p endLine,@p endColumn)
* in a block of text.
*/
@ -87,7 +87,7 @@ public:
Link,
// this hotspot represents a marker
Marker
};
};
/** Returns the line when the hotspot area starts */
int startLine() const;
@ -97,31 +97,31 @@ public:
int startColumn() const;
/** Returns the column on endLine() where the hotspot area ends */
int endColumn() const;
/**
/**
* Returns the type of the hotspot. This is usually used as a hint for views on how to represent
* the hotspot graphically. eg. Link hotspots are typically underlined when the user mouses over them
*/
Type type() const;
/**
* Causes the an action associated with a hotspot to be triggered.
/**
* Causes the an action associated with a hotspot to be triggered.
*
* @param action The action to trigger. This is
* typically empty ( in which case the default action should be performed ) or
* one of the object names from the actions() list. In which case the associated
* action should be performed.
* action should be performed.
*/
virtual void activate(const QString& action = QString()) = 0;
/**
* Returns a list of actions associated with the hotspot which can be used in a
* menu or toolbar
/**
* Returns a list of actions associated with the hotspot which can be used in a
* menu or toolbar
*/
virtual QList<QAction*> actions();
/**
/**
* Returns the text of a tooltip to be shown when the mouse moves over the hotspot, or
* an empty string if there is no tooltip associated with this hotspot.
*
* The default implementation returns an empty string.
* The default implementation returns an empty string.
*/
virtual QString tooltip() const;
@ -135,7 +135,7 @@ public:
int _endLine;
int _endColumn;
Type _type;
};
/** Constructs a new filter. */
@ -145,9 +145,9 @@ public:
/** Causes the filter to process the block of text currently in its internal buffer */
virtual void process() = 0;
/**
/**
* Empties the filters internal buffer and resets the line count back to 0.
* All hotspots are deleted.
* All hotspots are deleted.
*/
void reset();
@ -163,7 +163,7 @@ public:
/** Returns the list of hotspots identified by the filter which occur on a given line */
QList<HotSpot*> hotSpotsAtLine(int line) const;
/**
/**
* TODO: Document me
*/
void setBuffer(const QString* buffer , const QList<int>* linePositions);
@ -179,22 +179,22 @@ protected:
private:
QMultiHash<int,HotSpot*> _hotspots;
QList<HotSpot*> _hotspotList;
const QList<int>* _linePositions;
const QString* _buffer;
};
/**
* A filter which searches for sections of text matching a regular expression and creates a new RegExpFilter::HotSpot
/**
* A filter which searches for sections of text matching a regular expression and creates a new RegExpFilter::HotSpot
* instance for them.
*
* Subclasses can reimplement newHotSpot() to return custom hotspot types when matches for the regular expression
* are found.
* are found.
*/
class RegExpFilter : public Filter
{
public:
/**
/**
* Type of hotspot created by RegExpFilter. The capturedTexts() method can be used to find the text
* matched by the filter's regular expression.
*/
@ -215,26 +215,26 @@ public:
/** Constructs a new regular expression filter */
RegExpFilter();
/**
* Sets the regular expression which the filter searches for in blocks of text.
/**
* Sets the regular expression which the filter searches for in blocks of text.
*
* Regular expressions which match the empty string are treated as not matching
* anything.
* anything.
*/
void setRegExp(const QRegExp& text);
/** Returns the regular expression which the filter searches for in blocks of text */
QRegExp regExp() const;
/**
* Reimplemented to search the filter's text buffer for text matching regExp()
/**
* Reimplemented to search the filter's text buffer for text matching regExp()
*
* If regexp matches the empty string, then process() will return immediately
* without finding results.
* without finding results.
*/
virtual void process();
protected:
/**
/**
* Called when a match for the regular expression is encountered. Subclasses should reimplement this
* to return custom hotspot types
*/
@ -248,15 +248,15 @@ private:
class FilterObject;
/** A filter which matches URLs in blocks of text */
class UrlFilter : public RegExpFilter
class UrlFilter : public RegExpFilter
{
Q_OBJECT
public:
/**
* Hotspot type created by UrlFilter instances. The activate() method opens a web browser
/**
* Hotspot type created by UrlFilter instances. The activate() method opens a web browser
* at the given URL when called.
*/
class HotSpot : public RegExpFilter::HotSpot
class HotSpot : public RegExpFilter::HotSpot
{
public:
HotSpot(int startLine,int startColumn,int endLine,int endColumn);
@ -266,7 +266,7 @@ public:
virtual QList<QAction*> actions();
/**
/**
* Open a web browser at the current URL. The url itself can be determined using
* the capturedTexts() method.
*/
@ -291,12 +291,12 @@ protected:
virtual RegExpFilter::HotSpot* newHotSpot(int,int,int,int);
private:
static const QRegExp FullUrlRegExp;
static const QRegExp EmailAddressRegExp;
// combined OR of FullUrlRegExp and EmailAddressRegExp
static const QRegExp CompleteUrlRegExp;
static const QRegExp CompleteUrlRegExp;
signals:
void activated(const QUrl& url);
};
@ -316,11 +316,11 @@ signals:
void activated(const QUrl& url);
};
/**
* A chain which allows a group of filters to be processed as one.
/**
* A chain which allows a group of filters to be processed as one.
* The chain owns the filters added to it and deletes them when the chain itself is destroyed.
*
* Use addFilter() to add a new filter to the chain.
* Use addFilter() to add a new filter to the chain.
* When new text to be filtered arrives, use addLine() to add each additional
* line of text which needs to be processed and then after adding the last line, use
* process() to cause each filter in the chain to process the text.
@ -350,12 +350,12 @@ public:
/** Resets each filter in the chain */
void reset();
/**
* Processes each filter in the chain
* Processes each filter in the chain
*/
void process();
/** Sets the buffer for each filter in the chain to process. */
void setBuffer(const QString* buffer , const QList<int>* linePositions);
void setBuffer(const QString* buffer , const QList<int>* linePositions);
/** Returns the first hotspot which occurs at @p line, @p column or 0 if no hotspot was found */
Filter::HotSpot* hotSpotAt(int line , int column) const;
@ -382,7 +382,7 @@ public:
* @param lineProperties The line properties to set for image
*/
void setImage(const Character* const image , int lines , int columns,
const QVector<LineProperty>& lineProperties);
const QVector<LineProperty>& lineProperties);
private:
QString* _buffer;

@ -93,7 +93,7 @@ HistoryFile::HistoryFile()
fileMap(0)
{
if (tmpFile.open())
{
{
tmpFile.setAutoRemove(true);
ion = tmpFile.handle();
}
@ -117,7 +117,7 @@ void HistoryFile::map()
//if mmap'ing fails, fall back to the read-lseek combination
if ( fileMap == MAP_FAILED )
{
readWriteBalance = 0;
readWriteBalance = 0;
fileMap = 0;
qDebug() << __FILE__ << __LINE__ << ": mmap'ing history failed. errno = " << errno;
}
@ -140,7 +140,7 @@ void HistoryFile::add(const unsigned char* bytes, int len)
{
if ( fileMap )
unmap();
readWriteBalance++;
int rc = 0;
@ -152,8 +152,8 @@ void HistoryFile::add(const unsigned char* bytes, int len)
void HistoryFile::get(unsigned char* bytes, int len, int loc)
{
//count number of get() calls vs. number of add() calls.
//If there are many more get() calls compared with add()
//count number of get() calls vs. number of add() calls.
//If there are many more get() calls compared with add()
//calls (decided by using MAP_THRESHOLD) then mmap the log
//file to improve performance.
readWriteBalance--;
@ -166,7 +166,7 @@ void HistoryFile::get(unsigned char* bytes, int len, int loc)
bytes[i]=fileMap[loc+i];
}
else
{
{
int rc = 0;
if (loc < 0 || len < 0 || loc + len > length)
@ -202,7 +202,7 @@ bool HistoryScroll::hasScroll()
// History Scroll File //////////////////////////////////////
/*
/*
The history scroll makes a Row(Row(Cell)) from
two history buffers. The index buffer contains
start of line positions which refere to the cells
@ -222,7 +222,7 @@ HistoryScrollFile::HistoryScrollFile(const QString &logFileName)
HistoryScrollFile::~HistoryScrollFile()
{
}
int HistoryScrollFile::getLines()
{
return index.len() / sizeof(int);
@ -247,11 +247,11 @@ int HistoryScrollFile::startOfLine(int lineno)
{
if (lineno <= 0) return 0;
if (lineno <= getLines())
{
{
if (!index.isMapped())
index.map();
int res;
index.get((unsigned char*)&res,sizeof(int),(lineno-1)*sizeof(int));
return res;
@ -346,7 +346,7 @@ int HistoryScrollBuffer::getLineLen(int lineNumber)
bool HistoryScrollBuffer::isWrappedLine(int lineNumber)
{
Q_ASSERT( lineNumber >= 0 && lineNumber < _maxLineCount );
if (lineNumber < _usedLines)
{
//kDebug() << "Line" << lineNumber << "wrapped is" << _wrappedLine[bufferIndex(lineNumber)];
@ -362,12 +362,12 @@ void HistoryScrollBuffer::getCells(int lineNumber, int startColumn, int count, C
Q_ASSERT( lineNumber < _maxLineCount );
if (lineNumber >= _usedLines)
if (lineNumber >= _usedLines)
{
memset(buffer, 0, count * sizeof(Character));
return;
}
const HistoryLine& line = _historyBuffer[bufferIndex(lineNumber)];
//kDebug() << "startCol " << startColumn;
@ -375,7 +375,7 @@ void HistoryScrollBuffer::getCells(int lineNumber, int startColumn, int count, C
//kDebug() << "count " << count;
Q_ASSERT( startColumn <= line.size() - count );
memcpy(buffer, line.constData() + startColumn , count * sizeof(Character));
}
@ -383,12 +383,12 @@ void HistoryScrollBuffer::setMaxNbLines(unsigned int lineCount)
{
HistoryLine* oldBuffer = _historyBuffer;
HistoryLine* newBuffer = new HistoryLine[lineCount];
for ( int i = 0 ; i < qMin(_usedLines,(int)lineCount) ; i++ )
{
newBuffer[i] = oldBuffer[bufferIndex(i)];
}
_usedLines = qMin(_usedLines,(int)lineCount);
_maxLineCount = lineCount;
_head = ( _usedLines == _maxLineCount ) ? 0 : _usedLines-1;
@ -411,7 +411,7 @@ int HistoryScrollBuffer::bufferIndex(int lineNumber)
return (_head+lineNumber+1) % _maxLineCount;
}
else
{
{
return lineNumber;
}
}
@ -509,7 +509,7 @@ void HistoryScrollBlockArray::getCells(int lineno, int colno,
void HistoryScrollBlockArray::addCells(const Character a[], int count)
{
Block *b = m_blockArray.lastBlock();
if (!b) return;
// put cells in block's data
@ -573,17 +573,17 @@ void* CompactHistoryBlockList::allocate(size_t size)
void CompactHistoryBlockList::deallocate(void* ptr)
{
Q_ASSERT( !list.isEmpty());
int i=0;
int i=0;
CompactHistoryBlock *block = list.at(i);
while ( i<list.size() && !block->contains(ptr) )
{
{
i++;
block=list.at(i);
}
Q_ASSERT( i<list.size() );
block->deallocate();
if (!block->isInUse())
@ -605,16 +605,16 @@ void* CompactHistoryLine::operator new (size_t size, CompactHistoryBlockList& bl
return blockList.allocate(size);
}
CompactHistoryLine::CompactHistoryLine ( const TextLine& line, CompactHistoryBlockList& bList )
CompactHistoryLine::CompactHistoryLine ( const TextLine& line, CompactHistoryBlockList& bList )
: blockList(bList),
formatLength(0)
{
length=line.size();
if (line.size() > 0) {
formatLength=1;
int k=1;
// count number of different formats in this text line
Character c = line[0];
while ( k<length )
@ -626,22 +626,22 @@ CompactHistoryLine::CompactHistoryLine ( const TextLine& line, CompactHistoryBlo
}
k++;
}
//kDebug() << "number of different formats in string: " << formatLength;
formatArray = (CharacterFormat*) blockList.allocate(sizeof(CharacterFormat)*formatLength);
Q_ASSERT (formatArray!=NULL);
text = (quint16*) blockList.allocate(sizeof(quint16)*line.size());
Q_ASSERT (text!=NULL);
length=line.size();
formatLength=formatLength;
wrapped=false;
// record formats and their positions in the format array
c=line[0];
formatArray[0].setFormat ( c );
formatArray[0].startPos=0; // there's always at least 1 format (for the entire line, unless a change happens)
k=1; // look for possible format changes
int j=1;
while ( k<length && j<formatLength )
@ -656,7 +656,7 @@ CompactHistoryLine::CompactHistoryLine ( const TextLine& line, CompactHistoryBlo
}
k++;
}
// copy character values
for ( int i=0; i<line.size(); i++ )
{
@ -674,7 +674,7 @@ CompactHistoryLine::~CompactHistoryLine()
blockList.deallocate(text);
blockList.deallocate(formatArray);
}
blockList.deallocate(this);
blockList.deallocate(this);
}
void CompactHistoryLine::getCharacter ( int index, Character &r )
@ -919,7 +919,7 @@ const QString& HistoryTypeFile::getFileName() const
HistoryScroll* HistoryTypeFile::scroll(HistoryScroll *old) const
{
if (dynamic_cast<HistoryFile *>(old))
if (dynamic_cast<HistoryFile *>(old))
return old; // Unchanged.
HistoryScroll *newScroll = new HistoryScrollFile(m_fileName);
@ -946,7 +946,7 @@ HistoryScroll* HistoryTypeFile::scroll(HistoryScroll *old) const
}
delete old;
return newScroll;
return newScroll;
}
int HistoryTypeFile::maximumLineCount() const

@ -70,7 +70,7 @@ private:
//pointer to start of mmap'ed file data, or 0 if the file is not mmap'ed
char* fileMap;
//incremented whenver 'add' is called and decremented whenever
//'get' is called.
//this is used to detect when a large number of lines are being read and processed from the history
@ -181,7 +181,7 @@ public:
void setMaxNbLines(unsigned int nbLines);
unsigned int maxNbLines() { return _maxLineCount; }
private:
int bufferIndex(int lineNumber);
@ -189,9 +189,9 @@ private:
HistoryLine* _historyBuffer;
QBitArray _wrappedLine;
int _maxLineCount;
int _usedLines;
int _usedLines;
int _head;
//QVector<histline*> m_histBuffer;
//QBitArray m_wrappedLine;
//unsigned int m_maxNbLines;
@ -290,7 +290,7 @@ public:
class CompactHistoryBlock
{
public:
CompactHistoryBlock(){
blockLength = 4096*64; // 256kb
head = (quint8*) mmap(0, blockLength, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
@ -299,12 +299,12 @@ public:
tail = blockStart = head;
allocCount=0;
}
virtual ~CompactHistoryBlock(){
//free(blockStart);
munmap(blockStart, blockLength);
}
virtual unsigned int remaining(){ return blockStart+blockLength-tail;}
virtual unsigned length() { return blockLength; }
virtual void* allocate(size_t length);
@ -381,7 +381,7 @@ private:
bool hasDifferentColors(const TextLine& line) const;
HistoryArray lines;
CompactHistoryBlockList blockList;
unsigned int _maxLineCount;
};
@ -397,7 +397,7 @@ public:
/**
* Returns true if the history is enabled ( can store lines of output )
* or false otherwise.
* or false otherwise.
*/
virtual bool isEnabled() const = 0;
/**
@ -428,7 +428,7 @@ class HistoryTypeBlockArray : public HistoryType
{
public:
HistoryTypeBlockArray(size_t size);
virtual bool isEnabled() const;
virtual int maximumLineCount() const;
@ -438,7 +438,7 @@ protected:
size_t m_size;
};
#if 1
#if 1
class HistoryTypeFile : public HistoryType
{
public:
@ -461,10 +461,10 @@ class HistoryTypeBuffer : public HistoryType
public:
HistoryTypeBuffer(unsigned int nbLines);
virtual bool isEnabled() const;
virtual int maximumLineCount() const;
virtual HistoryScroll* scroll(HistoryScroll *) const;
protected:
@ -475,7 +475,7 @@ class CompactHistoryType : public HistoryType
{
public:
CompactHistoryType(unsigned int size);
virtual bool isEnabled() const;
virtual int maximumLineCount() const;

@ -40,7 +40,7 @@ HistorySearch::~HistorySearch() {
void HistorySearch::search() {
bool found = false;
if (! m_regExp.isEmpty())
{
if (m_forwards) {
@ -48,10 +48,10 @@ void HistorySearch::search() {
} else {
found = search(0, 0, m_startColumn, m_startLine) || search(m_startColumn, m_startLine, -1, m_emulation->lineCount());
}
if (found) {
emit matchFound(m_foundStartColumn, m_foundStartLine, m_foundEndColumn, m_foundEndLine);
}
}
else {
emit noMatchFound();
}
@ -61,43 +61,43 @@ void HistorySearch::search() {
}
bool HistorySearch::search(int startColumn, int startLine, int endColumn, int endLine) {
qDebug() << "search from" << startColumn << "," << startLine
qDebug() << "search from" << startColumn << "," << startLine
<< "to" << endColumn << "," << endLine;
int linesRead = 0;
int linesToRead = endLine - startLine + 1;
qDebug() << "linesToRead:" << linesToRead;
// We read process history from (and including) startLine to (and including) endLine in
// We read process history from (and including) startLine to (and including) endLine in
// blocks of at most 10K lines so that we do not use unhealthy amounts of memory
int blockSize;
while ((blockSize = qMin(10000, linesToRead - linesRead)) > 0) {
QString string;
QTextStream searchStream(&string);
PlainTextDecoder decoder;
QTextStream searchStream(&string);
PlainTextDecoder decoder;
decoder.begin(&searchStream);
decoder.setRecordLinePositions(true);
// Calculate lines to read and read them
int blockStartLine = m_forwards ? startLine + linesRead : endLine - linesRead - blockSize + 1;
// Calculate lines to read and read them
int blockStartLine = m_forwards ? startLine + linesRead : endLine - linesRead - blockSize + 1;
int chunkEndLine = blockStartLine + blockSize - 1;
m_emulation->writeToStream(&decoder, blockStartLine, chunkEndLine);
// We search between startColumn in the first line of the string and endColumn in the last
// line of the string. First we calculate the position (in the string) of endColumn in the
// We search between startColumn in the first line of the string and endColumn in the last
// line of the string. First we calculate the position (in the string) of endColumn in the
// last line of the string
int endPosition;
// The String that Emulator.writeToStream produces has a newline at the end, and so ends with an
// The String that Emulator.writeToStream produces has a newline at the end, and so ends with an
// empty line - we ignore that.
int numberOfLinesInString = decoder.linePositions().size() - 1;
int numberOfLinesInString = decoder.linePositions().size() - 1;
if (numberOfLinesInString > 0 && endColumn > -1 )
{
endPosition = decoder.linePositions().at(numberOfLinesInString - 1) + endColumn;
}
else
else
{
endPosition = string.size();
}
@ -116,12 +116,12 @@ bool HistorySearch::search(int startColumn, int startLine, int endColumn, int en
if (matchStart < startColumn)
matchStart = -1;
}
if (matchStart > -1)
if (matchStart > -1)
{
int matchEnd = matchStart + m_regExp.matchedLength() - 1;
qDebug() << "Found in string from" << matchStart << "to" << matchEnd;
// Translate startPos and endPos to startColum, startLine, endColumn and endLine in history.
int startLineNumberInString = findLineNumberInString(decoder.linePositions(), matchStart);
m_foundStartColumn = matchStart - decoder.linePositions().at(startLineNumberInString);
@ -136,17 +136,17 @@ bool HistorySearch::search(int startColumn, int startLine, int endColumn, int en
<< "m_foundEndColumn" << m_foundEndColumn
<< "m_foundEndLine" << m_foundEndLine;
return true;
return true;
}
linesRead += blockSize;
}
qDebug() << "Not found";
return false;
}
int HistorySearch::findLineNumberInString(QList<int> linePositions, int position) {
int lineNum = 0;
@ -154,4 +154,4 @@ int HistorySearch::findLineNumberInString(QList<int> linePositions, int position
lineNum++;
return lineNum;
}
}

@ -38,7 +38,7 @@ class HistorySearch : public QObject
Q_OBJECT
public:
explicit HistorySearch(EmulationPtr emulation, QRegExp regExp, bool forwards,
explicit HistorySearch(EmulationPtr emulation, QRegExp regExp, bool forwards,
int startColumn, int startLine, QObject* parent);
~HistorySearch();
@ -49,11 +49,11 @@ signals:
void matchFound(int startColumn, int startLine, int endColumn, int endLine);
void noMatchFound();
private:
private:
bool search(int startColumn, int startLine, int endColumn, int endLine);
int findLineNumberInString(QList<int> linePositions, int position);
EmulationPtr m_emulation;
QRegExp m_regExp;
bool m_forwards;

@ -85,8 +85,8 @@ void KeyboardTranslatorManager::findTranslators()
QString translatorPath = listIter.next();
QString name = QFileInfo(translatorPath).baseName();
if ( !_translators.contains(name) )
if ( !_translators.contains(name) )
_translators.insert(name,0);
}
@ -124,7 +124,7 @@ Q_UNUSED(translator);
QFile destination(path);
if (!destination.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug() << "Unable to save keyboard translation:"
qDebug() << "Unable to save keyboard translation:"
<< destination.errorString();
return false;
}
@ -132,7 +132,7 @@ Q_UNUSED(translator);
{
KeyboardTranslatorWriter writer(&destination);
writer.writeHeader(translator->description());
QListIterator<KeyboardTranslator::Entry> iter(translator->entries());
while ( iter.hasNext() )
writer.writeEntry(iter.next());
@ -147,7 +147,7 @@ KeyboardTranslator* KeyboardTranslatorManager::loadTranslator(const QString& nam
{
const QString& path = findTranslatorPath(name);
QFile source(path);
QFile source(path);
if (name.isEmpty() || !source.open(QIODevice::ReadOnly | QIODevice::Text))
return 0;
@ -226,7 +226,7 @@ void KeyboardTranslatorWriter::writeEntry( const KeyboardTranslator::Entry& entr
// KeySequence begins with the name of the key ( taken from the Qt::Key enum )
// and is followed by the keyboard modifiers and state flags ( with + or - in front
// of each modifier or flag to indicate whether it is required ). All keyboard modifiers
// and flags are optional, if a particular modifier or state is not specified it is
// and flags are optional, if a particular modifier or state is not specified it is
// assumed not to be a part of the sequence. The key sequence may contain whitespace
//
// eg: "key Up+Shift : scrollLineUp"
@ -250,7 +250,7 @@ KeyboardTranslatorReader::KeyboardTranslatorReader( QIODevice* source )
// read first entry (if any)
readNext();
}
void KeyboardTranslatorReader::readNext()
void KeyboardTranslatorReader::readNext()
{
// find next entry
while ( !_source->atEnd() )
@ -270,7 +270,7 @@ void KeyboardTranslatorReader::readNext()
modifiers,
modifierMask,
flags,
flagMask);
flagMask);
KeyboardTranslator::Command command = KeyboardTranslator::NoCommand;
QByteArray text;
@ -302,12 +302,12 @@ void KeyboardTranslatorReader::readNext()
return;
}
}
}
_hasNext = false;
}
bool KeyboardTranslatorReader::parseAsCommand(const QString& text,KeyboardTranslator::Command& command)
bool KeyboardTranslatorReader::parseAsCommand(const QString& text,KeyboardTranslator::Command& command)
{
if ( text.compare("erase",Qt::CaseInsensitive) == 0 )
command = KeyboardTranslator::EraseCommand;
@ -334,7 +334,7 @@ bool KeyboardTranslatorReader::decodeSequence(const QString& text,
KeyboardTranslator::States& flags,
KeyboardTranslator::States& flagMask)
{
bool isWanted = true;
bool isWanted = true;
bool endOfItem = false;
QString buffer;
@ -386,13 +386,13 @@ bool KeyboardTranslatorReader::decodeSequence(const QString& text,
buffer.clear();
}
// check if this is a wanted / not-wanted flag and update the
// check if this is a wanted / not-wanted flag and update the
// state ready for the next item
if ( ch == '+' )
isWanted = true;
else if ( ch == '-' )
isWanted = false;
}
isWanted = false;
}
modifiers = tempModifiers;
modifierMask = tempModifierMask;
@ -469,7 +469,7 @@ bool KeyboardTranslatorReader::hasNextEntry()
{
return _hasNext;
}
KeyboardTranslator::Entry KeyboardTranslatorReader::createEntry( const QString& condition ,
KeyboardTranslator::Entry KeyboardTranslatorReader::createEntry( const QString& condition ,
const QString& result )
{
QString entryString("keyboard \"temporary\"\nkey ");
@ -497,7 +497,7 @@ KeyboardTranslator::Entry KeyboardTranslatorReader::createEntry( const QString&
return entry;
}
KeyboardTranslator::Entry KeyboardTranslatorReader::nextEntry()
KeyboardTranslator::Entry KeyboardTranslatorReader::nextEntry()
{
Q_ASSERT( _hasNext );
KeyboardTranslator::Entry entry = _nextEntry;
@ -512,7 +512,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
{
QString text = line;
// remove comments
// remove comments
bool inQuotes = false;
int commentPos = -1;
for (int i=text.length()-1;i>=0;i--)
@ -527,7 +527,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
text.remove(commentPos,text.length());
text = text.simplified();
// title line: keyboard "title"
static QRegExp title("keyboard\\s+\"(.*)\"");
// key line: key KeySequence : "output"
@ -535,7 +535,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
static QRegExp key("key\\s+([\\w\\+\\s\\-\\*\\.]+)\\s*:\\s*(\"(.*)\"|\\w+)");
QList<Token> list;
if ( text.isEmpty() )
if ( text.isEmpty() )
{
return list;
}
@ -544,7 +544,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
{
Token titleToken = { Token::TitleKeyword , QString() };
Token textToken = { Token::TitleText , title.capturedTexts()[1] };
list << titleToken << textToken;
}
else if ( key.exactMatch(text) )
@ -558,14 +558,14 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
{
// capturedTexts()[2] is a command
Token commandToken = { Token::Command , key.capturedTexts()[2] };
list << commandToken;
}
list << commandToken;
}
else
{
// capturedTexts()[3] is the output string
Token outputToken = { Token::OutputText , key.capturedTexts()[3] };
list << outputToken;
}
}
}
else
{
@ -575,7 +575,7 @@ QList<KeyboardTranslatorReader::Token> KeyboardTranslatorReader::tokenize(const
return list;
}
QList<QString> KeyboardTranslatorManager::allTranslators()
QList<QString> KeyboardTranslatorManager::allTranslators()
{
if ( !_haveLoadedAll )
{
@ -606,14 +606,14 @@ bool KeyboardTranslator::Entry::operator==(const Entry& rhs) const
_text == rhs._text;
}
bool KeyboardTranslator::Entry::matches(int keyCode ,
bool KeyboardTranslator::Entry::matches(int keyCode ,
Qt::KeyboardModifiers modifiers,
States testState) const
{
if ( _keyCode != keyCode )
return false;
if ( (modifiers & _modifierMask) != (_modifiers & _modifierMask) )
if ( (modifiers & _modifierMask) != (_modifiers & _modifierMask) )
return false;
// if modifiers is non-zero, the 'any modifier' state is implicit
@ -623,7 +623,7 @@ bool KeyboardTranslator::Entry::matches(int keyCode ,
if ( (testState & _stateMask) != (_state & _stateMask) )
return false;
// special handling for the 'Any Modifier' state, which checks for the presence of
// special handling for the 'Any Modifier' state, which checks for the presence of
// any or no modifiers. In this context, the 'keypad' modifier does not count.
bool anyModifiersSet = modifiers != 0 && modifiers != Qt::KeypadModifier;
bool wantAnyModifier = _state & KeyboardTranslator::AnyModifierState;
@ -632,7 +632,7 @@ bool KeyboardTranslator::Entry::matches(int keyCode ,
if ( wantAnyModifier != anyModifiersSet )
return false;
}
return true;
}
QByteArray KeyboardTranslator::Entry::escapedText(bool expandWildCards,Qt::KeyboardModifiers modifiers) const
@ -661,7 +661,7 @@ QByteArray KeyboardTranslator::Entry::escapedText(bool expandWildCards,Qt::Keybo
if ( replacement == 'x' )
{
result.replace(i,1,"\\x"+QByteArray(1,ch).toHex());
result.replace(i,1,"\\x"+QByteArray(1,ch).toHex());
} else if ( replacement != 0 )
{
result.remove(i,1);
@ -709,7 +709,7 @@ QByteArray KeyboardTranslator::Entry::unescape(const QByteArray& input) const
unsigned charValue = 0;
sscanf(hexDigits,"%x",&charValue);
replacement[0] = (char)charValue;
replacement[0] = (char)charValue;
charsToRemove = 2 + strlen(hexDigits);
}
break;
@ -813,7 +813,7 @@ KeyboardTranslator::KeyboardTranslator(const QString& name)
{
}
void KeyboardTranslator::setDescription(const QString& description)
void KeyboardTranslator::setDescription(const QString& description)
{
_description = description;
}
@ -876,7 +876,7 @@ bool KeyboardTranslatorManager::deleteTranslator(const QString& name)
if ( QFile::remove(path) )
{
_translators.remove(name);
return true;
return true;
}
else
{

@ -39,7 +39,7 @@ class QTextStream;
namespace Konsole
{
/**
/**
* A convertor which maps between key sequences pressed by the user and the
* character strings which should be sent to the terminal and commands
* which should be invoked when those character sequences are pressed.
@ -55,7 +55,7 @@ namespace Konsole
class KeyboardTranslator
{
public:
/**
/**
* The meaning of a particular key sequence may depend upon the state which
* the terminal emulation is in. Therefore findEntry() may return a different
* Entry depending upon the state flags supplied.
@ -71,7 +71,7 @@ public:
* TODO More documentation
*/
NewLineState = 1,
/**
/**
* Indicates that the terminal is in 'Ansi' mode.
* TODO: More documentation
*/
@ -82,10 +82,10 @@ public:
CursorKeysState = 4,
/**
* Indicates that the alternate screen ( typically used by interactive programs
* such as screen or vim ) is active
* such as screen or vim ) is active
*/
AlternateScreenState = 8,
/** Indicates that any of the modifier keys is active. */
/** Indicates that any of the modifier keys is active. */
AnyModifierState = 16,
/** Indicates that the numpad is in application mode. */
ApplicationKeypadState = 32
@ -124,14 +124,14 @@ public:
class Entry
{
public:
/**
/**
* Constructs a new entry for a keyboard translator.
*/
Entry();
/**
/**
* Returns true if this entry is null.
* This is true for newly constructed entries which have no properties set.
* This is true for newly constructed entries which have no properties set.
*/
bool isNull() const;
@ -140,15 +140,15 @@ public:
/** Sets the command associated with this entry. */
void setCommand(Command command);
/**
* Returns the character sequence associated with this entry, optionally replacing
/**
* Returns the character sequence associated with this entry, optionally replacing
* wildcard '*' characters with numbers to indicate the keyboard modifiers being pressed.
*
* TODO: The numbers used to replace '*' characters are taken from the Konsole/KDE 3 code.
* Document them.
* Document them.
*
* @param expandWildCards Specifies whether wild cards (occurrences of the '*' character) in
* the entry should be replaced with a number to indicate the modifier keys being pressed.
* the entry should be replaced with a number to indicate the modifier keys being pressed.
*
* @param modifiers The keyboard modifiers being pressed.
*/
@ -158,7 +158,7 @@ public:
/** Sets the character sequence associated with this entry */
void setText(const QByteArray& text);
/**
/**
* Returns the character sequence associated with this entry,
* with any non-printable characters replaced with escape sequences.
*
@ -175,13 +175,13 @@ public:
/** Sets the character code associated with this entry */
void setKeyCode(int keyCode);
/**
* Returns a bitwise-OR of the enabled keyboard modifiers associated with this entry.
/**
* Returns a bitwise-OR of the enabled keyboard modifiers associated with this entry.
* If a modifier is set in modifierMask() but not in modifiers(), this means that the entry
* only matches when that modifier is NOT pressed.
*
* If a modifier is not set in modifierMask() then the entry matches whether the modifier
* is pressed or not.
* is pressed or not.
*/
Qt::KeyboardModifiers modifiers() const;
@ -193,13 +193,13 @@ public:
/** See modifierMask() and modifiers() */
void setModifierMask( Qt::KeyboardModifiers modifiers );
/**
* Returns a bitwise-OR of the enabled state flags associated with this entry.
* If flag is set in stateMask() but not in state(), this means that the entry only
/**
* Returns a bitwise-OR of the enabled state flags associated with this entry.
* If flag is set in stateMask() but not in state(), this means that the entry only
* matches when the terminal is NOT in that state.
*
* If a state is not set in stateMask() then the entry matches whether the terminal
* is in that state or not.
* is in that state or not.
*/
States state() const;
@ -211,13 +211,13 @@ public:
/** See stateMask() */
void setStateMask( States mask );
/**
* Returns the key code and modifiers associated with this entry
/**
* Returns the key code and modifiers associated with this entry
* as a QKeySequence
*/
//QKeySequence keySequence() const;
/**
/**
* Returns this entry's conditions ( ie. its key code, modifier and state criteria )
* as a string.
*/
@ -233,16 +233,16 @@ public:
QString resultToString(bool expandWildCards = false,
Qt::KeyboardModifiers modifiers = Qt::NoModifier) const;
/**
/**
* Returns true if this entry matches the given key sequence, specified
* as a combination of @p keyCode , @p modifiers and @p state.
*/
bool matches( int keyCode ,
Qt::KeyboardModifiers modifiers ,
bool matches( int keyCode ,
Qt::KeyboardModifiers modifiers ,
States flags ) const;
bool operator==(const Entry& rhs) const;
private:
void insertModifier( QString& item , int modifier ) const;
void insertState( QString& item , int state ) const;
@ -260,7 +260,7 @@ public:
/** Constructs a new keyboard translator with the given @p name */
KeyboardTranslator(const QString& name);
//KeyboardTranslator(const KeyboardTranslator& other);
/** Returns the name of this keyboard translator */
@ -278,7 +278,7 @@ public:
/**
* Looks for an entry in this keyboard translator which matches the given
* key code, keyboard modifiers and state flags.
*
*
* Returns the matching entry if found or a null Entry otherwise ( ie.
* entry.isNull() will return true )
*
@ -286,11 +286,11 @@ public:
* @param modifiers A combination of modifiers
* @param state Optional flags which specify the current state of the terminal
*/
Entry findEntry(int keyCode ,
Qt::KeyboardModifiers modifiers ,
Entry findEntry(int keyCode ,
Qt::KeyboardModifiers modifiers ,
States state = NoState) const;
/**
/**
* Adds an entry to this keyboard translator's table. Entries can be looked up according
* to their key sequence using findEntry()
*/
@ -321,8 +321,8 @@ private:
Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::States)
Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::Commands)
/**
* Parses the contents of a Keyboard Translator (.keytab) file and
/**
* Parses the contents of a Keyboard Translator (.keytab) file and
* returns the entries found in it.
*
* Usage example:
@ -342,7 +342,7 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::Commands)
* if ( !reader.parseError() )
* {
* // parsing succeeded, do something with the translator
* }
* }
* else
* {
* // parsing failed
@ -355,18 +355,18 @@ public:
/** Constructs a new reader which parses the given @p source */
KeyboardTranslatorReader( QIODevice* source );
/**
* Returns the description text.
* TODO: More documentation
/**
* Returns the description text.
* TODO: More documentation
*/
QString description() const;
/** Returns true if there is another entry in the source stream */
bool hasNextEntry();
/** Returns the next entry found in the source stream */
KeyboardTranslator::Entry nextEntry();
KeyboardTranslator::Entry nextEntry();
/**
/**
* Returns true if an error occurred whilst parsing the input or
* false if no error occurred.
*/
@ -376,7 +376,7 @@ public:
* Parses a condition and result string for a translator entry
* and produces a keyboard translator entry.
*
* The condition and result strings are in the same format as in
* The condition and result strings are in the same format as in
*/
static KeyboardTranslator::Entry createEntry( const QString& condition ,
const QString& result );
@ -397,7 +397,7 @@ private:
};
QList<Token> tokenize(const QString&);
void readNext();
bool decodeSequence(const QString& ,
bool decodeSequence(const QString& ,
int& keyCode,
Qt::KeyboardModifiers& modifiers,
Qt::KeyboardModifiers& modifierMask,
@ -419,23 +419,23 @@ private:
class KeyboardTranslatorWriter
{
public:
/**
/**
* Constructs a new writer which saves data into @p destination.
* The caller is responsible for closing the device when writing is complete.
*/
KeyboardTranslatorWriter(QIODevice* destination);
~KeyboardTranslatorWriter();
/**
* Writes the header for the keyboard translator.
* @param description Description of the keyboard translator.
/**
* Writes the header for the keyboard translator.
* @param description Description of the keyboard translator.
*/
void writeHeader( const QString& description );
/** Writes a translator entry. */
void writeEntry( const KeyboardTranslator::Entry& entry );
void writeEntry( const KeyboardTranslator::Entry& entry );
private:
QIODevice* _destination;
QIODevice* _destination;
QTextStream* _writer;
};
@ -446,7 +446,7 @@ private:
class KONSOLEPRIVATE_EXPORT KeyboardTranslatorManager
{
public:
/**
/**
* Constructs a new KeyboardTranslatorManager and loads the list of
* available keyboard translations.
*
@ -457,7 +457,7 @@ public:
~KeyboardTranslatorManager();
/**
* Adds a new translator. If a translator with the same name
* Adds a new translator. If a translator with the same name
* already exists, it will be replaced by the new translator.
*
* TODO: More documentation.
@ -474,18 +474,18 @@ public:
/** Returns the default translator for Konsole. */
const KeyboardTranslator* defaultTranslator();
/**
/**
* Returns the keyboard translator with the given name or 0 if no translator
* with that name exists.
*
* The first time that a translator with a particular name is requested,
* the on-disk .keyboard file is loaded and parsed.
* the on-disk .keyboard file is loaded and parsed.
*/
const KeyboardTranslator* findTranslator(const QString& name);
/**
* Returns a list of the names of available keyboard translators.
*
* The first time this is called, a search for available
* The first time this is called, a search for available
* translators is started.
*/
QList<QString> allTranslators();
@ -495,15 +495,15 @@ public:
private:
static const QByteArray defaultTranslatorText;
void findTranslators(); // locate the available translators
KeyboardTranslator* loadTranslator(const QString& name); // loads the translator
KeyboardTranslator* loadTranslator(const QString& name); // loads the translator
// with the given name
KeyboardTranslator* loadTranslator(QIODevice* device,const QString& name);
bool saveTranslator(const KeyboardTranslator* translator);
QString findTranslatorPath(const QString& name);
QHash<QString,KeyboardTranslator*> _translators; // maps translator-name -> KeyboardTranslator
// instance
bool _haveLoadedAll;
@ -514,15 +514,15 @@ private:
inline int KeyboardTranslator::Entry::keyCode() const { return _keyCode; }
inline void KeyboardTranslator::Entry::setKeyCode(int keyCode) { _keyCode = keyCode; }
inline void KeyboardTranslator::Entry::setModifiers( Qt::KeyboardModifiers modifier )
{
inline void KeyboardTranslator::Entry::setModifiers( Qt::KeyboardModifiers modifier )
{
_modifiers = modifier;
}
inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifiers() const { return _modifiers; }
inline void KeyboardTranslator::Entry::setModifierMask( Qt::KeyboardModifiers mask )
{
_modifierMask = mask;
inline void KeyboardTranslator::Entry::setModifierMask( Qt::KeyboardModifiers mask )
{
_modifierMask = mask;
}
inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifierMask() const { return _modifierMask; }
@ -532,23 +532,23 @@ inline bool KeyboardTranslator::Entry::isNull() const
}
inline void KeyboardTranslator::Entry::setCommand( Command command )
{
_command = command;
{
_command = command;
}
inline KeyboardTranslator::Command KeyboardTranslator::Entry::command() const { return _command; }
inline void KeyboardTranslator::Entry::setText( const QByteArray& text )
{
{
_text = unescape(text);
}
inline int oneOrZero(int value)
{
return value ? 1 : 0;
}
inline QByteArray KeyboardTranslator::Entry::text(bool expandWildCards,Qt::KeyboardModifiers modifiers) const
inline QByteArray KeyboardTranslator::Entry::text(bool expandWildCards,Qt::KeyboardModifiers modifiers) const
{
QByteArray expandedText = _text;
if (expandWildCards)
{
int modifierValue = 1;
@ -556,25 +556,25 @@ inline QByteArray KeyboardTranslator::Entry::text(bool expandWildCards,Qt::Keybo
modifierValue += oneOrZero(modifiers & Qt::AltModifier) << 1;
modifierValue += oneOrZero(modifiers & Qt::ControlModifier) << 2;
for (int i=0;i<_text.length();i++)
for (int i=0;i<_text.length();i++)
{
if (expandedText[i] == '*')
expandedText[i] = '0' + modifierValue;
}
}
return expandedText;
return expandedText;
}
inline void KeyboardTranslator::Entry::setState( States state )
{
_state = state;
{
_state = state;
}
inline KeyboardTranslator::States KeyboardTranslator::Entry::state() const { return _state; }
inline void KeyboardTranslator::Entry::setStateMask( States stateMask )
{
_stateMask = stateMask;
{
_stateMask = stateMask;
}
inline KeyboardTranslator::States KeyboardTranslator::Entry::stateMask() const { return _stateMask; }

@ -83,7 +83,7 @@ bool Pty::flowControlEnabled() const
pty()->tcGetAttr(&ttmode);
return ttmode.c_iflag & IXOFF &&
ttmode.c_iflag & IXON;
}
}
qWarning() << "Unable to get flow control status, terminal not connected.";
return false;
}
@ -110,7 +110,7 @@ void Pty::setUtf8Mode(bool enable)
void Pty::setErase(char erase)
{
_eraseChar = erase;
if (pty()->masterFd() >= 0)
{
struct ::termios ttmode;
@ -142,7 +142,7 @@ void Pty::addEnvironmentVariables(const QStringList& environment)
// split on the first '=' character
int pos = pair.indexOf('=');
if ( pos >= 0 )
{
QString variable = pair.left(pos);
@ -153,10 +153,10 @@ void Pty::addEnvironmentVariables(const QStringList& environment)
}
}
int Pty::start(const QString& program,
const QStringList& programArguments,
const QStringList& environment,
ulong winid,
int Pty::start(const QString& program,
const QStringList& programArguments,
const QStringList& environment,
ulong winid,
bool addToUtmp
//const QString& dbusService,
//const QString& dbusSession
@ -164,7 +164,7 @@ int Pty::start(const QString& program,
{
clearProgram();
// For historical reasons, the first argument in programArguments is the
// For historical reasons, the first argument in programArguments is the
// name of the program to execute, so create a list consisting of all
// but the first argument to pass to setProgram()
Q_ASSERT(programArguments.count() >= 1);
@ -204,10 +204,10 @@ int Pty::start(const QString& program,
if (_eraseChar != 0)
ttmode.c_cc[VERASE] = _eraseChar;
if (!pty()->tcSetAttr(&ttmode))
qWarning() << "Unable to set terminal attributes.";
pty()->setWinSize(_windowLines, _windowColumns);
KProcess::start();
@ -218,6 +218,28 @@ int Pty::start(const QString& program,
return 0;
}
void Pty::setEmptyPTYProperties()
{
struct ::termios ttmode;
pty()->tcGetAttr(&ttmode);
if (!_xonXoff)
ttmode.c_iflag &= ~(IXOFF | IXON);
else
ttmode.c_iflag |= (IXOFF | IXON);
#ifdef IUTF8 // XXX not a reasonable place to check it.
if (!_utf8)
ttmode.c_iflag &= ~IUTF8;
else
ttmode.c_iflag |= IUTF8;
#endif
if (_eraseChar != 0)
ttmode.c_cc[VERASE] = _eraseChar;
if (!pty()->tcSetAttr(&ttmode))
qWarning() << "Unable to set terminal attributes.";
}
void Pty::setWriteable(bool writeable)
{
struct stat sbuf;
@ -258,15 +280,15 @@ void Pty::sendData(const char* data, int length)
{
if (!length)
return;
if (!pty()->write(data,length))
if (!pty()->write(data,length))
{
qWarning() << "Pty::doSendJobs - Could not send input data to terminal process.";
return;
}
}
void Pty::dataReceived()
void Pty::dataReceived()
{
QByteArray data = pty()->readAll();
emit receivedData(data.constData(),data.count());
@ -290,7 +312,7 @@ int Pty::foregroundProcessGroup() const
if ( pid != -1 )
{
return pid;
}
}
return 0;
}
@ -298,9 +320,9 @@ int Pty::foregroundProcessGroup() const
void Pty::setupChildProcess()
{
KPtyProcess::setupChildProcess();
// reset all signal handlers
// this ensures that terminal applications respond to
// this ensures that terminal applications respond to
// signals generated via key sequences such as Ctrl+C
// (which sends SIGINT)
struct sigaction action;

@ -7,8 +7,8 @@
*/
/*
This file is part of Konsole, KDE's terminal emulator.
This file is part of Konsole, KDE's terminal emulator.
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -43,8 +43,8 @@
namespace Konsole {
/**
* The Pty class is used to start the terminal process,
* send data to it, receive data from it and manipulate
* The Pty class is used to start the terminal process,
* send data to it, receive data from it and manipulate
* various properties of the pseudo-teletype interface
* used to communicate with the process.
*
@ -53,26 +53,26 @@ namespace Konsole {
* send data to or receive data from the process.
*
* To start the terminal process, call the start() method
* with the program name and appropriate arguments.
* with the program name and appropriate arguments.
*/
class Pty: public KPtyProcess
{
Q_OBJECT
public:
/**
/**
* Constructs a new Pty.
*
*
* Connect to the sendData() slot and receivedData() signal to prepare
* for sending and receiving data from the terminal process.
*
* To start the terminal process, call the run() method with the
* To start the terminal process, call the run() method with the
* name of the program to start and appropriate arguments.
*/
explicit Pty(QObject* parent = 0);
/**
/**
* Construct a process using an open pty master.
* See KPtyProcess::KPtyProcess()
*/
@ -81,7 +81,7 @@ Q_OBJECT
~Pty();
/**
* Starts the terminal process.
* Starts the terminal process.
*
* Returns 0 if the process was started successfully or non-zero
* otherwise.
@ -94,23 +94,28 @@ Q_OBJECT
* @param winid Specifies the value of the WINDOWID environment variable
* in the process's environment.
* @param addToUtmp Specifies whether a utmp entry should be created for
* the pty used. See K3Process::setUsePty()
* @param dbusService Specifies the value of the KONSOLE_DBUS_SERVICE
* the pty used. See K3Process::setUsePty()
* @param dbusService Specifies the value of the KONSOLE_DBUS_SERVICE
* environment variable in the process's environment.
* @param dbusSession Specifies the value of the KONSOLE_DBUS_SESSION
* environment variable in the process's environment.
* environment variable in the process's environment.
*/
int start( const QString& program,
const QStringList& arguments,
const QStringList& environment,
ulong winid,
int start( const QString& program,
const QStringList& arguments,
const QStringList& environment,
ulong winid,
bool addToUtmp
);
/**
* set properties for "EmptyPTY"
*/
void setEmptyPTYProperties();
/** TODO: Document me */
void setWriteable(bool writeable);
/**
/**
* Enables or disables Xon/Xoff flow control. The flow control setting
* may be changed later by a terminal application, so flowControlEnabled()
* may not equal the value of @p on in the previous call to setFlowControlEnabled()
@ -120,12 +125,12 @@ Q_OBJECT
/** Queries the terminal state and returns true if Xon/Xoff flow control is enabled. */
bool flowControlEnabled() const;
/**
* Sets the size of the window (in lines and columns of characters)
/**
* Sets the size of the window (in lines and columns of characters)
* used by this teletype.
*/
void setWindowSize(int lines, int cols);
/** Returns the size of the window used by this teletype. See setWindowSize() */
QSize windowSize() const;
@ -144,7 +149,7 @@ Q_OBJECT
* 0 will be returned.
*/
int foregroundProcessGroup() const;
public slots:
/**
@ -153,7 +158,7 @@ Q_OBJECT
void setUtf8Mode(bool on);
/**
* Suspend or resume processing of data from the standard
* Suspend or resume processing of data from the standard
* output of the terminal process.
*
* See K3Process::suspend() and K3Process::resume()
@ -162,9 +167,9 @@ Q_OBJECT
* otherwise processing is resumed.
*/
void lockPty(bool lock);
/**
* Sends data to the process currently controlling the
/**
* Sends data to the process currently controlling the
* teletype ( whose id is returned by foregroundProcessGroup() )
*
* @param buffer Pointer to the data to send.
@ -182,14 +187,14 @@ Q_OBJECT
* @param length Length of @p buffer
*/
void receivedData(const char* buffer, int length);
protected:
void setupChildProcess();
private slots:
// called when data is received from the terminal process
void dataReceived();
// called when data is received from the terminal process
void dataReceived();
private:
void init();
@ -197,7 +202,7 @@ Q_OBJECT
// to the environment for the process
void addEnvironmentVariables(const QStringList& environment);
int _windowColumns;
int _windowColumns;
int _windowLines;
char _eraseChar;
bool _xonXoff;

@ -50,10 +50,10 @@ using namespace Konsole;
//Macro to convert x,y position on screen to position within an image.
//
//Originally the image was stored as one large contiguous block of
//Originally the image was stored as one large contiguous block of
//memory, so a position within the image could be represented as an
//offset from the beginning of the block. For efficiency reasons this
//is no longer the case.
//is no longer the case.
//Many internal parts of this class still use this representation for parameters and so on,
//notably moveImage() and clearImage().
//This macro converts from an X,Y position into an image offset.
@ -198,14 +198,14 @@ void Screen::deleteChars(int n)
Q_ASSERT( n >= 0 );
// always delete at least one char
if (n == 0)
n = 1;
if (n == 0)
n = 1;
// if cursor is beyond the end of the line there is nothing to do
if ( cuX >= screenLines[cuY].count() )
return;
if ( cuX+n > screenLines[cuY].count() )
if ( cuX+n > screenLines[cuY].count() )
n = screenLines[cuY].count() - cuX;
Q_ASSERT( n >= 0 );
@ -285,7 +285,7 @@ void Screen::restoreCursor()
{
cuX = qMin(savedState.cursorColumn,columns-1);
cuY = qMin(savedState.cursorLine,lines-1);
currentRendition = savedState.rendition;
currentRendition = savedState.rendition;
currentForeground = savedState.foreground;
currentBackground = savedState.background;
updateEffectiveRendition();
@ -307,7 +307,7 @@ void Screen::resizeImage(int new_lines, int new_columns)
// create new screen lines and copy from old to new
ImageLine* newScreenLines = new ImageLine[new_lines+1];
for (int i=0; i < qMin(lines-1,new_lines+1) ;i++)
for (int i=0; i < qMin(lines,new_lines+1) ;i++)
newScreenLines[i]=screenLines[i];
for (int i=lines;(i > 0) && (i<new_lines+1);i++)
newScreenLines[i].resize( new_columns );
@ -318,7 +318,7 @@ void Screen::resizeImage(int new_lines, int new_columns)
clearSelection();
delete[] screenLines;
delete[] screenLines;
screenLines = newScreenLines;
lines = new_lines;
@ -375,11 +375,11 @@ void Screen::setDefaultMargins()
*/
void Screen::reverseRendition(Character& p) const
{
CharacterColor f = p.foregroundColor;
{
CharacterColor f = p.foregroundColor;
CharacterColor b = p.backgroundColor;
p.foregroundColor = b;
p.foregroundColor = b;
p.backgroundColor = f; //p->r &= ~RE_TRANSPARENT;
}
@ -405,14 +405,14 @@ void Screen::copyFromHistory(Character* dest, int startLine, int count) const
{
Q_ASSERT( startLine >= 0 && count > 0 && startLine + count <= history->getLines() );
for (int line = startLine; line < startLine + count; line++)
for (int line = startLine; line < startLine + count; line++)
{
const int length = qMin(columns,history->getLineLen(line));
const int destLineOffset = (line-startLine)*columns;
history->getCells(line,0,length,dest + destLineOffset);
for (int column = length; column < columns; column++)
for (int column = length; column < columns; column++)
dest[destLineOffset+column] = defaultChar;
// invert selected text
@ -420,9 +420,9 @@ void Screen::copyFromHistory(Character* dest, int startLine, int count) const
{
for (int column = 0; column < columns; column++)
{
if (isSelected(column,line))
if (isSelected(column,line))
{
reverseRendition(dest[destLineOffset + column]);
reverseRendition(dest[destLineOffset + column]);
}
}
}
@ -439,15 +439,15 @@ void Screen::copyFromScreen(Character* dest , int startLine , int count) const
int destLineStartIndex = (line-startLine)*columns;
for (int column = 0; column < columns; column++)
{
int srcIndex = srcLineStartIndex + column;
{
int srcIndex = srcLineStartIndex + column;
int destIndex = destLineStartIndex + column;
dest[destIndex] = screenLines[srcIndex/columns].value(srcIndex%columns,defaultChar);
// invert selected text
if (selBegin != -1 && isSelected(column,line + history->getLines()))
reverseRendition(dest[destIndex]);
reverseRendition(dest[destIndex]);
}
}
@ -460,7 +460,7 @@ void Screen::getImage( Character* dest, int size, int startLine, int endLine ) c
const int mergedLines = endLine - startLine + 1;
Q_ASSERT( size >= mergedLines * columns );
Q_ASSERT( size >= mergedLines * columns );
Q_UNUSED( size );
const int linesInHistoryBuffer = qBound(0,history->getLines()-startLine,mergedLines);
@ -468,7 +468,7 @@ void Screen::getImage( Character* dest, int size, int startLine, int endLine ) c
// copy lines from history buffer
if (linesInHistoryBuffer > 0)
copyFromHistory(dest,startLine,linesInHistoryBuffer);
copyFromHistory(dest,startLine,linesInHistoryBuffer);
// copy lines from screen buffer
if (linesInScreenBuffer > 0)
@ -491,7 +491,7 @@ void Screen::getImage( Character* dest, int size, int startLine, int endLine ) c
QVector<LineProperty> Screen::getLineProperties( int startLine , int endLine ) const
{
Q_ASSERT( startLine >= 0 );
Q_ASSERT( startLine >= 0 );
Q_ASSERT( endLine >= startLine && endLine < history->getLines() + lines );
const int mergedLines = endLine-startLine+1;
@ -502,7 +502,7 @@ QVector<LineProperty> Screen::getLineProperties( int startLine , int endLine ) c
int index = 0;
// copy properties for lines in history
for (int line = startLine; line < startLine + linesInHistory; line++)
for (int line = startLine; line < startLine + linesInHistory; line++)
{
//TODO Support for line properties other than wrapped lines
if (history->isWrappedLine(line))
@ -556,7 +556,7 @@ void Screen::backspace()
if (screenLines[cuY].size() < cuX+1)
screenLines[cuY].resize(cuX+1);
if (BS_CLEARS)
if (BS_CLEARS)
screenLines[cuY][cuX].character = ' ';
}
@ -566,8 +566,8 @@ void Screen::tab(int n)
if (n == 0) n = 1;
while((n > 0) && (cuX < columns-1))
{
cursorRight(1);
while((cuX < columns-1) && !tabStops[cuX])
cursorRight(1);
while((cuX < columns-1) && !tabStops[cuX])
cursorRight(1);
n--;
}
@ -602,20 +602,20 @@ void Screen::initTabStops()
// Arrg! The 1st tabstop has to be one longer than the other.
// i.e. the kids start counting from 0 instead of 1.
// Other programs might behave correctly. Be aware.
for (int i = 0; i < columns; i++)
for (int i = 0; i < columns; i++)
tabStops[i] = (i%8 == 0 && i != 0);
}
void Screen::newLine()
{
if (getMode(MODE_NewLine))
if (getMode(MODE_NewLine))
toStartOfLine();
index();
}
void Screen::checkSelection(int from, int to)
{
if (selBegin == -1)
if (selBegin == -1)
return;
int scr_TL = loc(0, history->getLines());
//Clear entire selection if it overlaps region [from, to]
@ -749,11 +749,11 @@ void Screen::scrollDown(int from, int n)
_scrolledLines += n;
//FIXME: make sure `topMargin', `bottomMargin', `from', `n' is in bounds.
if (n <= 0)
if (n <= 0)
return;
if (from > _bottomMargin)
if (from > _bottomMargin)
return;
if (from + n > _bottomMargin)
if (from + n > _bottomMargin)
n = _bottomMargin - from;
moveImage(loc(0,from+n),loc(0,from),loc(columns-1,_bottomMargin-n));
clearImage(loc(0,from),loc(columns-1,from+n-1),' ');
@ -800,7 +800,7 @@ int Screen::getCursorY() const
}
void Screen::clearImage(int loca, int loce, char c)
{
{
int scr_TL=loc(0,history->getLines());
//FIXME: check positions
@ -851,8 +851,8 @@ void Screen::moveImage(int dest, int sourceBegin, int sourceEnd)
int lines=(sourceEnd-sourceBegin)/columns;
//move screen image and line properties:
//the source and destination areas of the image may overlap,
//so it matters that we do the copy in the right order -
//the source and destination areas of the image may overlap,
//so it matters that we do the copy in the right order -
//forwards if dest < sourceBegin or backwards otherwise.
//(search the web for 'memmove implementation' for details)
if (dest < sourceBegin)
@ -987,9 +987,9 @@ void Screen::setForeColor(int space, int color)
{
currentForeground = CharacterColor(space, color);
if ( currentForeground.isValid() )
if ( currentForeground.isValid() )
updateEffectiveRendition();
else
else
setForeColor(COLOR_SPACE_DEFAULT,DEFAULT_FORE_COLOR);
}
@ -997,13 +997,13 @@ void Screen::setBackColor(int space, int color)
{
currentBackground = CharacterColor(space, color);
if ( currentBackground.isValid() )
if ( currentBackground.isValid() )
updateEffectiveRendition();
else
setBackColor(COLOR_SPACE_DEFAULT,DEFAULT_BACK_COLOR);
}
void Screen::clearSelection()
void Screen::clearSelection()
{
selBottomRight = -1;
selTopLeft = -1;
@ -1015,7 +1015,7 @@ void Screen::getSelectionStart(int& column , int& line) const
if ( selTopLeft != -1 )
{
column = selTopLeft % columns;
line = selTopLeft / columns;
line = selTopLeft / columns;
}
else
{
@ -1034,11 +1034,11 @@ void Screen::getSelectionEnd(int& column , int& line) const
{
column = cuX + getHistLines();
line = cuY + getHistLines();
}
}
}
void Screen::setSelectionStart(const int x, const int y, const bool mode)
{
selBegin = loc(x,y);
selBegin = loc(x,y);
/* FIXME, HACK to correct for x too far to the right... */
if (x == columns) selBegin--;
@ -1049,10 +1049,10 @@ void Screen::setSelectionStart(const int x, const int y, const bool mode)
void Screen::setSelectionEnd( const int x, const int y)
{
if (selBegin == -1)
if (selBegin == -1)
return;
int endPos = loc(x,y);
int endPos = loc(x,y);
if (endPos < selBegin)
{
@ -1062,7 +1062,7 @@ void Screen::setSelectionEnd( const int x, const int y)
else
{
/* FIXME, HACK to correct for x too far to the right... */
if (x == columns)
if (x == columns)
endPos--;
selTopLeft = selBegin;
@ -1113,7 +1113,7 @@ bool Screen::isSelectionValid() const
return selTopLeft >= 0 && selBottomRight >= 0;
}
void Screen::writeSelectionToStream(TerminalCharacterDecoder* decoder ,
void Screen::writeSelectionToStream(TerminalCharacterDecoder* decoder ,
bool preserveLineBreaks) const
{
if (!isSelectionValid())
@ -1121,11 +1121,11 @@ void Screen::writeSelectionToStream(TerminalCharacterDecoder* decoder ,
writeToStream(decoder,selTopLeft,selBottomRight,preserveLineBreaks);
}
void Screen::writeToStream(TerminalCharacterDecoder* decoder,
void Screen::writeToStream(TerminalCharacterDecoder* decoder,
int startIndex, int endIndex,
bool preserveLineBreaks) const
{
int top = startIndex / columns;
int top = startIndex / columns;
int left = startIndex % columns;
int bottom = endIndex / columns;
@ -1145,7 +1145,7 @@ void Screen::writeToStream(TerminalCharacterDecoder* decoder,
int copied = copyLineToStream( y,
start,
count,
decoder,
decoder,
appendNewLine,
preserveLineBreaks );
@ -1153,25 +1153,25 @@ void Screen::writeToStream(TerminalCharacterDecoder* decoder,
// append a new line character.
//
// this makes it possible to 'select' a trailing new line character after
// the text on a line.
if ( y == bottom &&
// the text on a line.
if ( y == bottom &&
copied < count )
{
Character newLineChar('\n');
decoder->decodeLine(&newLineChar,1,0);
}
}
}
}
int Screen::copyLineToStream(int line ,
int start,
int Screen::copyLineToStream(int line ,
int start,
int count,
TerminalCharacterDecoder* decoder,
bool appendNewLine,
bool preserveLineBreaks) const
{
//buffer to hold characters for decoding
//the buffer is static to avoid initialising every
//the buffer is static to avoid initialising every
//element on each call to copyLineToStream
//(which is unnecessary since all elements will be overwritten anyway)
static const int MAX_CHARS = 1024;
@ -1191,7 +1191,7 @@ int Screen::copyLineToStream(int line ,
// retrieve line from history buffer. It is assumed
// that the history buffer does not store trailing white space
// at the end of the line, so it does not need to be trimmed here
// at the end of the line, so it does not need to be trimmed here
if (count == -1)
{
count = lineLength-start;
@ -1203,7 +1203,7 @@ int Screen::copyLineToStream(int line ,
// safety checks
assert( start >= 0 );
assert( count >= 0 );
assert( count >= 0 );
assert( (start+count) <= history->getLineLen(line) );
history->getCells(line,start,count,characterBuffer);
@ -1233,7 +1233,7 @@ int Screen::copyLineToStream(int line ,
count = qBound(0,count,length-start);
Q_ASSERT( screenLine < lineProperties.count() );
currentLineProperties |= lineProperties[screenLine];
currentLineProperties |= lineProperties[screenLine];
}
// add new line character at end
@ -1246,8 +1246,8 @@ int Screen::copyLineToStream(int line ,
count++;
}
//decode line and write to text stream
decoder->decodeLine( (Character*) characterBuffer ,
//decode line and write to text stream
decoder->decodeLine( (Character*) characterBuffer ,
count, currentLineProperties );
return count;

@ -52,21 +52,21 @@ class TerminalCharacterDecoder;
characters from the program currently running in the terminal.
From this stream it creates an image of characters which is ultimately
rendered by the display widget ( TerminalDisplay ). Some types of emulation
may have more than one screen image.
may have more than one screen image.
getImage() is used to retrieve the currently visible image
which is then used by the display widget to draw the output from the
terminal.
terminal.
The number of lines of output history which are kept in addition to the current
screen image depends on the history scroll being used to store the output.
screen image depends on the history scroll being used to store the output.
The scroll is specified using setScroll()
The output history can be retrieved using writeToStream()
The screen image has a selection associated with it, specified using
The screen image has a selection associated with it, specified using
setSelectionStart() and setSelectionEnd(). The selected text can be retrieved
using selectedText(). When getImage() is used to retrieve the visible image,
characters which are part of the selection have their colours inverted.
characters which are part of the selection have their colours inverted.
*/
class Screen
{
@ -75,25 +75,25 @@ public:
Screen(int lines, int columns);
~Screen();
// VT100/2 Operations
// VT100/2 Operations
// Cursor Movement
/**
* Move the cursor up by @p n lines. The cursor will stop at the
/**
* Move the cursor up by @p n lines. The cursor will stop at the
* top margin.
*/
void cursorUp(int n);
/**
/**
* Move the cursor down by @p n lines. The cursor will stop at the
* bottom margin.
*/
void cursorDown(int n);
/**
/**
* Move the cursor to the left by @p n columns.
* The cursor will stop at the first column.
*/
void cursorLeft(int n);
/**
/**
* Move the cursor to the right by @p n columns.
* The cursor will stop at the right-most column.
*/
@ -107,28 +107,28 @@ public:
/**
* Sets the margins for scrolling the screen.
*
* @param topLine The top line of the new scrolling margin.
* @param bottomLine The bottom line of the new scrolling margin.
* @param topLine The top line of the new scrolling margin.
* @param bottomLine The bottom line of the new scrolling margin.
*/
void setMargins(int topLine , int bottomLine);
/** Returns the top line of the scrolling region. */
/** Returns the top line of the scrolling region. */
int topMargin() const;
/** Returns the bottom line of the scrolling region. */
int bottomMargin() const;
/**
/**
* Resets the scrolling margins back to the top and bottom lines
* of the screen.
*/
void setDefaultMargins();
/**
* Moves the cursor down one line, if the MODE_NewLine mode
/**
* Moves the cursor down one line, if the MODE_NewLine mode
* flag is enabled then the cursor is returned to the leftmost
* column first.
*
* Equivalent to NextLine() if the MODE_NewLine flag is set
* or index() otherwise.
* or index() otherwise.
*/
void newLine();
/**
@ -137,7 +137,7 @@ public:
*/
void nextLine();
/**
/**
* Move the cursor down one line. If the cursor is on the bottom
* line of the scrolling region (as returned by bottomMargin()) the
* scrolling region is scrolled up by one line instead.
@ -149,12 +149,12 @@ public:
* region is scrolled down by one line instead.
*/
void reverseIndex();
/**
* Scroll the scrolling region of the screen up by @p n lines.
* The scrolling region is initially the whole screen, but can be changed
/**
* Scroll the scrolling region of the screen up by @p n lines.
* The scrolling region is initially the whole screen, but can be changed
* using setMargins()
*/
*/
void scrollUp(int n);
/**
* Scroll the scrolling region of the screen down by @p n lines.
@ -162,12 +162,12 @@ public:
* using setMargins()
*/
void scrollDown(int n);
/**
* Moves the cursor to the beginning of the current line.
/**
* Moves the cursor to the beginning of the current line.
* Equivalent to setCursorX(0)
*/
void toStartOfLine();
/**
/**
* Moves the cursor one column to the left and erases the character
* at the new cursor position.
*/
@ -176,28 +176,28 @@ public:
void tab(int n = 1);
/** Moves the cursor @p n tab-stops to the left. */
void backtab(int n);
// Editing
/**
* Erase @p n characters beginning from the current cursor position.
/**
* Erase @p n characters beginning from the current cursor position.
* This is equivalent to over-writing @p n characters starting with the current
* cursor position with spaces.
* If @p n is 0 then one character is erased.
* If @p n is 0 then one character is erased.
*/
void eraseChars(int n);
/**
* Delete @p n characters beginning from the current cursor position.
* If @p n is 0 then one character is deleted.
/**
* Delete @p n characters beginning from the current cursor position.
* If @p n is 0 then one character is deleted.
*/
void deleteChars(int n);
/**
* Insert @p n blank characters beginning from the current cursor position.
* The position of the cursor is not altered.
* The position of the cursor is not altered.
* If @p n is 0 then one character is inserted.
*/
void insertChars(int n);
/**
/**
* Removes @p n lines beginning from the current cursor position.
* The position of the cursor is not altered.
* If @p n is 0 then one line is removed.
@ -211,14 +211,14 @@ public:
void insertLines(int n);
/** Clears all the tab stops. */
void clearTabStops();
/** Sets or removes a tab stop at the cursor's current column. */
/** Sets or removes a tab stop at the cursor's current column. */
void changeTabStop(bool set);
/** Resets (clears) the specified screen @p mode. */
void resetMode(int mode);
/** Sets (enables) the specified screen @p mode. */
void setMode(int mode);
/**
/**
* Saves the state of the specified screen @p mode. It can be restored
* using restoreMode()
*/
@ -227,19 +227,19 @@ public:
void restoreMode(int mode);
/** Returns whether the specified screen @p mode is enabled or not .*/
bool getMode(int mode) const;
/**
* Saves the current position and appearance (text color and style) of the cursor.
* It can be restored by calling restoreCursor()
*/
/**
* Saves the current position and appearance (text color and style) of the cursor.
* It can be restored by calling restoreCursor()
*/
void saveCursor();
/** Restores the position and appearance of the cursor. See saveCursor() */
void restoreCursor();
/** Clear the whole screen, moving the current screen contents into the history first. */
/** Clear the whole screen, moving the current screen contents into the history first. */
void clearEntireScreen();
/**
* Clear the area of the screen from the current cursor position to the end of
/**
* Clear the area of the screen from the current cursor position to the end of
* the screen.
*/
void clearToEndOfScreen();
@ -254,16 +254,16 @@ public:
void clearToEndOfLine();
/** Clears from the current cursor position to the beginning of the line. */
void clearToBeginOfLine();
/** Fills the entire screen with the letter 'E' */
void helpAlign();
/**
* Enables the given @p rendition flag. Rendition flags control the appearance
/**
* Enables the given @p rendition flag. Rendition flags control the appearance
* of characters on the screen.
*
* @see Character::rendition
*/
*/
void setRendition(int rendition);
/**
* Disables the given @p rendition flag. Rendition flags control the appearance
@ -272,8 +272,8 @@ public:
* @see Character::rendition
*/
void resetRendition(int rendition);
/**
/**
* Sets the cursor's foreground color.
* @param space The color space used by the @p color argument
* @param color The new foreground color. The meaning of this depends on
@ -291,24 +291,24 @@ public:
* @see CharacterColor
*/
void setBackColor(int space, int color);
/**
* Resets the cursor's color back to the default and sets the
/**
* Resets the cursor's color back to the default and sets the
* character's rendition flags back to the default settings.
*/
void setDefaultRendition();
/** Returns the column which the cursor is positioned at. */
int getCursorX() const;
/** Returns the line which the cursor is positioned on. */
int getCursorY() const;
/** Clear the entire screen and move the cursor to the home position.
* Equivalent to calling clearEntireScreen() followed by home().
*/
void clear();
/**
/**
* Sets the position of the cursor to the 'home' position at the top-left
* corner of the screen (0,0)
* corner of the screen (0,0)
*/
void home();
/**
@ -325,41 +325,41 @@ public:
* <li>New line mode is disabled. TODO Document me</li>
* </ul>
*
* If @p clearScreen is true then the screen contents are erased entirely,
* If @p clearScreen is true then the screen contents are erased entirely,
* otherwise they are unaltered.
*/
void reset(bool clearScreen = true);
/**
* Displays a new character at the current cursor position.
*
/**
* Displays a new character at the current cursor position.
*
* If the cursor is currently positioned at the right-edge of the screen and
* line wrapping is enabled then the character is added at the start of a new
* line wrapping is enabled then the character is added at the start of a new
* line below the current one.
*
* If the MODE_Insert screen mode is currently enabled then the character
* is inserted at the current cursor position, otherwise it will replace the
* character already at the current cursor position.
*/
* If the MODE_Insert screen mode is currently enabled then the character
* is inserted at the current cursor position, otherwise it will replace the
* character already at the current cursor position.
*/
void displayCharacter(unsigned short c);
// Do composition with last shown character FIXME: Not implemented yet for KDE 4
void compose(const QString& compose);
/**
* Resizes the image to a new fixed size of @p new_lines by @p new_columns.
/**
* Resizes the image to a new fixed size of @p new_lines by @p new_columns.
* In the case that @p new_columns is smaller than the current number of columns,
* existing lines are not truncated. This prevents characters from being lost
* if the terminal display is resized smaller and then larger again.
*
* The top and bottom margins are reset to the top and bottom of the new
* The top and bottom margins are reset to the top and bottom of the new
* screen size. Tab stops are also reset and the current selection is
* cleared.
*/
void resizeImage(int new_lines, int new_columns);
/**
* Returns the current screen image.
* Returns the current screen image.
* The result is an array of Characters of size [getLines()][getColumns()] which
* must be freed by the caller after use.
*
@ -370,38 +370,38 @@ public:
*/
void getImage( Character* dest , int size , int startLine , int endLine ) const;
/**
/**
* Returns the additional attributes associated with lines in the image.
* The most important attribute is LINE_WRAPPED which specifies that the
* The most important attribute is LINE_WRAPPED which specifies that the
* line is wrapped,
* other attributes control the size of characters in the line.
*/
QVector<LineProperty> getLineProperties( int startLine , int endLine ) const;
/** Return the number of lines. */
int getLines() const
int getLines() const
{ return lines; }
/** Return the number of columns. */
int getColumns() const
int getColumns() const
{ return columns; }
/** Return the number of lines in the history buffer. */
int getHistLines() const;
/**
* Sets the type of storage used to keep lines in the history.
* If @p copyPreviousScroll is true then the contents of the previous
/**
* Sets the type of storage used to keep lines in the history.
* If @p copyPreviousScroll is true then the contents of the previous
* history buffer are copied into the new scroll.
*/
void setScroll(const HistoryType& , bool copyPreviousScroll = true);
/** Returns the type of storage used to keep lines in the history. */
const HistoryType& getScroll() const;
/**
/**
* Returns true if this screen keeps lines that are scrolled off the screen
* in a history buffer.
*/
bool hasScroll() const;
/**
/**
* Sets the start of the selection.
*
* @param column The column index of the first character in the selection.
@ -409,21 +409,21 @@ public:
* @param blockSelectionMode True if the selection is in column mode.
*/
void setSelectionStart(const int column, const int line, const bool blockSelectionMode);
/**
* Sets the end of the current selection.
*
* @param column The column index of the last character in the selection.
* @param line The line index of the last character in the selection.
*/
* @param line The line index of the last character in the selection.
*/
void setSelectionEnd(const int column, const int line);
/**
* Retrieves the start of the selection or the cursor position if there
* is no selection.
*/
void getSelectionStart(int& column , int& line) const;
/**
* Retrieves the end of the selection or the cursor position if there
* is no selection.
@ -433,19 +433,19 @@ public:
/** Clears the current selection */
void clearSelection();
/**
/**
* Returns true if the character at (@p column, @p line) is part of the
* current selection.
*/
* current selection.
*/
bool isSelected(const int column,const int line) const;
/**
* Convenience method. Returns the currently selected text.
* @param preserveLineBreaks Specifies whether new line characters should
/**
* Convenience method. Returns the currently selected text.
* @param preserveLineBreaks Specifies whether new line characters should
* be inserted into the returned text at the end of each terminal line.
*/
QString selectedText(bool preserveLineBreaks) const;
/**
* Copies part of the output to a stream.
*
@ -459,11 +459,11 @@ public:
* Copies the selected characters, set using @see setSelBeginXY and @see setSelExtentXY
* into a stream.
*
* @param decoder A decoder which converts terminal characters into text.
* PlainTextDecoder is the most commonly used decoder which converts characters
* @param decoder A decoder which converts terminal characters into text.
* PlainTextDecoder is the most commonly used decoder which converts characters
* into plain text with no formatting.
* @param preserveLineBreaks Specifies whether new line characters should
* be inserted into the returned text at the end of each terminal line.
* @param preserveLineBreaks Specifies whether new line characters should
* be inserted into the returned text at the end of each terminal line.
*/
void writeSelectionToStream(TerminalCharacterDecoder* decoder , bool
preserveLineBreaks = true) const;
@ -480,15 +480,15 @@ public:
*/
void checkSelection(int from, int to);
/**
/**
* Sets or clears an attribute of the current line.
*
*
* @param property The attribute to set or clear
* Possible properties are:
* LINE_WRAPPED: Specifies that the line is wrapped.
* LINE_DOUBLEWIDTH: Specifies that the characters in the current line
* should be double the normal width.
* LINE_DOUBLEHEIGHT:Specifies that the characters in the current line
* LINE_DOUBLEHEIGHT:Specifies that the characters in the current line
* should be double the normal height.
* Double-height lines are formed of two lines containing the same characters,
* with both having the LINE_DOUBLEHEIGHT attribute.
@ -499,24 +499,24 @@ public:
*/
void setLineProperty(LineProperty property , bool enable);
/**
/**
* Returns the number of lines that the image has been scrolled up or down by,
* since the last call to resetScrolledLines().
*
* a positive return value indicates that the image has been scrolled up,
* a negative return value indicates that the image has been scrolled down.
* a negative return value indicates that the image has been scrolled down.
*/
int scrolledLines() const;
/**
* Returns the region of the image which was last scrolled.
*
* This is the area of the image from the top margin to the
* This is the area of the image from the top margin to the
* bottom margin when the last scroll occurred.
*/
QRect lastScrolledRegion() const;
/**
/**
* Resets the count of the number of lines that the image has been scrolled up or down by,
* see scrolledLines()
*/
@ -529,7 +529,7 @@ public:
*
* If the history is not unlimited then it will drop
* the oldest lines of output if new lines are added when
* it is full.
* it is full.
*/
int droppedLines() const;
@ -539,32 +539,32 @@ public:
*/
void resetDroppedLines();
/**
/**
* Fills the buffer @p dest with @p count instances of the default (ie. blank)
* Character style.
*/
static void fillWithDefaultChar(Character* dest, int count);
private:
private:
//copies a line of text from the screen or history into a stream using a
//copies a line of text from the screen or history into a stream using a
//specified character decoder. Returns the number of lines actually copied,
//which may be less than 'count' if (start+count) is more than the number of characters on
//the line
//the line
//
//line - the line number to copy, from 0 (the earliest line in the history) up to
//line - the line number to copy, from 0 (the earliest line in the history) up to
// history->getLines() + lines - 1
//start - the first column on the line to copy
//count - the number of characters on the line to copy
//decoder - a decoder which converts terminal characters (an Character array) into text
//appendNewLine - if true a new line character (\n) is appended to the end of the line
int copyLineToStream(int line,
int start,
int count,
int copyLineToStream(int line,
int start,
int count,
TerminalCharacterDecoder* decoder,
bool appendNewLine,
bool preserveLineBreaks) const;
//fills a section of the screen image with the character 'c'
//the parameters are specified as offsets from the start of the screen image.
//the loc(x,y) macro can be used to generate these values from a column,line pair.
@ -576,7 +576,7 @@ private:
//
//NOTE: moveImage() can only move whole lines
void moveImage(int dest, int sourceBegin, int sourceEnd);
// scroll up 'i' lines in current region, clearing the bottom 'i' lines
// scroll up 'i' lines in current region, clearing the bottom 'i' lines
void scrollUp(int from, int i);
// scroll down 'i' lines in current region, clearing the top 'i' lines
void scrollDown(int from, int i);
@ -591,7 +591,7 @@ private:
bool isSelectionValid() const;
// copies text from 'startIndex' to 'endIndex' to a stream
// startIndex and endIndex are positions generated using the loc(x,y) macro
void writeToStream(TerminalCharacterDecoder* decoder, int startIndex,
void writeToStream(TerminalCharacterDecoder* decoder, int startIndex,
int endIndex, bool preserveLineBreaks = true) const;
// copies 'count' lines from the screen buffer into 'dest',
// starting from 'startLine', where 0 is the first line in the screen buffer
@ -613,11 +613,11 @@ private:
int _droppedLines;
QVarLengthArray<LineProperty,64> lineProperties;
QVarLengthArray<LineProperty,64> lineProperties;
// history buffer ---------------
HistoryScroll* history;
// cursor location
int cuX;
int cuY;
@ -625,7 +625,7 @@ private:
// cursor color and rendition info
CharacterColor currentForeground;
CharacterColor currentBackground;
quint8 currentRendition;
quint8 currentRendition;
// margins ----------------
int _topMargin;
@ -650,7 +650,7 @@ private:
CharacterColor effectiveBackground; // the cu_* variables above
quint8 effectiveRendition; // to speed up operation
class SavedState
class SavedState
{
public:
SavedState()
@ -663,7 +663,7 @@ private:
CharacterColor background;
};
SavedState savedState;
// last position where we added a character
int lastPos;

@ -59,7 +59,7 @@ Character* ScreenWindow::getImage()
{
// reallocate internal buffer if the window size has changed
int size = windowLines() * windowColumns();
if (_windowBuffer == 0 || _windowBufferSize != size)
if (_windowBuffer == 0 || _windowBufferSize != size)
{
delete[] _windowBuffer;
_windowBufferSize = size;
@ -69,11 +69,11 @@ Character* ScreenWindow::getImage()
if (!_bufferNeedsUpdate)
return _windowBuffer;
_screen->getImage(_windowBuffer,size,
currentLine(),endWindowLine());
// this window may look beyond the end of the screen, in which
// this window may look beyond the end of the screen, in which
// case there will be an unused area which needs to be filled
// with blank characters
fillUnusedArea();
@ -90,10 +90,10 @@ void ScreenWindow::fillUnusedArea()
int unusedLines = windowEndLine - screenEndLine;
int charsToFill = unusedLines * windowColumns();
Screen::fillWithDefaultChar(_windowBuffer + _windowBufferSize - charsToFill,charsToFill);
Screen::fillWithDefaultChar(_windowBuffer + _windowBufferSize - charsToFill,charsToFill);
}
// return the index of the line at the end of this window, or if this window
// return the index of the line at the end of this window, or if this window
// goes beyond the end of the screen, the index of the line at the end
// of the screen.
//
@ -108,7 +108,7 @@ int ScreenWindow::endWindowLine() const
QVector<LineProperty> ScreenWindow::getLineProperties()
{
QVector<LineProperty> result = _screen->getLineProperties(currentLine(),endWindowLine());
if (result.count() != windowLines())
result.resize(windowLines());
@ -133,7 +133,7 @@ void ScreenWindow::getSelectionEnd( int& column , int& line )
void ScreenWindow::setSelectionStart( int column , int line , bool columnMode )
{
_screen->setSelectionStart( column , qMin(line + currentLine(),endWindowLine()) , columnMode);
_bufferNeedsUpdate = true;
emit selectionChanged();
}
@ -165,7 +165,7 @@ void ScreenWindow::setWindowLines(int lines)
}
int ScreenWindow::windowLines() const
{
return _windowLines;
return _windowLines;
}
int ScreenWindow::windowColumns() const
@ -186,11 +186,11 @@ int ScreenWindow::columnCount() const
QPoint ScreenWindow::cursorPosition() const
{
QPoint position;
position.setX( _screen->getCursorX() );
position.setY( _screen->getCursorY() );
return position;
return position;
}
int ScreenWindow::currentLine() const
@ -206,7 +206,7 @@ void ScreenWindow::scrollBy( RelativeScrollMode mode , int amount )
}
else if ( mode == ScrollPages )
{
scrollTo( currentLine() + amount * ( windowLines() / 2 ) );
scrollTo( currentLine() + amount * ( windowLines() / 2 ) );
}
}
@ -247,7 +247,7 @@ int ScreenWindow::scrollCount() const
return _scrollCount;
}
void ScreenWindow::resetScrollCount()
void ScreenWindow::resetScrollCount()
{
_scrollCount = 0;
}
@ -267,18 +267,18 @@ void ScreenWindow::notifyOutputChanged()
// move window to the bottom of the screen and update scroll count
// if this window is currently tracking the bottom of the screen
if ( _trackOutput )
{
{
_scrollCount -= _screen->scrolledLines();
_currentLine = qMax(0,_screen->getHistLines() - (windowLines()-_screen->getLines()));
}
else
{
// if the history is not unlimited then it may
// if the history is not unlimited then it may
// have run out of space and dropped the oldest
// lines of output - in this case the screen
// window's current line number will need to
// window's current line number will need to
// be adjusted - otherwise the output will scroll
_currentLine = qMax(0,_currentLine -
_currentLine = qMax(0,_currentLine -
_screen->droppedLines());
// ensure that the screen window's current position does
@ -288,7 +288,7 @@ void ScreenWindow::notifyOutputChanged()
_bufferNeedsUpdate = true;
emit outputChanged();
emit outputChanged();
}
//#include "ScreenWindow.moc"

@ -35,7 +35,7 @@ class Screen;
/**
* Provides a window onto a section of a terminal screen. A terminal widget can then render
* the contents of the window and use the window to change the terminal screen's selection
* the contents of the window and use the window to change the terminal screen's selection
* in response to mouse or keyboard input.
*
* A new ScreenWindow for a terminal session can be created by calling Emulation::createWindow()
@ -55,7 +55,7 @@ class ScreenWindow : public QObject
Q_OBJECT
public:
/**
/**
* Constructs a new screen window with the given parent.
* A screen must be specified by calling setScreen() before calling getImage() or getLineProperties().
*
@ -72,7 +72,7 @@ public:
/** Returns the screen which this window looks onto */
Screen* screen() const;
/**
/**
* Returns the image of characters which are currently visible through this window
* onto the screen.
*
@ -89,14 +89,14 @@ public:
/**
* Returns the number of lines which the region of the window
* specified by scrollRegion() has been scrolled by since the last call
* to resetScrollCount(). scrollRegion() is in most cases the
* specified by scrollRegion() has been scrolled by since the last call
* to resetScrollCount(). scrollRegion() is in most cases the
* whole window, but will be a smaller area in, for example, applications
* which provide split-screen facilities.
*
* This is not guaranteed to be accurate, but allows views to optimize
* rendering by reducing the amount of costly text rendering that
* needs to be done when the output is scrolled.
* needs to be done when the output is scrolled.
*/
int scrollCount() const;
@ -106,7 +106,7 @@ public:
void resetScrollCount();
/**
* Returns the area of the window which was last scrolled, this is
* Returns the area of the window which was last scrolled, this is
* usually the whole window area.
*
* Like scrollCount(), this is not guaranteed to be accurate,
@ -114,8 +114,8 @@ public:
*/
QRect scrollRegion() const;
/**
* Sets the start of the selection to the given @p line and @p column within
/**
* Sets the start of the selection to the given @p line and @p column within
* the window.
*/
void setSelectionStart( int column , int line , bool columnMode );
@ -123,7 +123,7 @@ public:
* Sets the end of the selection to the given @p line and @p column within
* the window.
*/
void setSelectionEnd( int column , int line );
void setSelectionEnd( int column , int line );
/**
* Retrieves the start of the selection within the window.
*/
@ -136,7 +136,7 @@ public:
* Returns true if the character at @p line , @p column is part of the selection.
*/
bool isSelected( int column , int line );
/**
/**
* Clears the current selection
*/
void clearSelection();
@ -147,7 +147,7 @@ public:
int windowLines() const;
/** Returns the number of columns in the window */
int windowColumns() const;
/** Returns the total number of lines in the screen */
int lineCount() const;
/** Returns the total number of columns in the screen */
@ -156,13 +156,13 @@ public:
/** Returns the index of the line which is currently at the top of this window */
int currentLine() const;
/**
* Returns the position of the cursor
/**
* Returns the position of the cursor
* within the window.
*/
QPoint cursorPosition() const;
/**
/**
* Convenience method. Returns true if the window is currently at the bottom
* of the screen.
*/
@ -176,33 +176,33 @@ public:
{
/** Scroll the window down by a given number of lines. */
ScrollLines,
/**
/**
* Scroll the window down by a given number of pages, where
* one page is windowLines() lines
*/
ScrollPages
};
/**
/**
* Scrolls the window relative to its current position on the screen.
*
* @param mode Specifies whether @p amount refers to the number of lines or the number
* of pages to scroll.
* of pages to scroll.
* @param amount The number of lines or pages ( depending on @p mode ) to scroll by. If
* this number is positive, the view is scrolled down. If this number is negative, the view
* is scrolled up.
*/
void scrollBy( RelativeScrollMode mode , int amount );
/**
/**
* Specifies whether the window should automatically move to the bottom
* of the screen when new output is added.
*
* If this is set to true, the window will be moved to the bottom of the associated screen ( see
* If this is set to true, the window will be moved to the bottom of the associated screen ( see
* screen() ) when the notifyOutputChanged() method is called.
*/
void setTrackOutput(bool trackOutput);
/**
/**
* Returns whether the window automatically moves to the bottom of the screen as
* new output is added. See setTrackOutput()
*/
@ -216,7 +216,7 @@ public:
QString selectedText( bool preserveLineBreaks ) const;
public slots:
/**
/**
* Notifies the window that the contents of the associated terminal screen have changed.
* This moves the window to the bottom of the screen if trackOutput() is true and causes
* the outputChanged() signal to be emitted.
@ -225,13 +225,13 @@ public slots:
signals:
/**
* Emitted when the contents of the associated terminal screen (see screen()) changes.
* Emitted when the contents of the associated terminal screen (see screen()) changes.
*/
void outputChanged();
/**
* Emitted when the screen window is scrolled to a different position.
*
*
* @param line The line which is now at the top of the window.
*/
void scrolled(int line);
@ -250,7 +250,7 @@ private:
int _windowLines;
int _currentLine; // see scrollTo() , currentLine()
bool _trackOutput; // see setTrackOutput() , trackOutput()
bool _trackOutput; // see setTrackOutput() , trackOutput()
int _scrollCount; // count of lines which the window has been scrolled by since
// the last call to resetScrollCount()
};

@ -30,18 +30,18 @@ SearchBar::SearchBar(QWidget *parent) : QWidget(parent)
connect(widget.searchTextEdit, SIGNAL(textChanged(QString)), this, SIGNAL(searchCriteriaChanged()));
connect(widget.findPreviousButton, SIGNAL(clicked()), this, SIGNAL(findPrevious()));
connect(widget.findNextButton, SIGNAL(clicked()), this, SIGNAL(findNext()));
connect(this, SIGNAL(searchCriteriaChanged()), this, SLOT(clearBackgroundColor()));
QMenu *optionsMenu = new QMenu(widget.optionsButton);
widget.optionsButton->setMenu(optionsMenu);
m_matchCaseMenuEntry = optionsMenu->addAction(tr("Match case"));
m_matchCaseMenuEntry->setCheckable(true);
m_matchCaseMenuEntry->setChecked(true);
connect(m_matchCaseMenuEntry, SIGNAL(toggled(bool)), this, SIGNAL(searchCriteriaChanged()));
m_useRegularExpressionMenuEntry = optionsMenu->addAction(tr("Regular expression"));
m_useRegularExpressionMenuEntry->setCheckable(true);
connect(m_useRegularExpressionMenuEntry, SIGNAL(toggled(bool)), this, SIGNAL(searchCriteriaChanged()));
@ -92,20 +92,20 @@ void SearchBar::noMatchFound()
void SearchBar::keyReleaseEvent(QKeyEvent* keyEvent)
{
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
{
if (keyEvent->modifiers() == Qt::ShiftModifier)
{
findPrevious();
}
else
else
{
findNext();
}
}
else if (keyEvent->key() == Qt::Key_Escape)
{
hide();
hide();
}
}
@ -115,4 +115,4 @@ void SearchBar::clearBackgroundColor()
p.setColor(QPalette::Base, Qt::white);
widget.searchTextEdit->setPalette(p);
}
}

@ -33,7 +33,7 @@ public:
QString searchText();
bool useRegularExpression();
bool matchCase();
bool highlightAllMatches();
bool highlightAllMatches();
public slots:
void noMatchFound();

@ -49,7 +49,7 @@ using namespace Konsole;
int Session::lastSessionId = 0;
Session::Session(QObject* parent) :
Session::Session(QObject* parent) :
QObject(parent),
_shellProcess(0)
, _emulation(0)
@ -79,6 +79,7 @@ Session::Session(QObject* parent) :
//create teletype for I/O with shell process
_shellProcess = new Pty();
ptySlaveFd = _shellProcess->pty()->slaveFd();
//create emulation backend
_emulation = new Vt102Emulation();
@ -129,7 +130,17 @@ WId Session::windowId() const
// there are multiple views, then the window ID for the
// top-level window which contains the first view is
// returned
//
// On Qt5, requesting window IDs breaks QQuickWidget and the likes,
// for example, see the following bug reports:
//
// https://bugreports.qt-project.org/browse/QTBUG-41779
// https://bugreports.qt-project.org/browse/QTBUG-40765
// https://bugreports.qt-project.org/browse/QTBUG-41942
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
return 0;
#else
if ( _views.count() == 0 ) {
return 0;
} else {
@ -143,6 +154,7 @@ WId Session::windowId() const
return window->winId();
}
#endif
}
void Session::setDarkBackground(bool darkBackground)
@ -341,6 +353,22 @@ void Session::run()
emit started();
}
void Session::runEmptyPTY()
{
_shellProcess->setFlowControlEnabled(_flowControl);
_shellProcess->setErase(_emulation->eraseChar());
_shellProcess->setWriteable(false);
// disconnet send data from emulator to internal terminal process
disconnect( _emulation,SIGNAL(sendData(const char *,int)),
_shellProcess, SLOT(sendData(const char *,int)) );
_shellProcess->setEmptyPTYProperties();
qDebug() << "started!";
emit started();
}
void Session::setUserTitle( int what, const QString & caption )
{
//set to true if anything is actually changed (eg. old _nameTitle != new _nameTitle )
@ -469,8 +497,8 @@ void Session::activityStateSet(int state)
if ( _monitorActivity ) {
//FIXME: See comments in Session::monitorTimerDone()
if (!_notifiedActivity) {
emit activity();
_notifiedActivity=true;
emit activity();
}
}
}
@ -928,6 +956,10 @@ int Session::processId() const
{
return _shellProcess->pid();
}
int Session::getPtySlaveFd() const
{
return ptySlaveFd;
}
SessionGroup::SessionGroup()
: _masterMode(0)

@ -25,7 +25,6 @@
#ifndef SESSION_H
#define SESSION_H
#include <QStringList>
#include <QWidget>
@ -363,6 +362,13 @@ public:
// void cancelZModem();
// bool isZModemBusy() { return _zmodemBusy; }
/**
* Returns a pty slave file descriptor.
* This can be used for display and control
* a remote terminal.
*/
int getPtySlaveFd() const;
public slots:
/**
@ -372,6 +378,13 @@ public slots:
*/
void run();
/**
* Starts the terminal session for "as is" PTY
* (without the direction a data to internal terminal process).
* It can be used for control or display a remote/external terminal.
*/
void runEmptyPTY();
/**
* Closes the terminal session. This sends a hangup signal
* (SIGHUP) to the terminal process and causes the done(Session*)
@ -543,6 +556,8 @@ private:
static int lastSessionId;
int ptySlaveFd;
};
/**

@ -1,8 +1,8 @@
/*
This file is part of Konsole, an X terminal.
Copyright 2006-2008 by Robert Knight <robertknight@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@ -84,7 +84,7 @@ void PlainTextDecoder::decodeLine(const Character* const characters, int count,
//(since QTextStream always deals with QStrings internally anyway)
QString plainText;
plainText.reserve(count);
int outputCount = count;
// if inclusion of trailing whitespace is disabled then find the end of the
@ -99,7 +99,7 @@ void PlainTextDecoder::decodeLine(const Character* const characters, int count,
outputCount--;
}
}
for (int i=0;i<outputCount;)
{
plainText.append( QChar(characters[i].character) );
@ -114,7 +114,7 @@ HTMLDecoder::HTMLDecoder() :
,_innerSpanOpen(false)
,_lastRendition(DEFAULT_RENDITION)
{
}
void HTMLDecoder::begin(QTextStream* output)
@ -152,7 +152,7 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
QString text;
int spaceCount = 0;
for (int i=0;i<count;i++)
{
QChar ch(characters[i].character);
@ -168,7 +168,7 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
_lastRendition = characters[i].rendition;
_lastForeColor = characters[i].foregroundColor;
_lastBackColor = characters[i].backgroundColor;
//build up style string
QString style;
@ -178,15 +178,15 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
useBold = _lastRendition & RE_BOLD;
else
useBold = weight == ColorEntry::Bold;
if (useBold)
style.append("font-weight:bold;");
if ( _lastRendition & RE_UNDERLINE )
style.append("font-decoration:underline;");
//colours - a colour table must have been defined first
if ( _colorTable )
if ( _colorTable )
{
style.append( QString("color:%1;").arg(_lastForeColor.color(_colorTable).name() ) );
@ -195,8 +195,8 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
style.append( QString("background-color:%1;").arg(_lastBackColor.color(_colorTable).name() ) );
}
}
//open the span with the current style
//open the span with the current style
openSpan(text,style);
_innerSpanOpen = true;
}
@ -206,7 +206,7 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
spaceCount++;
else
spaceCount = 0;
//output current character
if (spaceCount < 2)
@ -216,14 +216,14 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
text.append("&lt;");
else if (ch == '>')
text.append("&gt;");
else
else
text.append(ch);
}
else
{
text.append("&nbsp;"); //HTML truncates multiple spaces, so use a space marker instead
}
}
//close any remaining open inner spans
@ -232,7 +232,7 @@ void HTMLDecoder::decodeLine(const Character* const characters, int count, LineP
//start new line
text.append("<br>");
*_output << text;
}
void HTMLDecoder::openSpan(QString& text , const QString& style)

@ -1,8 +1,8 @@
/*
This file is part of Konsole, an X terminal.
Copyright 2006-2008 by Robert Knight <robertknight@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@ -38,7 +38,7 @@ namespace Konsole
* and background colours and other appearance-related properties into text strings.
*
* Derived classes may produce either plain text with no other colour or appearance information, or
* they may produce text which incorporates these additional properties.
* they may produce text which incorporates these additional properties.
*/
class TerminalCharacterDecoder
{
@ -58,9 +58,9 @@ public:
* @param count The number of characters
* @param properties Additional properties which affect all characters in the line
*/
virtual void decodeLine(const Character* const characters,
virtual void decodeLine(const Character* const characters,
int count,
LineProperty properties) = 0;
LineProperty properties) = 0;
};
/**
@ -70,10 +70,10 @@ public:
class PlainTextDecoder : public TerminalCharacterDecoder
{
public:
PlainTextDecoder();
PlainTextDecoder();
/**
* Set whether trailing whitespace at the end of lines should be included
/**
* Set whether trailing whitespace at the end of lines should be included
* in the output.
* Defaults to true.
*/
@ -83,9 +83,9 @@ public:
* in the output.
*/
bool trailingWhitespace() const;
/**
/**
* Returns of character positions in the output stream
* at which new lines where added. Returns an empty if setTrackLinePositions() is false or if
* at which new lines where added. Returns an empty if setTrackLinePositions() is false or if
* the output device is not a string.
*/
QList<int> linePositions() const;
@ -97,9 +97,9 @@ public:
virtual void decodeLine(const Character* const characters,
int count,
LineProperty properties);
LineProperty properties);
private:
QTextStream* _output;
bool _includeTrailingWhitespace;
@ -114,7 +114,7 @@ private:
class HTMLDecoder : public TerminalCharacterDecoder
{
public:
/**
/**
* Constructs an HTML decoder using a default black-on-white color scheme.
*/
HTMLDecoder();
@ -124,7 +124,7 @@ public:
* output
*/
void setColorTable( const ColorEntry* table );
virtual void decodeLine(const Character* const characters,
int count,
LineProperty properties);
@ -138,7 +138,7 @@ private:
QTextStream* _output;
const ColorEntry* _colorTable;
bool _innerSpanOpen;
bool _innerSpanOpen;
quint8 _lastRendition;
CharacterColor _lastForeColor;
CharacterColor _lastBackColor;

File diff suppressed because it is too large Load Diff

@ -70,7 +70,7 @@ class ScreenWindow;
* A widget which displays output from a terminal emulation and sends input keypresses and mouse activity
* to the terminal.
*
* When the terminal emulation receives new output from the program running in the terminal,
* When the terminal emulation receives new output from the program running in the terminal,
* it will update the display by calling updateImage().
*
* TODO More documentation
@ -102,25 +102,25 @@ public:
/** Sets the opacity of the terminal display. */
void setOpacity(qreal opacity);
/**
/**
* This enum describes the location where the scroll bar is positioned in the display widget.
*/
enum ScrollBarPosition
{
enum ScrollBarPosition
{
/** Do not show the scroll bar. */
NoScrollBar=0,
NoScrollBar=0,
/** Show the scroll bar on the left side of the display. */
ScrollBarLeft=1,
ScrollBarLeft=1,
/** Show the scroll bar on the right side of the display. */
ScrollBarRight=2
ScrollBarRight=2
};
/**
/**
* Specifies whether the terminal display has a vertical scroll bar, and if so whether it
* is shown on the left or right side of the display.
*/
void setScrollBarPosition(ScrollBarPosition position);
/**
/**
* Sets the current position and range of the display's scroll bar.
*
* @param cursor The position of the scroll bar's thumb.
@ -133,7 +133,7 @@ public:
*/
void scrollToEnd();
/**
/**
* Returns the display's filter chain. When the image for the display is updated,
* the text is passed through each filter in the chain. Each filter can define
* hotspots which correspond to certain strings (such as URLs or particular words).
@ -146,11 +146,11 @@ public:
*/
FilterChain* filterChain() const;
/**
/**
* Updates the filters in the display's filter chain. This will cause
* the hotspots to be updated to match the current image.
*
* WARNING: This function can be expensive depending on the
* WARNING: This function can be expensive depending on the
* image size and number of filters in the filterChain()
*
* TODO - This API does not really allow efficient usage. Revise it so
@ -159,10 +159,10 @@ public:
* eg:
* - Area of interest may be known ( eg. mouse cursor hovering
* over an area )
*/
*/
void processFilters();
/**
/**
* Returns a list of menu actions created by the filters for the content
* at the given @p position.
*/
@ -179,9 +179,9 @@ public:
void setCtrlDrag(bool enable) { _ctrlDrag=enable; }
bool ctrlDrag() { return _ctrlDrag; }
/**
/**
* This enum describes the methods for selecting text when
* the user triple-clicks within the display.
* the user triple-clicks within the display.
*/
enum TripleClickMode
{
@ -190,7 +190,7 @@ public:
/** Select from the current cursor position to the end of the line. */
SelectForwardsFromCursor
};
/** Sets how the text is selected when the user triple clicks within the display. */
/** Sets how the text is selected when the user triple clicks within the display. */
void setTripleClickMode(TripleClickMode mode) { _tripleClickMode = mode; }
/** See setTripleClickSelectionMode() */
TripleClickMode tripleClickMode() { return _tripleClickMode; }
@ -208,22 +208,22 @@ public:
{
/** A rectangular block which covers the entire area of the cursor character. */
BlockCursor,
/**
/**
* A single flat line which occupies the space at the bottom of the cursor
* character's area.
*/
UnderlineCursor,
/**
* An cursor shaped like the capital letter 'I', similar to the IBeam
/**
* An cursor shaped like the capital letter 'I', similar to the IBeam
* cursor used in Qt/KDE text editors.
*/
IBeamCursor
};
/**
* Sets the shape of the keyboard cursor. This is the cursor drawn
/**
* Sets the shape of the keyboard cursor. This is the cursor drawn
* at the position in the terminal where keyboard input will appear.
*
* In addition the terminal display widget also has a cursor for
* In addition the terminal display widget also has a cursor for
* the mouse pointer, which can be set using the QWidget::setCursor()
* method.
*
@ -236,7 +236,7 @@ public:
KeyboardCursorShape keyboardCursorShape() const;
/**
* Sets the color used to draw the keyboard cursor.
* Sets the color used to draw the keyboard cursor.
*
* The keyboard cursor defaults to using the foreground color of the character
* underneath it.
@ -250,10 +250,10 @@ public:
*/
void setKeyboardCursorColor(bool useForegroundColor , const QColor& color);
/**
/**
* Returns the color of the keyboard cursor, or an invalid color if the keyboard
* cursor color is set to change according to the foreground color of the character
* underneath it.
* underneath it.
*/
QColor keyboardCursorColor() const;
@ -278,19 +278,19 @@ public:
*/
int fontHeight() { return _fontHeight; }
/**
* Returns the width of the characters in the display.
* Returns the width of the characters in the display.
* This assumes the use of a fixed-width font.
*/
int fontWidth() { return _fontWidth; }
void setSize(int cols, int lins);
void setFixedSize(int cols, int lins);
// reimplemented
QSize sizeHint() const;
/**
* Sets which characters, in addition to letters and numbers,
* Sets which characters, in addition to letters and numbers,
* are regarded as being part of a word for the purposes
* of selecting words in the display by double clicking on them.
*
@ -301,26 +301,26 @@ public:
* of a word ( in addition to letters and numbers ).
*/
void setWordCharacters(const QString& wc);
/**
* Returns the characters which are considered part of a word for the
/**
* Returns the characters which are considered part of a word for the
* purpose of selecting words in the display with the mouse.
*
* @see setWordCharacters()
*/
QString wordCharacters() { return _wordCharacters; }
/**
* Sets the type of effect used to alert the user when a 'bell' occurs in the
/**
* Sets the type of effect used to alert the user when a 'bell' occurs in the
* terminal session.
*
* The terminal session can trigger the bell effect by calling bell() with
* the alert message.
*/
void setBellMode(int mode);
/**
/**
* Returns the type of effect used to alert the user when a 'bell' occurs in
* the terminal session.
*
*
* See setBellMode()
*/
int bellMode() { return _bellMode; }
@ -331,23 +331,23 @@ public:
* session.
*/
enum BellMode
{
{
/** A system beep. */
SystemBeepBell=0,
/**
SystemBeepBell=0,
/**
* KDE notification. This may play a sound, show a passive popup
* or perform some other action depending on the user's settings.
*/
NotifyBell=1,
NotifyBell=1,
/** A silent, visual bell (eg. inverting the display's colors briefly) */
VisualBell=2,
VisualBell=2,
/** No bell effects */
NoBell=3
NoBell=3
};
void setSelection(const QString &t);
/**
/**
* Reimplemented. Has no effect. Use setVTFont() to change the font
* used to draw characters in the display.
*/
@ -356,9 +356,9 @@ public:
/** Returns the font used to draw characters in the display */
QFont getVTFont() { return font(); }
/**
/**
* Sets the font used to draw the display. Has no effect if @p font
* is larger than the size of the display itself.
* is larger than the size of the display itself.
*/
void setVTFont(const QFont& font);
@ -367,7 +367,7 @@ public:
* is enabled or not. Defaults to enabled.
*/
static void setAntialias( bool antialias ) { _antialiasText = antialias; }
/**
/**
* Returns true if anti-aliasing of text in the terminal is enabled.
*/
static bool antialias() { return _antialiasText; }
@ -381,20 +381,20 @@ public:
* Returns true if characters with intense colors are rendered in bold.
*/
bool getBoldIntense() { return _boldIntense; }
/**
* Sets whether or not the current height and width of the
* Sets whether or not the current height and width of the
* terminal in lines and columns is displayed whilst the widget
* is being resized.
*/
void setTerminalSizeHint(bool on) { _terminalSizeHint=on; }
/**
/**
* Returns whether or not the current height and width of
* the terminal in lines and columns is displayed whilst the widget
* is being resized.
*/
bool terminalSizeHint() { return _terminalSizeHint; }
/**
/**
* Sets whether the terminal size display is shown briefly
* after the widget is first shown.
*
@ -425,36 +425,36 @@ public:
ScreenWindow* screenWindow() const;
static bool HAVE_TRANSPARENCY;
void setMotionAfterPasting(MotionAfterPasting action);
int motionAfterPasting();
// maps a point on the widget to the position ( ie. line and column )
// of the character at that point.
void getCharacterPosition(const QPoint& widgetPoint,int& line,int& column) const;
public slots:
/**
/**
* Causes the terminal display to fetch the latest character image from the associated
* terminal screen ( see setScreenWindow() ) and redraw the display.
*/
void updateImage();
void updateImage();
/** Essentially calles processFilters().
*/
void updateFilters();
/**
* Causes the terminal display to fetch the latest line status flags from the
* associated terminal screen ( see setScreenWindow() ).
*/
* Causes the terminal display to fetch the latest line status flags from the
* associated terminal screen ( see setScreenWindow() ).
*/
void updateLineProperties();
/** Copies the selected text to the clipboard. */
void copyClipboard();
/**
* Pastes the content of the clipboard into the
/**
* Pastes the content of the clipboard into the
* display.
*/
void pasteClipboard();
@ -464,26 +464,26 @@ public slots:
*/
void pasteSelection();
/**
/**
* Changes whether the flow control warning box should be shown when the flow control
* stop key (Ctrl+S) are pressed.
*/
void setFlowControlWarningEnabled(bool enabled);
/**
* Returns true if the flow control warning box is enabled.
/**
* Returns true if the flow control warning box is enabled.
* See outputSuspended() and setFlowControlWarningEnabled()
*/
bool flowControlWarningEnabled() const
{ return _flowControlWarningEnabled; }
/**
/**
* Causes the widget to display or hide a message informing the user that terminal
* output has been suspended (by using the flow control key combination Ctrl+S)
*
* @param suspended True if terminal output has been suspended and the warning message should
* be shown or false to indicate that terminal output has been resumed and that
* the warning message should disappear.
*/
*/
void outputSuspended(bool suspended);
/**
@ -493,7 +493,7 @@ public slots:
* If this is set to true, mouse signals will be emitted by the view when the user clicks, drags
* or otherwise moves the mouse inside the view.
* The user interaction needed to create selections will also change, and the user will be required
* to hold down the shift key to create a selection or perform other mouse activities inside the
* to hold down the shift key to create a selection or perform other mouse activities inside the
* view area - since the program running in the terminal is being allowed to handle normal mouse
* events itself.
*
@ -501,28 +501,28 @@ public slots:
* or false otherwise.
*/
void setUsesMouse(bool usesMouse);
/** See setUsesMouse() */
bool usesMouse() const;
/**
/**
* Shows a notification that a bell event has occurred in the terminal.
* TODO: More documentation here
*/
void bell(const QString& message);
/**
* Sets the background of the display to the specified color.
* @see setColorTable(), setForegroundColor()
/**
* Sets the background of the display to the specified color.
* @see setColorTable(), setForegroundColor()
*/
void setBackgroundColor(const QColor& color);
/**
* Sets the text of the display to the specified color.
/**
* Sets the text of the display to the specified color.
* @see setColorTable(), setBackgroundColor()
*/
void setForegroundColor(const QColor& color);
void selectionChanged();
signals:
@ -532,7 +532,7 @@ signals:
*/
void keyPressedSignal(QKeyEvent *e);
/**
/**
* A mouse event occurred.
* @param button The mouse button (0 for left button, 1 for middle button, 2 for right button, 3 for release)
* @param column The character column where the event occurred
@ -543,7 +543,7 @@ signals:
void changedFontMetricSignal(int height, int width);
void changedContentSizeSignal(int height, int width);
/**
/**
* Emitted when the user right clicks on the display, or right-clicks with the Shift
* key held down if usesMouse() is true.
*
@ -552,9 +552,9 @@ signals:
void configureRequest(const QPoint& position);
/**
* When a shortcut which is also a valid terminal key sequence is pressed while
* the terminal widget has focus, this signal is emitted to allow the host to decide
* whether the shortcut should be overridden.
* When a shortcut which is also a valid terminal key sequence is pressed while
* the terminal widget has focus, this signal is emitted to allow the host to decide
* whether the shortcut should be overridden.
* When the shortcut is overridden, the key sequence will be sent to the terminal emulation instead
* and the action associated with the shortcut will not be triggered.
*
@ -564,13 +564,14 @@ signals:
void isBusySelecting(bool);
void sendStringToEmu(const char*);
// qtermwidget signals
void copyAvailable(bool);
void termGetFocus();
void termLostFocus();
void notifyBell(const QString&);
void usesMouseChanged();
protected:
virtual bool event( QEvent * );
@ -593,7 +594,7 @@ protected:
virtual void wheelEvent( QWheelEvent* );
virtual bool focusNextPrevChild( bool next );
// drag and drop
virtual void dragEnterEvent(QDragEnterEvent* event);
virtual void dropEvent(QDropEvent* event);
@ -609,7 +610,7 @@ protected:
// classifies the 'ch' into one of three categories
// and returns a character to indicate which category it is in
//
// - A space (returns ' ')
// - A space (returns ' ')
// - Part of a word (returns 'a')
// - Other characters (returns the input character)
QChar charClass(QChar ch) const;
@ -627,7 +628,7 @@ protected slots:
void scrollBarPositionChanged(int value);
void blinkEvent();
void blinkCursorEvent();
//Renables bell noises and visuals. Used to disable further bells for a short period of time
//after emitting the first in a sequence of bell events.
void enableBell();
@ -641,14 +642,19 @@ private:
// -- Drawing helpers --
// determine the width of this text
int textWidth(int startColumn, int length, int line) const;
// determine the area that encloses this series of characters
QRect calculateTextArea(int topLeftX, int topLeftY, int startColumn, int line, int length);
// divides the part of the display specified by 'rect' into
// fragments according to their colors and styles and calls
// drawTextFragment() to draw the fragments
// drawTextFragment() to draw the fragments
void drawContents(QPainter &paint, const QRect &rect);
// draws a section of text, all the text in this section
// has a common color and style
void drawTextFragment(QPainter& painter, const QRect& rect,
const QString& text, const Character* style);
void drawTextFragment(QPainter& painter, const QRect& rect,
const QString& text, const Character* style);
// draws the background for a text fragment
// if useOpacitySetting is true then the color's alpha value will be set to
// the display's transparency (set with setOpacity()), otherwise the background
@ -656,13 +662,13 @@ private:
void drawBackground(QPainter& painter, const QRect& rect, const QColor& color,
bool useOpacitySetting);
// draws the cursor character
void drawCursor(QPainter& painter, const QRect& rect , const QColor& foregroundColor,
void drawCursor(QPainter& painter, const QRect& rect , const QColor& foregroundColor,
const QColor& backgroundColor , bool& invertColors);
// draws the characters or line graphics in a text fragment
void drawCharacters(QPainter& painter, const QRect& rect, const QString& text,
void drawCharacters(QPainter& painter, const QRect& rect, const QString& text,
const Character* style, bool invertCharacterColor);
// draws a string of line graphics
void drawLineCharString(QPainter& painter, int x, int y,
void drawLineCharString(QPainter& painter, int x, int y,
const QString& str, const Character* attributes);
// draws the preedit string for input methods
@ -670,7 +676,7 @@ private:
// --
// maps an area in the character image to an area on the widget
// maps an area in the character image to an area on the widget
QRect imageToWidget(const QRect& imageArea) const;
// the area where the preedit string for input methods will be draw
@ -680,8 +686,8 @@ private:
// current size in columns and lines
void showResizeNotification();
// scrolls the image by a number of lines.
// 'lines' may be positive ( to scroll the image down )
// scrolls the image by a number of lines.
// 'lines' may be positive ( to scroll the image down )
// or negative ( to scroll the image up )
// 'region' is the part of the image to scroll - currently only
// the top, bottom and height of 'region' are taken into account,
@ -692,7 +698,7 @@ private:
void propagateSize();
void updateImageSize();
void makeImage();
void paintFilters(QPainter& painter);
// returns a region covering all of the areas of the widget which contain
@ -708,7 +714,7 @@ private:
bool handleShortcutOverrideEvent(QKeyEvent* event);
// the window onto the terminal screen which this display
// is currently showing.
// is currently showing.
QPointer<ScreenWindow> _screenWindow;
bool _allowBell;
@ -726,7 +732,7 @@ private:
int _lines; // the number of lines that can be displayed in the widget
int _columns; // the number of columns that can be displayed in the widget
int _usedLines; // the number of lines that are actually being used, this will be less
// than 'lines' if the character image provided with setImage() is smaller
// than the maximum image size which can be displayed
@ -734,7 +740,7 @@ private:
int _usedColumns; // the number of columns that are actually being used, this will be less
// than 'columns' if the character image provided with setImage() is smaller
// than the maximum image size which can be displayed
int _contentHeight;
int _contentWidth;
Character* _image; // [lines][columns]
@ -793,14 +799,14 @@ private:
//widgets related to the warning message that appears when the user presses Ctrl+S to suspend
//terminal output - informing them what has happened and how to resume output
QLabel* _outputSuspendedLabel;
QLabel* _outputSuspendedLabel;
uint _lineSpacing;
bool _colorsInverted; // true during visual bell
QSize _size;
QRgb _blendColor;
// list of filters currently applied to the display. used for links and
@ -812,7 +818,7 @@ private:
// custom cursor color. if this is invalid then the foreground
// color of the character under the cursor is used
QColor _cursorColor;
QColor _cursorColor;
MotionAfterPasting mMotionAfterPasting;

@ -1,6 +1,6 @@
/*
This file is part of Konsole, an X terminal.
Copyright 2007-2008 by Robert Knight <robert.knight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -37,7 +37,7 @@
void scrolllock_set_on();
#endif
// Standard
// Standard
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
@ -58,7 +58,7 @@
using namespace Konsole;
Vt102Emulation::Vt102Emulation()
Vt102Emulation::Vt102Emulation()
: Emulation(),
_titleUpdateTimer(new QTimer(this))
{
@ -75,7 +75,7 @@ Vt102Emulation::~Vt102Emulation()
void Vt102Emulation::clearEntireScreen()
{
_currentScreen->clearEntireScreen();
bufferedUpdate();
bufferedUpdate();
}
void Vt102Emulation::reset()
@ -87,7 +87,7 @@ void Vt102Emulation::reset()
resetCharset(1);
_screen[1]->reset();
setCodec(LocaleCodec);
bufferedUpdate();
}
@ -138,7 +138,7 @@ void Vt102Emulation::reset()
- VT52 - VT52 escape codes
- <ESC><Chr>
- <ESC>'Y'{Pc}{Pc}
- XTE_HA - Xterm window/terminal attribute commands
- XTE_HA - Xterm window/terminal attribute commands
of the form <ESC>`]' {Pn} `;' {Text} <BEL>
(Note that these are handled differently to the other formats)
@ -178,9 +178,9 @@ void Vt102Emulation::reset()
void Vt102Emulation::resetTokenizer()
{
tokenBufferPos = 0;
argc = 0;
argv[0] = 0;
tokenBufferPos = 0;
argc = 0;
argv[0] = 0;
argv[1] = 0;
}
@ -206,33 +206,33 @@ void Vt102Emulation::addToCurrentToken(int cc)
#define CTL 1 // Control character
#define CHR 2 // Printable character
#define CPN 4 // TODO: Document me
#define CPN 4 // TODO: Document me
#define DIG 8 // Digit
#define SCS 16 // TODO: Document me
#define SCS 16 // TODO: Document me
#define GRP 32 // TODO: Document me
#define CPS 64 // Character which indicates end of window resize
// escape sequence '\e[8;<row>;<col>t'
void Vt102Emulation::initTokenizer()
{
int i;
{
int i;
quint8* s;
for(i = 0;i < 256; ++i)
for(i = 0;i < 256; ++i)
charClass[i] = 0;
for(i = 0;i < 32; ++i)
for(i = 0;i < 32; ++i)
charClass[i] |= CTL;
for(i = 32;i < 256; ++i)
for(i = 32;i < 256; ++i)
charClass[i] |= CHR;
for(s = (quint8*)"@ABCDGHILMPSTXZcdfry"; *s; ++s)
for(s = (quint8*)"@ABCDGHILMPSTXZcdfry"; *s; ++s)
charClass[*s] |= CPN;
// resize = \e[8;<row>;<col>t
for(s = (quint8*)"t"; *s; ++s)
for(s = (quint8*)"t"; *s; ++s)
charClass[*s] |= CPS;
for(s = (quint8*)"0123456789"; *s; ++s)
for(s = (quint8*)"0123456789"; *s; ++s)
charClass[*s] |= DIG;
for(s = (quint8*)"()+*%"; *s; ++s)
for(s = (quint8*)"()+*%"; *s; ++s)
charClass[*s] |= SCS;
for(s = (quint8*)"()+*#[]%"; *s; ++s)
for(s = (quint8*)"()+*#[]%"; *s; ++s)
charClass[*s] |= GRP;
resetTokenizer();
@ -249,10 +249,10 @@ void Vt102Emulation::initTokenizer()
- P is the length of the token scanned so far.
- L (often P-1) is the position on which contents we base a decision.
- C is a character or a group of characters (taken from 'charClass').
- 'cc' is the current character
- 's' is a pointer to the start of the token buffer
- 'p' is the current position within the token buffer
- 'p' is the current position within the token buffer
Note that they need to applied in proper order.
*/
@ -275,31 +275,31 @@ void Vt102Emulation::initTokenizer()
// process an incoming unicode character
void Vt102Emulation::receiveChar(int cc)
{
if (cc == 127)
{
if (cc == 127)
return; //VT100: ignore.
if (ces(CTL))
{
{
// DEC HACK ALERT! Control Characters are allowed *within* esc sequences in VT100
// This means, they do neither a resetTokenizer() nor a pushToToken(). Some of them, do
// of course. Guess this originates from a weakly layered handling of the X-on
// X-off protocol, which comes really below this level.
if (cc == CNTL('X') || cc == CNTL('Z') || cc == ESC)
if (cc == CNTL('X') || cc == CNTL('Z') || cc == ESC)
resetTokenizer(); //VT100: CAN or SUB
if (cc != ESC)
{
processToken(TY_CTL(cc+'@' ),0,0);
return;
if (cc != ESC)
{
processToken(TY_CTL(cc+'@' ),0,0);
return;
}
}
// advance the state
addToCurrentToken(cc);
addToCurrentToken(cc);
int* s = tokenBuffer;
int p = tokenBufferPos;
if (getMode(MODE_Ansi))
if (getMode(MODE_Ansi))
{
if (lec(1,0,ESC)) { return; }
if (lec(1,0,ESC+128)) { s[0] = ESC; receiveChar('['); return; }
@ -316,11 +316,11 @@ void Vt102Emulation::receiveChar(int cc)
if (eps( CPN)) { processToken( TY_CSI_PN(cc), argv[0],argv[1]); resetTokenizer(); return; }
// resize = \e[8;<row>;<col>t
if (eps(CPS))
{
processToken( TY_CSI_PS(cc, argv[0]), argv[1], argv[2]);
resetTokenizer();
return;
if (eps(CPS))
{
processToken( TY_CSI_PS(cc, argv[0]), argv[1], argv[2]);
resetTokenizer();
return;
}
if (epe( )) { processToken( TY_CSI_PE(cc), 0, 0); resetTokenizer(); return; }
@ -328,19 +328,19 @@ void Vt102Emulation::receiveChar(int cc)
if (eec(';')) { addArgument(); return; }
for (int i=0;i<=argc;i++)
{
if (epp())
if (epp())
processToken( TY_CSI_PR(cc,argv[i]), 0, 0);
else if (egt())
else if (egt())
processToken( TY_CSI_PG(cc), 0, 0); // spec. case for ESC]>0c or ESC]>c
else if (cc == 'm' && argc - i >= 4 && (argv[i] == 38 || argv[i] == 48) && argv[i+1] == 2)
{
{
// ESC[ ... 48;2;<red>;<green>;<blue> ... m -or- ESC[ ... 38;2;<red>;<green>;<blue> ... m
i += 2;
processToken( TY_CSI_PS(cc, argv[i-2]), COLOR_SPACE_RGB, (argv[i] << 16) | (argv[i+1] << 8) | argv[i+2]);
i += 2;
}
else if (cc == 'm' && argc - i >= 2 && (argv[i] == 38 || argv[i] == 48) && argv[i+1] == 5)
{
{
// ESC[ ... 48;5;<index> ... m -or- ESC[ ... 38;5;<index> ... m
i += 2;
processToken( TY_CSI_PS(cc, argv[i-2]), COLOR_SPACE_256, argv[i]);
@ -350,29 +350,29 @@ void Vt102Emulation::receiveChar(int cc)
}
resetTokenizer();
}
else
else
{
// VT52 Mode
if (lec(1,0,ESC))
if (lec(1,0,ESC))
return;
if (les(1,0,CHR))
{
processToken( TY_CHR(), s[0], 0);
resetTokenizer();
return;
if (les(1,0,CHR))
{
processToken( TY_CHR(), s[0], 0);
resetTokenizer();
return;
}
if (lec(2,1,'Y'))
if (lec(2,1,'Y'))
return;
if (lec(3,1,'Y'))
if (lec(3,1,'Y'))
return;
if (p < 4)
{
processToken( TY_VT52(s[1] ), 0, 0);
resetTokenizer();
return;
if (p < 4)
{
processToken( TY_VT52(s[1] ), 0, 0);
resetTokenizer();
return;
}
processToken( TY_VT52(s[1]), s[2], s[3]);
resetTokenizer();
processToken( TY_VT52(s[1]), s[2], s[3]);
resetTokenizer();
return;
}
}
@ -382,24 +382,24 @@ void Vt102Emulation::processWindowAttributeChange()
// See Session::UserTitleChange for possible values
int attributeToChange = 0;
int i;
for (i = 2; i < tokenBufferPos &&
tokenBuffer[i] >= '0' &&
for (i = 2; i < tokenBufferPos &&
tokenBuffer[i] >= '0' &&
tokenBuffer[i] <= '9'; i++)
{
attributeToChange = 10 * attributeToChange + (tokenBuffer[i]-'0');
}
if (tokenBuffer[i] != ';')
{
reportDecodingError();
return;
if (tokenBuffer[i] != ';')
{
reportDecodingError();
return;
}
QString newValue;
newValue.reserve(tokenBufferPos-i-2);
for (int j = 0; j < tokenBufferPos-i-2; j++)
newValue[j] = tokenBuffer[i+1+j];
_pendingTitleUpdates[attributeToChange] = newValue;
_titleUpdateTimer->start(20);
}
@ -409,9 +409,9 @@ void Vt102Emulation::updateTitle()
QListIterator<int> iter( _pendingTitleUpdates.keys() );
while (iter.hasNext()) {
int arg = iter.next();
emit titleChanged( arg , _pendingTitleUpdates[arg] );
emit titleChanged( arg , _pendingTitleUpdates[arg] );
}
_pendingTitleUpdates.clear();
_pendingTitleUpdates.clear();
}
// Interpreting Codes ---------------------------------------------------------
@ -512,11 +512,11 @@ void Vt102Emulation::processToken(int token, int p, int q)
case TY_ESC_CS('%', 'G') : setCodec (Utf8Codec ); break; //LINUX
case TY_ESC_CS('%', '@') : setCodec (LocaleCodec ); break; //LINUX
case TY_ESC_DE('3' ) : /* Double height line, top half */
case TY_ESC_DE('3' ) : /* Double height line, top half */
_currentScreen->setLineProperty( LINE_DOUBLEWIDTH , true );
_currentScreen->setLineProperty( LINE_DOUBLEHEIGHT , true );
break;
case TY_ESC_DE('4' ) : /* Double height line, bottom half */
case TY_ESC_DE('4' ) : /* Double height line, bottom half */
_currentScreen->setLineProperty( LINE_DOUBLEWIDTH , true );
_currentScreen->setLineProperty( LINE_DOUBLEHEIGHT , true );
break;
@ -524,8 +524,8 @@ void Vt102Emulation::processToken(int token, int p, int q)
_currentScreen->setLineProperty( LINE_DOUBLEWIDTH , false);
_currentScreen->setLineProperty( LINE_DOUBLEHEIGHT , false);
break;
case TY_ESC_DE('6' ) : /* Double width, single height line*/
_currentScreen->setLineProperty( LINE_DOUBLEWIDTH , true);
case TY_ESC_DE('6' ) : /* Double width, single height line*/
_currentScreen->setLineProperty( LINE_DOUBLEWIDTH , true);
_currentScreen->setLineProperty( LINE_DOUBLEHEIGHT , false);
break;
case TY_ESC_DE('8' ) : _currentScreen->helpAlign ( ); break;
@ -711,14 +711,14 @@ void Vt102Emulation::processToken(int token, int p, int q)
// SET_BTN_EVENT_MOUSE 1002
// SET_ANY_EVENT_MOUSE 1003
//
//Note about mouse modes:
//There are four mouse modes which xterm-compatible terminals can support - 1000,1001,1002,1003
//Konsole currently supports mode 1000 (basic mouse press and release) and mode 1002 (dragging the mouse).
//TODO: Implementation of mouse modes 1001 (something called hilight tracking) and
//TODO: Implementation of mouse modes 1001 (something called hilight tracking) and
//1003 (a slight variation on dragging the mouse)
//
case TY_CSI_PR('h', 1000) : setMode (MODE_Mouse1000); break; //XTERM
case TY_CSI_PR('l', 1000) : resetMode (MODE_Mouse1000); break; //XTERM
case TY_CSI_PR('s', 1000) : saveMode (MODE_Mouse1000); break; //XTERM
@ -781,17 +781,17 @@ void Vt102Emulation::processToken(int token, int p, int q)
case TY_CSI_PG('c' ) : reportSecondaryAttributes( ); break; //VT100
default:
reportDecodingError();
default:
reportDecodingError();
break;
};
}
void Vt102Emulation::clearScreenAndSetColumns(int columnCount)
{
setImageSize(_currentScreen->getLines(),columnCount);
setImageSize(_currentScreen->getLines(),columnCount);
clearEntireScreen();
setDefaultMargins();
setDefaultMargins();
_currentScreen->setCursorYX(0,0);
}
@ -804,7 +804,7 @@ void Vt102Emulation::sendString(const char* s , int length)
}
void Vt102Emulation::reportCursorPosition()
{
{
char tmp[20];
sprintf(tmp,"\033[%d;%dR",_currentScreen->getCursorY()+1,_currentScreen->getCursorX()+1);
sendString(tmp);
@ -835,7 +835,7 @@ void Vt102Emulation::reportSecondaryAttributes()
void Vt102Emulation::reportTerminalParms(int p)
// DECREPTPARM
{
{
char tmp[100];
sprintf(tmp,"\033[%d;1;1;112;112;1;0x",p); // not really true.
sendString(tmp);
@ -865,13 +865,13 @@ void Vt102Emulation::reportAnswerBack()
*/
void Vt102Emulation::sendMouseEvent( int cb, int cx, int cy , int eventType )
{
if (cx < 1 || cy < 1)
{
if (cx < 1 || cy < 1)
return;
// normal buttons are passed as 0x20 + button,
// mouse wheel (buttons 4,5) as 0x5c + button
if (cb >= 4)
if (cb >= 4)
cb += 0x3c;
//Mouse motion handling
@ -885,11 +885,11 @@ void Vt102Emulation::sendMouseEvent( int cb, int cx, int cy , int eventType )
void Vt102Emulation::sendText( const QString& text )
{
if (!text.isEmpty())
if (!text.isEmpty())
{
QKeyEvent event(QEvent::KeyPress,
0,
Qt::NoModifier,
QKeyEvent event(QEvent::KeyPress,
0,
Qt::NoModifier,
text);
sendKeyEvent(&event); // expose as a big fat keypress event
}
@ -904,7 +904,7 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
if (getMode(MODE_Ansi) ) states |= KeyboardTranslator::AnsiState;
if (getMode(MODE_AppCuKeys)) states |= KeyboardTranslator::CursorKeysState;
if (getMode(MODE_AppScreen)) states |= KeyboardTranslator::AlternateScreenState;
if (getMode(MODE_AppKeyPad) && (modifiers & Qt::KeypadModifier))
if (getMode(MODE_AppKeyPad) && (modifiers & Qt::KeypadModifier))
states |= KeyboardTranslator::ApplicationKeypadState;
// check flow control state
@ -919,8 +919,8 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
// lookup key binding
if ( _keyTranslator )
{
KeyboardTranslator::Entry entry = _keyTranslator->findEntry(
event->key() ,
KeyboardTranslator::Entry entry = _keyTranslator->findEntry(
event->key() ,
modifiers,
states );
@ -932,10 +932,10 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
// (unless there is an entry defined for this particular combination
// in the keyboard modifier)
bool wantsAltModifier = entry.modifiers() & entry.modifierMask() & Qt::AltModifier;
bool wantsAnyModifier = entry.state() &
bool wantsAnyModifier = entry.state() &
entry.stateMask() & KeyboardTranslator::AnyModifierState;
if ( modifiers & Qt::AltModifier && !(wantsAltModifier || wantsAnyModifier)
if ( modifiers & Qt::AltModifier && !(wantsAltModifier || wantsAnyModifier)
&& !event->text().isEmpty() )
{
textToSend.prepend("\033");
@ -948,7 +948,7 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
// TODO command handling
}
else if ( !entry.text().isEmpty() )
else if ( !entry.text().isEmpty() )
{
textToSend += _codec->fromUnicode(entry.text(true,modifiers));
}
@ -976,7 +976,7 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
// set
QString translatorError = tr("No keyboard translator available. "
"The information needed to convert key presses "
"into characters to send to the terminal "
"into characters to send to the terminal "
"is missing.");
reset();
receiveData( translatorError.toUtf8().constData() , translatorError.count() );
@ -991,7 +991,7 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
// Character Set Conversion ------------------------------------------------ --
/*
/*
The processing contains a VT100 specific code translation layer.
It's still in use and mainly responsible for the line drawing graphics.
@ -1002,7 +1002,7 @@ void Vt102Emulation::sendKeyEvent( QKeyEvent* event )
in the pipeline. It only applies to tokens, which represent
plain characters.
This conversion it eventually continued in TerminalDisplay.C, since
This conversion it eventually continued in TerminalDisplay.C, since
it might involve VT100 enhanced fonts, which have these
particular glyphs allocated in (0x00-0x1f) in their code page.
*/
@ -1137,7 +1137,7 @@ void Vt102Emulation::setMode(int m)
case MODE_Mouse1001:
case MODE_Mouse1002:
case MODE_Mouse1003:
emit programUsesMouseChanged(false);
emit programUsesMouseChanged(false);
break;
case MODE_AppScreen : _screen[1]->clearSelection();
@ -1160,14 +1160,14 @@ void Vt102Emulation::resetMode(int m)
if (getMode(MODE_Allow132Columns))
clearScreenAndSetColumns(80);
break;
case MODE_Mouse1000 :
case MODE_Mouse1000 :
case MODE_Mouse1001 :
case MODE_Mouse1002 :
case MODE_Mouse1003 :
emit programUsesMouseChanged(true);
emit programUsesMouseChanged(true);
break;
case MODE_AppScreen :
case MODE_AppScreen :
_screen[0]->clearSelection();
setScreen(0);
break;
@ -1186,9 +1186,9 @@ void Vt102Emulation::saveMode(int m)
void Vt102Emulation::restoreMode(int m)
{
if (_savedModes.mode[m])
setMode(m);
else
if (_savedModes.mode[m])
setMode(m);
else
resetMode(m);
}
@ -1226,10 +1226,10 @@ static void hexdump(int* s, int len)
void Vt102Emulation::reportDecodingError()
{
if (tokenBufferPos == 0 || ( tokenBufferPos == 1 && (tokenBuffer[0] & 0xff) >= 32) )
if (tokenBufferPos == 0 || ( tokenBufferPos == 1 && (tokenBuffer[0] & 0xff) >= 32) )
return;
printf("Undecodable sequence: ");
hexdump(tokenBuffer,tokenBufferPos);
printf("Undecodable sequence: ");
hexdump(tokenBuffer,tokenBufferPos);
printf("\n");
}

@ -1,6 +1,6 @@
/*
This file is part of Konsole, an X terminal.
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
@ -26,7 +26,7 @@
// Standard Library
#include <stdio.h>
// Qt
// Qt
#include <QKeyEvent>
#include <QHash>
#include <QTimer>
@ -37,12 +37,12 @@
#define MODE_AppScreen (MODES_SCREEN+0) // Mode #1
#define MODE_AppCuKeys (MODES_SCREEN+1) // Application cursor keys (DECCKM)
#define MODE_AppKeyPad (MODES_SCREEN+2) //
#define MODE_AppKeyPad (MODES_SCREEN+2) //
#define MODE_Mouse1000 (MODES_SCREEN+3) // Send mouse X,Y position on press and release
#define MODE_Mouse1001 (MODES_SCREEN+4) // Use Hilight mouse tracking
#define MODE_Mouse1002 (MODES_SCREEN+5) // Use cell motion mouse tracking
#define MODE_Mouse1003 (MODES_SCREEN+6) // Use all motion mouse tracking
#define MODE_Ansi (MODES_SCREEN+7) // Use US Ascii for character sets G0-G3 (DECANM)
#define MODE_Mouse1003 (MODES_SCREEN+6) // Use all motion mouse tracking
#define MODE_Ansi (MODES_SCREEN+7) // Use US Ascii for character sets G0-G3 (DECANM)
#define MODE_132Columns (MODES_SCREEN+8) // 80 <-> 132 column mode switch (DECCOLM)
#define MODE_Allow132Columns (MODES_SCREEN+9) // Allow DECCOLM mode
#define MODE_total (MODES_SCREEN+10)
@ -64,40 +64,40 @@ struct CharCodes
/**
* Provides an xterm compatible terminal emulation based on the DEC VT102 terminal.
* A full description of this terminal can be found at http://vt100.net/docs/vt102-ug/
*
* In addition, various additional xterm escape sequences are supported to provide
*
* In addition, various additional xterm escape sequences are supported to provide
* features such as mouse input handling.
* See http://rtfm.etla.org/xterm/ctlseq.html for a description of xterm's escape
* sequences.
* sequences.
*
*/
class Vt102Emulation : public Emulation
{
{
Q_OBJECT
public:
/** Constructs a new emulation */
Vt102Emulation();
~Vt102Emulation();
// reimplemented from Emulation
virtual void clearEntireScreen();
virtual void reset();
virtual char eraseChar() const;
public slots:
// reimplemented from Emulation
public slots:
// reimplemented from Emulation
virtual void sendString(const char*,int length = -1);
virtual void sendText(const QString& text);
virtual void sendKeyEvent(QKeyEvent*);
virtual void sendMouseEvent(int buttons, int column, int line, int eventType);
protected:
// reimplemented from Emulation
virtual void setMode(int mode);
virtual void resetMode(int mode);
virtual void receiveChar(int cc);
private slots:
//causes changeTitle() to be emitted for each (int,QString) pair in pendingTitleUpdates
//used to buffer multiple title updates
@ -120,7 +120,7 @@ private:
bool getMode (int mode);
// saves the current boolean value of 'mode'
void saveMode (int mode);
// restores the boolean value of 'mode'
// restores the boolean value of 'mode'
void restoreMode(int mode);
// resets all modes
// (except MODE_Allow132Columns)
@ -143,7 +143,7 @@ private:
// for the purposes of decoding terminal output
int charClass[256];
void reportDecodingError();
void reportDecodingError();
void processToken(int code, int p, int q);
void processWindowAttributeChange();
@ -177,10 +177,10 @@ private:
TerminalState _currentModes;
TerminalState _savedModes;
//hash table and timer for buffering calls to the session instance
//hash table and timer for buffering calls to the session instance
//to update the name of the session
//or window title.
//these calls occur when certain escape sequences are seen in the
//these calls occur when certain escape sequences are seen in the
//output from the terminal
QHash<int,QString> _pendingTitleUpdates;
QTimer* _titleUpdateTimer;

@ -38,7 +38,7 @@ class KProcessPrivate;
/**
* \class KProcess kprocess.h <KProcess>
*
*
* Child process invocation, monitoring and control.
*
* This class extends QProcess by some useful functionality, overrides

@ -145,7 +145,7 @@ void QTermWidget::findPrevious()
void QTermWidget::search(bool forwards, bool next)
{
int startColumn, startLine;
if (next) // search from just after current selection
{
m_impl->m_terminalDisplay->screenWindow()->screen()->getSelectionEnd(startColumn, startLine);
@ -155,15 +155,15 @@ void QTermWidget::search(bool forwards, bool next)
{
m_impl->m_terminalDisplay->screenWindow()->screen()->getSelectionStart(startColumn, startLine);
}
qDebug() << "current selection starts at: " << startColumn << startLine;
qDebug() << "current cursor position: " << m_impl->m_terminalDisplay->screenWindow()->cursorPosition();
qDebug() << "current cursor position: " << m_impl->m_terminalDisplay->screenWindow()->cursorPosition();
QRegExp regExp(m_searchBar->searchText());
regExp.setPatternSyntax(m_searchBar->useRegularExpression() ? QRegExp::RegExp : QRegExp::FixedString);
regExp.setCaseSensitivity(m_searchBar->matchCase() ? Qt::CaseSensitive : Qt::CaseInsensitive);
HistorySearch *historySearch =
HistorySearch *historySearch =
new HistorySearch(m_impl->m_session->emulation(), regExp, forwards, startColumn, startLine, this);
connect(historySearch, SIGNAL(matchFound(int, int, int, int)), this, SLOT(matchFound(int, int, int, int)));
connect(historySearch, SIGNAL(noMatchFound()), this, SLOT(noMatchFound()));
@ -183,7 +183,7 @@ void QTermWidget::matchFound(int startColumn, int startLine, int endColumn, int
sw->setSelectionEnd(endColumn, endLine - sw->currentLine());
}
void QTermWidget::noMatchFound()
void QTermWidget::noMatchFound()
{
m_impl->m_terminalDisplay->screenWindow()->clearSelection();
}
@ -228,12 +228,24 @@ void QTermWidget::startShellProgram()
m_impl->m_session->run();
}
void QTermWidget::startTerminalTeletype()
{
if ( m_impl->m_session->isRunning() ) {
return;
}
m_impl->m_session->runEmptyPTY();
// redirect data from TTY to external recipient
connect( m_impl->m_session->emulation(), SIGNAL(sendData(const char *,int)),
this, SIGNAL(sendData(const char *,int)) );
}
void QTermWidget::init(int startnow)
{
m_layout = new QVBoxLayout();
m_layout->setMargin(0);
setLayout(m_layout);
m_impl = new TermWidgetImpl(this);
m_impl->m_terminalDisplay->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
m_layout->addWidget(m_impl->m_terminalDisplay);
@ -347,7 +359,7 @@ QString QTermWidget::workingDirectory()
if (!d.exists())
{
qDebug() << "Cannot find" << d.dirName();
goto fallback;
goto fallback;
}
return d.canonicalPath();
#endif
@ -485,9 +497,9 @@ void QTermWidget::setZoom(int step)
{
if (!m_impl->m_terminalDisplay)
return;
QFont font = m_impl->m_terminalDisplay->getVTFont();
font.setPointSize(font.pointSize() + step);
setTerminalFont(font);
}
@ -567,6 +579,11 @@ int QTermWidget::screenColumnsCount()
return m_impl->m_terminalDisplay->screenWindow()->screen()->getColumns();
}
int QTermWidget::screenLinesCount()
{
return m_impl->m_terminalDisplay->screenWindow()->screen()->getLines();
}
void QTermWidget::setSelectionStart(int row, int column)
{
m_impl->m_terminalDisplay->screenWindow()->screen()->setSelectionStart(column, row, true);
@ -582,9 +599,9 @@ void QTermWidget::getSelectionStart(int& row, int& column)
m_impl->m_terminalDisplay->screenWindow()->screen()->getSelectionStart(column, row);
}
void QTermWidget::setSelectionEnd(int& row, int& column)
void QTermWidget::getSelectionEnd(int& row, int& column)
{
m_impl->m_terminalDisplay->screenWindow()->screen()->setSelectionEnd(column, row);
m_impl->m_terminalDisplay->screenWindow()->screen()->getSelectionEnd(column, row);
}
QString QTermWidget::selectedText(bool preserveLineBreaks)
@ -619,3 +636,7 @@ Filter::HotSpot* QTermWidget::getHotSpotAt(int row, int column) const
return m_impl->m_terminalDisplay->filterChain()->hotSpotAt(row, column);
}
int QTermWidget::getPtySlaveFd() const
{
return m_impl->m_session->getPtySlaveFd();
}

@ -55,6 +55,13 @@ public:
//start shell program if it was not started in constructor
void startShellProgram();
/**
* Start terminal teletype as is
* and redirect data for external recipient.
* It can be used for display and control a remote terminal.
*/
void startTerminalTeletype();
int getShellPID();
void changeDir(const QString & dir);
@ -63,8 +70,7 @@ public:
// Terminal font
// Default is application font with family Monospace, size 10
// USE ONLY FIXED-PITCH FONT!
// otherwise symbols' position could be incorrect
// Beware of a performance penalty and display/alignment issues when using a proportional font.
void setTerminalFont(const QFont & font);
QFont getTerminalFont();
void setTerminalOpacity(qreal level);
@ -126,18 +132,19 @@ public:
//! Return current key bindings
QString keyBindings();
void setMotionAfterPasting(int);
/** Return the number of lines in the history buffer. */
int historyLinesCount();
int screenColumnsCount();
int screenLinesCount();
void setSelectionStart(int row, int column);
void setSelectionEnd(int row, int column);
void getSelectionStart(int& row, int& column);
void setSelectionEnd(int& row, int& column);
void getSelectionEnd(int& row, int& column);
/**
* Returns the currently selected text.
@ -165,6 +172,13 @@ public:
*/
Filter::HotSpot* getHotSpotAt(int row, int column) const;
/**
* Returns a pty slave file descriptor.
* This can be used for display and control
* a remote terminal.
*/
int getPtySlaveFd() const;
signals:
void finished();
void copyAvailable(bool);
@ -181,6 +195,13 @@ signals:
void activity();
void silence();
/**
* Emitted when emulator send data to the terminal process
* (redirected for external recipient). It can be used for
* control and display the remote terminal.
*/
void sendData(const char *,int);
public slots:
// Copy selection to clipboard
void copyClipboard();
@ -188,13 +209,13 @@ public slots:
// Paste clipboard to terminal
void pasteClipboard();
// Paste selection to terminal
// Paste selection to terminal
void pasteSelection();
// Set zoom
void zoomIn();
void zoomOut();
/*! Set named key binding for given widget
*/
void setKeyBindings(const QString & kb);

@ -61,7 +61,7 @@ makefile = pyqtconfig.QtGuiModuleMakefile(
# specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
# ".dll" extension on Windows).
makefile.extra_lib_dirs.append("..")
makefile.extra_libs = ["qtermwidget"]
makefile.extra_libs = ["qtermwidget4"]
# Generate the Makefile itself.
makefile.generate()

@ -11,25 +11,73 @@ class QTermWidget : QWidget {
%End
public:
QTermWidget(int startnow = 1, QWidget *parent = 0);
~QTermWidget();
enum ScrollBarPosition
enum ScrollBarPosition
{
NoScrollBar=0,
ScrollBarLeft=1,
ScrollBarRight=2
};
void setTerminalFont(QFont &font);
void setArgs(QStringList &args);
void setTextCodec(QTextCodec *codec);
void setColorScheme(int scheme);
void setSize(int h, int v);
void setHistorySize(int lines);
void setScrollBarPosition(ScrollBarPosition);
void sendText(QString &text);
QTermWidget(int startnow = 1, QWidget *parent = 0);
~QTermWidget();
QSize sizeHint() const;
void startShellProgram();
int getShellPID();
void changeDir(const QString & dir);
void setTerminalFont(QFont &font);
QFont getTerminalFont();
void setTerminalOpacity(qreal level);
void setEnvironment(const QStringList & environment);
void setShellProgram(const QString & progname);
void setWorkingDirectory(const QString & dir);
QString workingDirectory();
void setArgs(QStringList &args);
void setTextCodec(QTextCodec *codec);
void setColorScheme(const QString & name);
static QStringList availableColorSchemes();
void setSize(int h, int v);
void setHistorySize(int lines);
void setScrollBarPosition(ScrollBarPosition);
void scrollToEnd();
void sendText(QString &text);
void setFlowControlEnabled(bool enabled);
bool flowControlEnabled();
void setFlowControlWarningEnabled(bool enabled);
static QStringList availableKeyBindings();
QString keyBindings();
void setMotionAfterPasting(int);
int historyLinesCount();
int screenColumnsCount();
void setSelectionStart(int row, int column);
void setSelectionEnd(int row, int column);
void getSelectionStart(int& row, int& column);
void getSelectionEnd(int& row, int& column);
QString selectedText(bool preserveLineBreaks = true);
void setMonitorActivity(bool);
void setMonitorSilence(bool);
void setSilenceTimeout(int seconds);
signals:
void finished();
void copyAvailable(bool);
void termGetFocus();
void termLostFocus();
void termKeyPressed(QKeyEvent *);
void urlActivated(const QUrl&);
void bell(const QString& message);
void activity();
void silence();
public slots:
void copyClipboard();
void pasteClipboard();
void pasteSelection();
void zoomIn();
void zoomOut();
void setKeyBindings(const QString & kb);
void clear();
void toggleShowSearchBar();
protected:
void resizeEvent(QResizeEvent *e);
void resizeEvent(QResizeEvent *e);
private:
void *createTermWidget(int startnow, void *parent);
void *createTermWidget(int startnow, void *parent);
};

@ -19,12 +19,16 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import sys, signal
from PyQt4 import Qt
from PyQt4.QtCore import SIGNAL, SLOT
import QTermWidget
signal.signal(signal.SIGINT, signal.SIG_DFL)
a = Qt.QApplication(sys.argv)
w = QTermWidget.QTermWidget()
w.show()
w.connect(w, SIGNAL('finished()'), a, SLOT('quit()'))
a.exec_()

Loading…
Cancel
Save