Cherry-picking upstream version 0.6.0+20150709.
Symbols fixed for amd64 and i386
This commit is contained in:
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
Normal file
1
debian/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/mangled
|
7
debian/changelog
vendored
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 ]
|
||||
|
235
debian/libqtermwidget5-0.symbols
vendored
235
debian/libqtermwidget5-0.symbols
vendored
@ -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,14 +293,8 @@ 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
|
||||
@ -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,14 +544,8 @@ 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
|
||||
@ -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
debian/source/options
vendored
1
debian/source/options
vendored
@ -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;
|
||||
|
186
lib/Emulation.h
186
lib/Emulation.h
@ -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"
|
||||
|
86
lib/Filter.h
86
lib/Filter.h
@ -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; }
|
||||
|
||||
|
54
lib/Pty.cpp
54
lib/Pty.cpp
@ -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;
|
||||
|
69
lib/Pty.h
69
lib/Pty.h
@ -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;
|
||||
|
118
lib/Screen.cpp
118
lib/Screen.cpp
@ -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;
|
||||
|
264
lib/Screen.h
264
lib/Screen.h
@ -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("<");
|
||||
else if (ch == '>')
|
||||
text.append(">");
|
||||
else
|
||||
else
|
||||
text.append(ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
text.append(" "); //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…
x
Reference in New Issue
Block a user