似乎 Nautilus 3.2.1/Ubuntu 11.10 中的“文件属性”对话框中的“注释”选项卡已消失。现在如何使用注释功能?如何处理已做的注释?是否有针对此问题的补丁或扩展,或者计划在未来修复?(为什么删除它?)(关于笔记可移植性的相关问题。)
答案1
这是我为与 @fossfreedom 的答案一起使用而编写的脚本。它使用 GIO 来与 GVFS 和 Tkinter 交互以用于 GUI,并且使用 Python 2.7 编写。它支持多行注释。GUI 如下所示:
先决条件 您需要安装 tkinter:
sudo apt-get install python-tk
使用
使用您最喜欢的编辑器将代码保存为已知文件夹位置的文件 - 例如/home/[home-folder-name]/scripts/notesscript
然后 - 如果你使用natutilus 动作,使用命令:
python /home/[home-folder-name]/scripts/notesscript
代码:
import gio
class GVFSNotes:
ATTRIBUTE_KEY = 'metadata::annotation'
def __init__(self, f):
self.__f = f
def _get_attribute(self, key):
return self.__f.query_info(key).get_attribute_string(key)
def _make_setter(self, key, val):
info = gio.FileInfo()
info.set_attribute_string(key, val)
return info
def _set_attribute(self, key, val):
self.__f.set_attributes_from_info(self._make_setter(key, val))
def get(self):
return self._get_attribute(self.ATTRIBUTE_KEY)
def set(self, val):
self._set_attribute(self.ATTRIBUTE_KEY, val)
import Tkinter as tk
class Dialog:
def __init__(self, title, initial):
self.root = tk.Tk()
self.text = None
self._mkGUI(title, initial)
def settext(self):
self.text = self.entry.get(1.0, tk.END).rstrip()
def onCancel(self):
self.root.destroy()
def onOkay(self):
self.settext()
self.root.destroy()
def _mkButtons(self):
(tk.Button(self.root, text="Cancel", width=10, command=self.onCancel)
.pack(side=tk.LEFT)
)
(tk.Button(self.root, text="Okay", width=10, command=self.onOkay)
.pack(side=tk.RIGHT)
)
def _mkEntry(self, initial):
self.entry = tk.Text(self.root, width=60)
if initial != '' and initial != None:
self.entry.insert(tk.END, initial)
self.entry.pack(fill=tk.X, expand=True)
self.entry.focus_set()
def _setTitle(self, title):
self.root.wm_title(title)
def _mkGUI(self, title, initial):
self._mkEntry(initial)
self._mkButtons()
self._setTitle(title)
def show(self):
self.root.mainloop()
return self.text
def main(path):
notes = GVFSNotes(gio.File(path))
oldtext = notes.get()
newtext = Dialog('Notes for ' + path, oldtext).show()
if newtext != None and newtext != oldtext:
notes.set(newtext)
if __name__ == '__main__':
import sys
main(sys.argv[1])
答案2
有人问过类似的问题:“徽章和背景“恐怕答案也是相似的。
Gnome Devs 认为这些功能很少使用,为了简化代码库,他们将其作为核心 GUI 功能删除。
幸运的是,同样基于终端的命令由于元数据功能被保留,因此可以使用:
例如,这是通过命令行添加了注释的 v11.10 nautilus 屏幕截图。
至于“是否计划修复” - 再次得到类似的答案 - 就像“徽章”一样 - 这被视为第三方支持 - 即不是核心鹦鹉螺功能。
我不知道有谁决定接受这个挑战 - 所以这是我的可怜的替代品:
选择右键菜单选项笔记显示您可以修改的文件的注释。
为了做到这一点,我使用了我的回答此问答执行以下文件:
#!/bin/bash
# basic - and I mean basic bash script to display & set notes
#
# feel free to enhance!
#
# fossfreedom (askubuntu) 27/12/11
notestext=`gvfs-info $1 | grep annotation | sed s/' metadata::annotation: '/''/g`
newnotes=`zenity --entry --width=500 --title=$1 --text="current notes:" --entry-text="$notestext"`
# handle the case where the user has pressed cancel
if [ $? = 1 ]; then
exit
fi
# ok - got this far - lets change the notes for the file selected
gvfs-set-attribute -t string $1 metadata::annotation "$newnotes"
Zenity 不支持多行输入- 更加坚固python对话框需要类型实现...但是我的 Python 技能还不足以胜任这项工作!
答案3
我对您的解决方案做了些许修改。它已合并到“nautilus action extra”中。在下一个版本中,该软件包将被命名为:nautilus-notes。
答案4
这是我使用 nautilus-scripts 的脚本(有点粗糙 - 限制为 1000000 行,我不是程序员)。
你必须创造~/.gnome2/nautilus-脚本文件(例如名为 nautilus-annotations)并使其可执行(在属性中),内容如下:
#!/bin/bash
for arg do
if i=`gvfs-info "$arg" | grep -A 1000000 metadata::annotation: | sed s/\metadata::annotation:\// | grep -v metadata:: | zenity --text-info --editable --ok-label="ok" --cancel-label="cancel" --checkbox="change"`; then `gvfs-set-attribute -t string "$arg" metadata::annotation "$i"`; else exit
fi
done