1

我把 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

4

2 回答 2

0

实际上,这是 LightTable 中的一个错误。

我打开了一个问题(https://github.com/LightTable/LightTable/issues/1762)并提交了一个补丁(https://github.com/LightTable/LightTable/pull/1763)来解决这个问题:

这里有2个问题:

  • 如果不是从终端调用,当前部署的 Bash 脚本不会将任何参数传递给 LightTable,但这是需要的,例如制作 gnome 桌面快捷方式。在 Ubuntu 下使用 ALT+F2 启动器也可以重现此问题。
  • 独立 LightTable 目前无法打开名称中包含“ ”字符的文件。
于 2014-12-03T09:54:21.227 回答
0

您的问题具有 tl;dr 质量。

当您存储"$@"在变量中时,您确实必须使用数组和大量引号来保留带有空格的元素:

ARGS=("$@")
CORRECTED=("${ARGS[@]//-/<d>}")
CORRECTED=("${CORRECTED[@]// /<s>}")

但是你必须传递参数的方式是一个问题:

LD_LIBRARY_PATH="$HERE:$LD_LIBRARY_PATH" $HERE/$BIN "<d><d>dir=`pwd`<s>$CORRECTED" &

不可能将数组扩展为单个以空格分隔的字符串,然后以某种方式提取具有重要空格的元素。您可能必须这样做,看看它是否有效:

export LD_LIBRARY_PATH="$HERE:$LD_LIBRARY_PATH"   # might as well put on own line
"$HERE/$BIN" "<d><d>dir=`pwd`<s>" "${CORRECTED[@]}" &
# ...........^^^^^^^^^^^^^^^^^^^^ standalone argument
于 2014-10-02T13:36:11.307 回答