在 dreamweaver 的文件面板选择两个文件,右击之后可以看到有"比较本地文件"这个选项,可惜 dreamweaver 本身并没有提供文件比较的功能,需要在“首先参数”中指定第三方文件比较工具。我原本装有 gvim ,支持文件比较,但需要指定-d参数进入比较模式(gvim.exe -d <LEFT_FILE_PATH> <RIGHT_FILE_PATH>)。令人发指的是 dreamweaver 只能指定可执行程序,不能作任何 customize,也就是完全不能添加参数,有够dumb。
无奈之下,只好操起非常不熟练的 c,做了个 adapter, 有需要在 dreamweaver 中使用文件比较功能的朋友请点击这里下载
原理
程序比较简单,用一个文本文件存储自定义命令,adapter 收到 dreamweaver 传入的两个文件名之后,读取文本文档中的自定义命令样式,用 sprintf 把文件名格式进去之后再调用。
源代码:
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/*
* File: main.c
* Author: Klesh Wong
*
* Created on 2008年11月10日, 下午15:07
*/
#include <windows.h>
#include <stdio.h>
int main(int argc, char** argv) {
char *cwd_path = (char *) getcwd(NULL, 0);
char *cnf_name = "cmd";
char *cnf_path = (char *) calloc(strlen(cwd_path) + strlen(cnf_name) + 2, sizeof (char));
strcat(cnf_path, cwd_path);
strcat(cnf_path, "\\");
strcat(cnf_path, cnf_name);
FILE *cmd_file;
if (cmd_file = fopen(cnf_path, "r")) {
char cmd_tpl[200], cmd_str[255];
// process cmd config file
char c;
int i = 0;
int skip = FALSE;
while ((c = getc(cmd_file)) > 0) {
if (i == 0) {
if (c == ' ') // skip initial space
continue;
else if (c == '#') // skip comment
skip = TRUE;
}
if (c == 'r' || c == 'n') {
if (i)
break;
else
skip = FALSE;
} else {
if (!skip) cmd_tpl[i++] = c;
}
}
// done, close cmd file.
fclose(cmd_file);
// add string terminate to command template.
cmd_tpl[i] = NULL;
// add filenames to command template.
sprintf(cmd_str, cmd_tpl, argv[1], argv[2]);
// launch command without waiting it returns which system() function does.
STARTUPINFO startinfo;
ZeroMemory(&startinfo, sizeof (STARTUPINFO));
startinfo.cb = sizeof (STARTUPINFO);
startinfo.lpReserved = NULL;
startinfo.lpDesktop = NULL;
startinfo.lpTitle = NULL;
startinfo.dwFlags = 0;
startinfo.cbReserved2 = 0;
startinfo.lpReserved2 = NULL;
PROCESS_INFORMATION procinfo;
ZeroMemory(&procinfo, sizeof (PROCESS_INFORMATION));
CreateProcess(NULL, cmd_str, NULL, NULL, FALSE, 0, NULL, NULL, &startinfo, &procinfo);
CloseHandle(procinfo.hProcess);
CloseHandle(procinfo.hThread);
}
free(cnf_path);
free(cwd_path);
return (EXIT_SUCCESS);
}
|
cmd 文件内容:
1
2
3
4
5
6
|
# Author : Klesh Wong
# Blog : http://kleshwong.com
# this is totally freeware.
# "c:Program FilesTortoiseSVNbinTortoiseMerge.exe" /theirs:%s /base:%s
"c:\Program Files\Vim\vim72\gvim.exe" -d %s %s
|
压缩包:
下载后解压到某一目录
1.编辑目录下面的 cmd 文件,指定文件比较程序的调用格式,
2.在 dreamweaver 的“首选参数”,右边点击“文件比较”,“浏览”定位到 dreamweaver_diff_adapter.exe 确定
3.在“文件面板”,先点击一个文件,再按 ctrl 点击另一个要比较的文件,右击选择“比较本地文件”,如果文件比较软件正常弹出即说明运行正常,否则请检查文件比较程序是否能正常运行,调用格式是否正确。
推荐使用 gvim 或者 tortoise svn 的比较功能