Ubuntu 19.10 中的 VS Code 打开目录而不是系统文件管理器

Ubuntu 19.10 中的 VS Code 打开目录而不是系统文件管理器

升级到 Ubuntu 19.10 后,我注意到代码中存在一个奇怪的行为:如果我双击一个目录或一个单元,或者右键单击一个目录并尝试打开,则该目录会通过代码打开,除非 nemo 或 nautilus。

我通过以下方式安装代码微软仓库将 repo 添加到 apt 后

我不知道这是否是微软、gnome 还是 ubuntu 的问题。

但这种行为并不友好。

答案1

我找到了一种暂时解决问题的方法。

查找
~/.local/share/applications/mimeapps.list
并确保 inode/directory= 已设置为您的文件管理器。

例如:
inode/directory=nautilus-folder-handler.desktop;

文件也一样~/.config/mimeapps.list

然后找到代码桌面文件。
我的是/usr/share/applications/code.desktop 并更改行

MimeType=text/plain;inode/directory;

MimeType=text/plain;

然后做 $ sudo update-desktop-database

对我来说这是可行的,但如果 vscode 更新,则所有内容都会重置为初始行为。

恢复/usr/share/applications/code.desktop至初始值。

为了让一切更快,我编写了一个脚本:

 #!/bin/bash
 sudo sed -i "s/inode\/directory;//" /usr/share/applications/code.desktop
 sudo update-desktop-database

等待稳定的解决方案这可能是可以接受的

更新

我已将上述脚本放在中并按after-upgrade-code.sh以下方式进行更改(我将它放在 PATH 环境中):

#!/bin/bash
UPDATED="$(tac /var/log/apt/history.log|sed '/End-Date/,$!d;/Start-Date/q'|tac|grep 'Upgrade.*code')"
if [[ ! -z $UPDATED ]]
then
  sudo sed -i "s/inode\/directory;//" /usr/share/applications/code.desktop
  sudo update-desktop-database
fi
exit 0

我把它说成/etc/apt/apt.conf.d/100update

Post-Invoke {"after-upgrade-code.sh";};

如果最后一次 apt upgrade 对代码进行了更改,它将升级 code.desktop

更新

我做了一些测试,但我不确定 postinvoke 脚本是否工作正常:问题是我不确定 history.log 是否在 Post-Invoke 时更新,所以如果历史记录未更新,脚本就无法执行任何操作。

这是版本 2,它将触发:

#!/bin/bash
CHECK="$(date '+%Y-%m-%d %H:%M')" 
CHECK="${CHECK:0:-1}.*upgrade code"
UPDATED=$(sudo grep "$CHECK" /var/log/dpkg.log)
#UPDATED="$(tac /var/log/apt/history.log|sed '/End-Date/,$!d;/Start-Date/q'|tac|grep 'Upgrade.*code')"
if [[ ! -z $UPDATED ]]
then
  sudo sed -i "s/inode\/directory;//" /usr/share/applications/code.desktop
  sudo update-desktop-database
    echo "after-update-code is been executed"
else
    echo "after-update-code is been not executed"
fi
exit 0

这个:CHECK="$(date '+%Y-%m-%d %H:%M')"获取仅需一分钟的日期时间。
这个:${CHECK:0:-1}删除分钟单位并保留十,因此
grep:grep "$CHECK" /var/log/dpkg.log
检查“代码”升级是否在十分钟内完成,如果经过验证,则尝试更新 code.desktop 以避免“代码”将用于打开文件夹。

我已经改变了钩子触发器:
sudo cat /etc/apt/apt.conf.d/100update
给出:
DPkg::Post-Invoke {"/home/leonardo/sviluppo/script/after-upgrade-code.sh";};

更新

我犯了一个错误,写错了UPDATEDUPTDATED),现在是正确的。

更新

最新版本有效:我已经验证:-)

答案2

复制文件:

cp /usr/share/applications/code.desktop ~/.local/share/applications/code.desktop

并编辑~/.local/share/applications/code.desktop

MimeType=text/plain;inode/directory;application/x-code-workspace;

MimeType=text/plain;application/x-code-workspace;

答案3

在 gnome 中,您可以使用此命令将自然文件夹浏览器设置为默认:

xdg-mime default org.gnome.Nautilus.desktop inode/directory

答案4

还请检查 mimetype inode/mount-point

xdg-mime query default inode/mount-point

如果它是空的,vscode 可以打开挂载点;将文件管理器设置为挂载点的默认 mimetype:

xdg-mime default org.kde.dolphin.desktop inode/mount-point

相关内容