我把 LightTable 放在 /opt/LightTable
默认情况下,当您在 ubuntu 14.04 64 位中安装文本编辑器 LightTable 时,当您右键单击要使用它打开的文件时,您没有“使用 LightTable 打开”。
因此我创建了一个文件 /home/theuser/.local/share/applications/LightTable.desktop 包含:
[Desktop Entry]
Name=LighTable Text Editor
Comment=Edit text files
Exec=/opt/LightTable/LightTable %f
Terminal=false
Type=Application
Icon=/opt/LightTable/core/img/lticon.png
Categories=Utility;TextEditor;
StartupNotify=true
MimeType=text/plain
这样当我想用 LightTable 打开一个文件时,就会出现“用 LightTable 打开”。现在,问题开始了。当我这样做时,它只打开 LightTable,就好像我只运行脚本一样
/opt/LightTable/LightTable
因此我去看了剧本:
#!/bin/bash
BIN=ltbin
HERE=`dirname $(readlink -f $0)`
LIBUDEV_0=libudev.so.0
LIBUDEV_1=libudev.so.1
add_udev_symlinks() {
# 64-bit specific; look for libudev.so.0, and if that can't be
# found link it to libudev.so.1
FOLDERS="/lib64 /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib64 /usr/lib /lib"
for folder in $FOLDERS; do
if [ -f "${folder}/${LIBUDEV_0}" ]; then
return 0
fi
done
for folder in $FOLDERS; do
if [ -f "${folder}/${LIBUDEV_1}" ]; then
ln -snf "${folder}/${LIBUDEV_1}" "${HERE}/${LIBUDEV_0}"
return 0
fi
done
echo "${LIBUDEV_0} or ${LIBUDEV_1} not found in any of ${FOLDERS}".
exit 1
}
add_udev_symlinks
ARGS="$@"
CORRECTED=${ARGS//-/<d>}
CORRECTED=${CORRECTED// /<s>}
if [ -t 0 ] && [ $# != 0 ]; then
#We're in a terminal...
LD_LIBRARY_PATH="$HERE:$LD_LIBRARY_PATH" $HERE/$BIN "<d><d>dir=`pwd`<s>$CORRECTED" &
else
#We were double clicked
LD_LIBRARY_PATH="$HERE:$LD_LIBRARY_PATH" $HERE/$BIN &
fi
并将其结尾 if/else/fi 替换为简单的:
LD_LIBRARY_PATH="$HERE:$LD_LIBRARY_PATH" $HERE/$BIN "<d><d>dir=`pwd`<s>$CORRECTED" &
以便选择正确的行为(从终端打开文件时的行为)。
这几乎让我开心。现在,如果我双击一个文件或右键单击它并选择“使用 LightTable 打开”,该文件确实是在 LightTable 中打开的......但是:只有当文件名和文件的路径没有他们名字中的空格。
如果名为“文件”的文件在路径thepath中没有空格,当我双击它时,它会在LightTable中打开两个空白文件“the”和“file”。如果路径中有空格,则相同的行为是固定的。
有人会有想法吗?我想我应该更正 bash 脚本,但我不是这方面的专家。(我什至不确定脚本是否真的错了......)
提前致谢
MEF