konsole-4.9.2的简单功能补丁 |
发布: 2012-10-29 13:14 |
通过使用kbookmark类的description字段存储密码(当然是明文存储的), 在执行kbookmark中的ssh会话连接时,取出这个字码的值, 通过系统的sshpass执行自动登陆。 补丁.patch [code type="diff"] diff --git a/src/BookmarkHandler.cpp b/src/BookmarkHandler.cpp index 99bf0ce..b4e6c8b 100644 --- a/src/BookmarkHandler.cpp +++ b/src/BookmarkHandler.cpp @@ -68,9 +68,20 @@ BookmarkHandler::~BookmarkHandler() delete _bookmarkMenu; } +#include void BookmarkHandler::openBookmark(const KBookmark& bm, Qt::MouseButtons, Qt::KeyboardModifiers) { - emit openUrl(bm.url()); + // qDebug()< + if (bm.description().trimmed().length() > 0) { + KUrl aurl = bm.url(); + aurl.setPassword("aaaabcd"); + aurl.setPassword(bm.description().trimmed()); + qDebug()< + } else { + emit openUrl(bm.url()); + } } void BookmarkHandler::openFolderinTabs(const KBookmarkGroup& group) { diff --git a/src/SessionController.cpp b/src/SessionController.cpp index ccae55f..8094f7d 100644 --- a/src/SessionController.cpp +++ b/src/SessionController.cpp @@ -271,6 +271,8 @@ void SessionController::rename() void SessionController::openUrl(const KUrl& url) { + // qDebug()< // handle local paths if (url.isLocalFile()) { QString path = url.toLocalFile(); @@ -281,6 +283,23 @@ void SessionController::openUrl(const KUrl& url) QString command = url.prettyUrl(); if (!command.isEmpty()) _session->emulation()->sendText(command + '\r'); + } else if (url.protocol() == "ssh" && url.password().length() > 0 + && (QFile("/usr/bin/sshpass").exists() + || QFile("/usr/local/bin/sshpass").exists())) { + QString esc_passwd = url.password().replace("!", "\\!").replace("$", "\\$"); + QString sshCommand = "sshpass -p " + esc_passwd + " ssh -CXY "; + + if (url.port() > -1) { + sshCommand += QString("-p %1 ").arg(url.port()); + } + if (url.hasUser()) { + sshCommand += (url.user() + '@'); + } + if (url.hasHost()) { + sshCommand += url.host(); + } + + _session->sendText(sshCommand + '\r'); } else if (url.protocol() == "ssh") { QString sshCommand = "ssh "; [/code] 虽然一直在用kde,但这还是第一次做kde的功能补丁,这次其实只了解了KBookmark类的实现位置和功能。 KBookmark实现是在kio组件,比较核心的部分,方便上层组件共享。 了解了konsole中的bookmarkhandler和sessioncontroller两个部分。 未来计划: 除了这个功能hack之外,还希望能做个ssh会话的标签clone功能。 |
原文: http://qtchina.tk/?q=node/693 |
Powered by zexport
|