升级到 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";};
更新
我犯了一个错误,写错了UPDATED
(UPTDATED
),现在是正确的。
更新
最新版本有效:我已经验证:-)
答案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