LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1980|回复: 22

KDE下查看CHM文件

[复制链接]
发表于 2004-4-22 16:26:09 | 显示全部楼层 |阅读模式
还记得这个patch么?
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=87484

我又改进了一下,现在可以使用frame来显示chm了



原图

patch下载
发表于 2004-4-22 18:13:31 | 显示全部楼层
准备gcc3.4的ebuild出来之后全部rebuild,然后使用这个patch
 楼主| 发表于 2004-4-22 18:40:40 | 显示全部楼层
3.4现在编译kde还有问题
pch也不好用
等等吧。赫赫
发表于 2004-4-22 19:35:08 | 显示全部楼层
看了一下补丁,好像如果同时打开两个CHM文件的话,就会出问题吧,是不是可以将那个FRAME文件名中加入个随机串
 楼主| 发表于 2004-4-22 19:44:58 | 显示全部楼层
同时开两个不会出问题,这个我考虑过。因为konqueror load之后进入内存,这时候就算删掉那个index文件也没关系了,开另外一个,覆盖掉index文件自然也没事。

但是。。。的确有问题,比如先用root,再用普通用户,会造成文件的权限错误,kde的临时文件是放在/tmp/kde-${user}下面的,如果用这个目录+随机串应该就ok了,但是临时文件就不能清除了。改成/tmp/kde-${user}/+固定文件名可能是最合适的方案吧。
发表于 2004-4-22 20:13:05 | 显示全部楼层
可以用KDE中内建的那个自动分配一个可用的临时文件的函数,他好像还会自动删除的,当那个文件没用的的时候
 楼主| 发表于 2004-4-22 20:23:10 | 显示全部楼层
ft..刚刚埋头拿KUSer改写完。。上来看见你这个。。KTempFIle..
我继续改..这是KUser的版本。。

+        QString uname = KUser(KUser::UseEffectiveUID).loginName();
+        QString fname = QString();
+        fname = "/tmp/kde-"+uname+"/"+"kchm-index.html";
+        QFile f(fname);
+        if ( !f.open( IO_WriteOnly ) )
+                return;
 楼主| 发表于 2004-4-22 20:39:55 | 显示全部楼层
改完了,使用KTempFile,看着也清爽了很多
//thx liuspider
下载还是在第一贴
发表于 2004-4-22 21:19:22 | 显示全部楼层
辛苦了 ;)

呵呵,你的主页上补丁又可以更新了
发表于 2004-4-23 18:00:03 | 显示全部楼层
你做的这个补丁有点小毛病:无法正确处理chm文件名是中文的情况
我改了一下,主要就是那个“(const char *)(url.path().local8Bit())”,我也想不出来好看一点的写法了,还请大虾指正:


[PHP]
--- kdevelop.old/parts/doctreeview/chm/chm.cpp        2004-04-23 17:45:30.000000000 +0800
+++ kdevelop/parts/doctreeview/chm/chm.cpp        2004-04-23 17:43:44.000000000 +0800
@@ -29,6 +29,7 @@
#include <kglobal.h>
#include <kurl.h>
#include <kmimemagic.h>
+#include <ktempfile.h>

#include "chm.h"

@@ -85,9 +86,15 @@
         error( KIO::ERR_DOES_NOT_EXIST, url.prettyURL() );
         return;
     }
-
+       
     QByteArray theData;

+        //init..
+        //add by lucida lucida@users.sf.net
+        QString fname = QString();
+        KTempFile f("",".html");
+        fname = f.name();
+        QTextStream *t = f.textStream();
     if (path == "/") {
         int offset = m_dirMap["/@contents"].offset;
         int length = m_dirMap["/@contents"].length;
@@ -118,7 +125,9 @@
                 name = nameParam.cap(1);
                                if (obj.find(localParam) != -1) {
                                        local = localParam.cap(1);
-                                        output += "<a href=\"" + local + "\">" + name + "</a>";
+                        //add by lucida lucida@users.sf.net
+                                        output += "<a target=\"browse\" href=\"ms-its:";
+                    output += (const char *)(url.path().local8Bit()) + local + "\">" + name + "</a>";
                                } else {
                                        output += name;
                                }
@@ -127,7 +136,8 @@
                                QString link = mergeParam.cap(1);
                                QString href = link.left(link.find("::"));
                                QString path = m_chmFile.left(m_chmFile.findRev("/") + 1);
-                                output += " (<a href=\"" + path + href + "\">link</a>)";
+                        //add by lucida lucida@users.sf.net
+                                output += " (<a target=\"browse\" href=\"ms-its:" + url.path() + path + href + "\">link</a>)";
                        }
         }
                output += s.mid(old);
@@ -135,8 +145,21 @@
         //KMimeMagicResult * result = KMimeMagic::self()->findBufferFileType( output, path );
         //kdDebug() << "Emitting mimetype " << result->mimeType() << endl;
         //mimeType( result->mimeType() );
-        data(output.local8Bit());
-        processedSize(output.length());
+               
+                //construct the frame
+                //add by lucida lucida@users.sf.net
+                QString framestr = QString("<HEAD>\n");
+                framestr += "</HEAD><FRAMESET COLS=\"25%, *\">\n";
+                framestr += "<FRAME NAME=\"index\" src=\"file:"+ fname+"\"" + "marginwidth=\"2\"></FRAME>\n";
+                framestr += "<FRAME NAME=\"browse\">\n";
+                framestr += "</FRAME>\n";
+                framestr += "</FRAMESET></HTML>";
+                //write index file
+                //add by lucida lucida@user.sf.net
+                *t << QString::fromLocal8Bit(output.latin1()) << endl;
+
+                data(framestr.local8Bit());
+               processedSize(framestr.length());
     } else {
         int offset = m_dirMap[path].offset;
         int length = m_dirMap[path].length;
@@ -150,7 +173,7 @@
         theData.resetRawData(&m_contents[offset], length);
         processedSize(length);
     }
-
+        f.close();
     finished();
}
[/PHP]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表