如何更改Emacs自动恢复文件的名称?

时间:2009-03-16 16:32:29

标签: emacs

目前它以格式保存文件:

.#main.c -> sara@sara.home.com.27017:1231918415

这使它成为问题,因为它以“.c”结尾。

我需要它。#main.c#

更新:我有emacs 22.1

3 个答案:

答案 0 :(得分:7)

这不是自动恢复文件,而是用作文件锁定标记的链接。

更新

如果我告诉你,你会把我介绍给Summer Glau吗?

改变这一点可能并不容易;我只是挖了一下它看起来像是在C代码中设置的。但是让我们问下一个问题:你为什么这么想?我猜你正在为那些你不想与之匹配的.c文件打一个正则表达式。如果是这样,请注意所有这些lockfile链接都以.#开头 - 这总是硬编码 - 所以你总是可以排除名称与“^。#”匹配的文件(取决于你使用的是哪种正则表达式语法。)< / p>

如果你真的想要破解它,那就是在filelock.c中的EMACS 22的第320行。这是代码:

/* Write the name of the lock file for FN into LFNAME.  Length will be
   that of FN plus two more for the leading `.#' plus 1 for the
   trailing period plus one for the digit after it plus one for the
   null.  */
#define MAKE_LOCK_NAME(lock, file) \
  (lock = (char *) alloca (SBYTES (file) + 2 + 1 + 1 + 1), \
   fill_in_lock_file_name (lock, (file)))

static void
fill_in_lock_file_name (lockfile, fn)
     register char *lockfile;
     register Lisp_Object fn;
{
  register char *p;
  struct stat st;
  int count = 0;

  strcpy (lockfile, SDATA (fn));

  /* Shift the nondirectory part of the file name (including the null)
     right two characters.  Here is one of the places where we'd have to
     do something to support 14-character-max file names.  */
  for (p = lockfile + strlen (lockfile); p != lockfile && *p != '/'; p--)
    p[2] = *p;

  /* Insert the `.#'.  */
  p[1] = '.';
  p[2] = '#';

  p = p + strlen (p);

  while (lstat (lockfile, &st) == 0 && !S_ISLNK (st.st_mode))
    {
      if (count > 9)
    {
      *p = '\0';
      return;
    }
      sprintf (p, ".%d", count++);
    }
}

答案 1 :(得分:2)

您可以升级到emacs 24.3并将以下行添加到.emacs文件中:

(setq create-lockfiles nil)

答案 2 :(得分:0)

这很奇怪,默认情况下每端都应该有#..

您可以通过重新定义auto-save-file-name-p和make-auto-save-file-name函数来自定义名称。在GNU emacs中,您可以将elisp添加到.emacs文件中。