GTK 文件选择器?

GTK 文件选择器?

在几乎所有程序中,当我单击 时open,都会打开一个文件选择器对话框,如下所示。该对话框显示RecentHomeDesktop等。

在此输入图像描述

这非常烦人。我不用来Desktop存储数据,也不关心Recent.我希望每次出现打开的对话框时都能获得一致的相同视图,无论我最近打开了什么。

另外,从我的屏幕截图中可以看出,这个对话框窗口是多么愚蠢。我已经tmpfs安装在/tmp,另一个tmpfs安装在/home/<user>/tmp

然而,在Locations列表中,这两个挂载点仅被称为tmp并且无法区分。

理想情况下,我希望在左侧看到我的主目录在上部,以及从/下部开始的简单的旧文件系统树。

或者甚至更好,仅在左侧显示文件系统树,但当前位置/home/<user>/已自动“预先选择”,并且我的内容home显示在右侧。

我可以Recent通过添加以下内容来删除.config/gtk-3.0/settings.ini

gtk-recent-files-enabled=false

但是,桌面仍然存在于上部,而随机组合的共享的绝对混乱存在于下部。

在 GTK2/GTK3 中,如何将一些顺序和逻辑带回文件选择器,如上所述?

2020 年 6 月更新:我在 Debian 10 上使用 Openbox,带有 GTK3 库,没有任何桌面环境。我还更新了屏幕截图。

答案1

GTK 文件选择器?

一个完美的解决方案是至少向上游提交/修补gtkfilechooserdialog.cgtkfilechooserwidget.c实现回答此问题需求的附加功能,并通过更新将其提供给所有用户。当前实施的文档可用于GTK2GTK3


本地打补丁吗?

针对此类功能的修补程序并不是一项快速任务,除了上游解决方案之外,在本地应用此类修补程序将需要使用 GTK 库的自定义修补版本,这可能会导致系统更新复杂化。

应用此类补丁的另一种方法是使用LD_预加载环境变量以及新开发的修补库,用修补后的代码替换当前的 GTK 代码。这可以单独应用于每个应用程序或系统范围。这种解决方案将被视为一种解决方法/黑客,因为它远非干净,但仍然有效。 (作为附加的开发说​​明,新ld_preload库可能包含实现类似以下内容的代码)。


有什么解决办法吗?

对于安装了多个桌面(例如 Gnome 和 KDE)的用户,可以强制某些应用程序使用更可定制的 KDE 对话框。作为示例,chromium可以通过以下方式完成

XDG_CURRENT_DESKTOP=KDE chromium

还有其他解决方法替换 GTK 对话框例如克格特克或者xdg-桌面-门户-kde

答案2

可以定制吗?

gtk-recent-files-enabled=false可以添加该设置~/.config/gtk-3.0/settings.ini以禁用最近的条目。也没有直接相关,但gtk-recent-files-limit=0gtk-recent-files-max-age=0可以用于禁用最近的文件。对于Gtk2解决方案用于禁用最近的文件。

其他设置很糟糕,因为可以设置显示隐藏文件或启动模式

gsettings set org.gtk.Settings.FileChooser show-hidden true
gsettings set org.gtk.Settings.FileChooser startup-mode cwd

dconf-editor其他可用设置的屏幕截图

文件选择器设置

文件选择器启动模式

答案3

这个主题已经存在相当长一段时间了,但是一个简单的解决方案可以忽略侧边栏中不断增长的几乎无用的挂载点项目列表,但似乎仍然不存在。

作为快速修复,以下补丁禁用除主目录、用户书签和“最近”项目(如果如此配置)之外的所有位置。

也许这很有帮助。

--- gtk+3.0-3.24.24.orig/gtk/gtkplacessidebar.c
+++ gtk+3.0-3.24.24/gtk/gtkplacessidebar.c
@@ -106,6 +106,16 @@
  * - .has-open-popup when a popup is open for a row
  */
 
+/* Workaround switch for a concise places sidebar.
+ *
+ *   2023-01-05 Gundolf Kiefer <[email protected]>
+ *
+ * The following switch disables all automatically generated places from the
+ * sidebar except the home directory and the user-defined bookmarks.
+ */
+#define SHORT_SIDEBAR 1
+
+
 /* These are used when a destination-side DND operation is taking place.
  * Normally, when a common drag action is taking place, the state will be
  * DROP_STATE_NEW_BOOKMARK_ARMED, however, if the client of GtkPlacesSidebar
@@ -1097,6 +1107,8 @@ update_places (GtkPlacesSidebar *sidebar
   g_object_unref (start_icon);
   g_free (home_uri);
 
+#if SHORT_SIDEBAR == 0
+
   /* desktop */
   if (sidebar->show_desktop)
     {
@@ -1416,6 +1428,8 @@ update_places (GtkPlacesSidebar *sidebar
     }
   g_list_free (mounts);
 
+#endif    // SHORT_SIDEBAR == 0
+
   /* add bookmarks */
   bookmarks = _gtk_bookmarks_manager_list_bookmarks     (sidebar->bookmarks_manager);

答案4

正如人们已经在这里所说的,你可以StartupMode=cwd设置~/.config/gtk-2.0/gtkfilechooser.ini.如果是 GTK+2,这个文件已经存在,但我不确定你的屏幕截图是否显示 GTK+3。

在这种情况下,将此行插入到您的~/.config/gtk-3.0/settings.ini

gtk-recent-files-enabled=false

如果您希望“/”显示为第一个视图,则需要chdir /在启动应用程序之前执行此操作。

相关内容