【问题标题】:Open plain text files with LightTable by default when double-clicking them (in ubuntu 14.04 64bits)双击时默认使用LightTable打开纯文本文件(在ubuntu 14.04 64bits中)
【发布时间】:2014-11-27 12:00:13
【问题描述】:

我把 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 中打开的...但是:只有在文件名和路径为文件名称中没有空格

如果名为“文件”的文件在路径中没有空格的路径中,当我双击它时,它会在LightTable中打开两个空白文件“文件”和“文件”。如果路径中包含空格,则相同的行为是固定的。

有人有想法吗?我想我应该更正 bash 脚本,但我不是这方面的专家。 (我什至不确定脚本是否真的错了......)

提前致谢

MEF

【问题讨论】:

标签: bash terminal ubuntu-14.04 lighttable


【解决方案1】:

你的问题有一个 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

【讨论】:

  • 谢谢你的回答。我只是试一试,双击纯文本文件的结果现在打开了一个空的 LightTable 实例。 Wrt 太久没有阅读问题,我会说我添加了所需信息的最低限度:配置,我已经调整的内容,以及脚本。不知道如何缩短它而不是不精确......但我下次会尝试做得更好:-)
【解决方案2】:

其实这是LightTable的一个bug。

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

这里有两个问题:

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

【讨论】:

  • 很好。谢谢 !在此之后,lighttable 将几乎完美。
猜你喜欢
  • 2019-05-25
  • 2023-03-19
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多