w3m 无法创建配置目录 (~C:/msys32/.w3m)!

w3m Can't create config directory (~C:/msys32/.w3m)!

我刚刚使用 TDM-GCC 编译器为 Windows 编译了 w3m,但在 运行 之后它给出了:

$ w3m
Can't create config directory (~C:/msys32/.w3m)!Can't find termcap entry xterm-256color

在我的电脑上有 C:/msys32,我在 ConEmu 终端模拟器上使用 C:/msys32/usr/bin/sh.exe 作为 shell .

$ echo ~/ 

打印/home/myusername

我试过使用 sysconfdir 选项配置 w3m,例如

 ./configure --sysconfdir=/etc

但是我给 --sysconfdir 的任何选项都对结果没有影响。

我查看了 config.log 文件,搜索 .w3m 看到了这一行:

RC_DIR='~/.w3m'

显然,w3m 正在添加 C:/msys32 所以它打印 ~C:/msys32/.w3m

我该如何解决?谢谢。

嗯,我解决了。

首先,我搜索了包含错误路径的二进制文件:

$ egrep -ir "~C:/msys32" .

几个二进制文件包含了它。但其中一个包括错误操作的起源,它是 indep.c 并且名为 "expandPath" 的函数正在生成那条错误的道路。作为一个快速而肮脏的 hack,我修改了导致错误的部分,这里是补丁:

--- indep_orig.c    2016-10-08 12:39:43.656250000 +0300
+++ indep.c 2016-10-07 19:50:18.812500000 +0300
@@ -69,6 +69,7 @@
 }

 #ifndef HAVE_BCOPY
+/*
 void
 bcopy(const void *src, void *dest, int len)
 {
@@ -79,12 +80,12 @@
    for (i = len - 1; i >= 0; i--)
        ((char *)dest)[i] = ((const char *)src)[i];
     }
-    else {         /* src > dest */
+    else {         // src > dest 
    for (i = 0; i < len; i++)
        ((char *)dest)[i] = ((const char *)src)[i];
     }
 }
-
+*/
 void
 bzero(void *ptr, int len)
 {
@@ -246,12 +247,15 @@
      if (*p == '/' || *p == '[=11=]') {    /* ~/dir... or ~ */
        extpath = Strnew_charp(getenv("HOME"));
    }
-   else
-       goto rest;
+     else
+         {  extpath = Strnew_charp(getenv("HOME"));
+        return extpath->ptr;
+         }
+   /*      goto rest;
    if (Strcmp_charp(extpath, "/") == 0 && *p == '/')
        p++;
    Strcat_charp(extpath, p);
-   return extpath->ptr;
+   return extpath->ptr; */
     }
   rest:
     return name;