我正在尝试编译和静态链接 Emacs,因为在工作中我被迫在运行 CentOS 5.1 的生产服务器上通过 ssh 进行 JavaScript 开发,该服务器运行的包管理器配置损坏,而 Emacs21 没有 js 模式每当我尝试安装和使用 js[23]-mode.el 或 javascript.el 时都会产生错误,而我没有时间在工作中进行调试。
c 模式缩进所有内容
$().ready(function() {
like();
$(this).andIOnlyHave1024Pixels(function () {
etc ();
etc ();
我将如何制作更现代版本的 Emacs 的便携式副本?或者改变 c 模式? (或者任何避免使用 vi 的方法...)
谢谢
我想我已经开始有了答案。 首先,您需要能够在与运行时机器具有相同架构的某些机器上构建 Emacs。 您可以通过交叉编译来解决这个问题,但这会使一切变得更加复杂。
tar xf emacs.tar.bz2
cd emacs
./autogen.sh
./configure --with-x=no --prefix=/usr/local
make
mkdir install
make DESTDIR=$PWD/install install
您可以添加任何您想要的前缀,它必须是您要在运行时计算机上安装 Emacs 的位置。 X 被禁用,因为它大大减少了所需的库的数量,而且无论如何你都是通过 ssh 运行的。
现在弄清楚运行 Emacs 需要哪些共享库。 快速浏览一下 Emacs 附带的所有可执行文件就会发现,这是整个 Emacs 安装所需的库的超集。
$ ldd install/usr/local/bin/emacs
linux-vdso.so.1 (0x00007fff427fe000)
libasound.so.2 => /usr/lib/libasound.so.2 (0x00007f66b25a0000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f66b2398000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f66b2151000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f66b1de9000)
libgpm.so.2 => /usr/lib/libgpm.so.2 (0x00007f66b1be2000)
libncursesw.so.5 => /usr/lib/libncursesw.so.5 (0x00007f66b1983000)
libgnutls.so.28 => /usr/lib/libgnutls.so.28 (0x00007f66b1673000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f66b1457000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f66b1159000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f66b0dac000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f66b0ba8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f66b2897000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f66b0992000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f66b076f000)
libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x00007f66b054e000)
libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007f66b033a000)
libnettle.so.4 => /usr/lib/libnettle.so.4 (0x00007f66b010c000)
libhogweed.so.2 => /usr/lib/libhogweed.so.2 (0x00007f66afedd000)
libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f66afc66000)
因此,将所有这些库复制到安装树中的某个目录中。
linux-vdso.so
是虚拟的,不能/不需要复制。
mkdir install/usr/local/solib
cp /usr/lib/libasound.so.2 /usr/lib/librt.so.1 /usr/lib/libdbus-1.so.3 /usr/lib/libxml2.so.2 /usr/lib/libgpm.so.2 /usr/lib/libncursesw.so.5 /usr/lib/libgnutls.so.28 /usr/lib/libpthread.so.0 /usr/lib/libm.so.6 /usr/lib/libc.so.6 /usr/lib/libdl.so.2 /lib64/ld-linux-x86-64.so.2 /usr/lib/libz.so.1 /usr/lib/liblzma.so.5 /usr/lib/libp11-kit.so.0 /usr/lib/libtasn1.so.6 /usr/lib/libnettle.so.4 /usr/lib/libhogweed.so.2 /usr/lib/libgmp.so.10 install/usr/local/solib/
全部存档。 我最近很喜欢squashfs,如果你愿意的话可以使用tar。
mksquashfs install/usr/local emacs.sfs -noappend
在运行时计算机上,提取文件并将其复制到前缀。 有了squashfs,我们就可以挂载它了。
mount emacs.sfs /usr/local
启动 emacs,并将
LD_LIBRARY_PATH
设置为使用您之前复制的库。
LD_LIBRARY_PATH=/usr/local/solib /usr/local/bin/emacs
希望这会起作用。 我在一台与我构建的操作系统相当相似的虚拟机中进行了测试,因此当它们相差很大时,可能会出现问题。
如果您可以在计算机中编译 emacs,则可以从那里运行而无需安装它。 只需执行编译为您创建的二进制文件(您可能需要更改路径,因为来自不同版本的 emacsclient 可能无法很好地协同工作)。
我知道这不是您想要的(因为 emacs 不可移植,并且您可能在那台机器上缺少编译环境),但这个技巧可能对您有用。
当然,assem 建议的 TRAMP over ssh 方法是更好的解决方案(也是我个人使用的)
我通常使用
sshfs
来挂载远程文件系统并使用 Emacs 编辑其中的文件。它工作得相当可靠。
另一个不错的选择是 Emacs 克隆 mg,因为它更小、更简单,将其编译成静态可执行文件应该更容易。即使它缺少真正的 Emacs 的大部分功能,您仍然会有宾至如归的感觉。
有一个名为 Portacle 的便携式 Lisp 开发环境,可以从 USB 记忆棒运行。
Portacle 包括 Emacs 等。
它适用于 MS Windows、Linux 和 MacOS。