如何在nautilus中将特定文件夹设置为列表或图标视图?

有没有办法使用不同的文件夹查看每个文件夹? 我喜欢看一些文件夹作为图标和其他文件夹更好地看作列表。

在此处输入图像描述

由于nautilus没有用于在列表视图和图标视图之间切换的命令行选项,也没有为每个文件夹设置视图prferences的选项,因此没有干净的方法来执行此操作。

作为一个实验开始,下面的选项是看看它是否可以以合理的function方式完成。

正如评论中所提到的那样,解决方案虽然很脏,但事实certificate它是完全正常的,并且在我测试它的几个小时内,我没有遇到问题。 是否使用它的决定。

脚本及其function

该解决方案包含两个脚本; 从快捷键运行一个以将活动(nautilus)窗口添加到列表。 列出的窗口将自动设置为列表视图 ,其他窗口默认位于图标视图中 。 当然,您可以将其设置为反之,具体取决于您要将其设置为默认的视图类型

从/到列表视图的切换是通过模拟Ctrl + 1Ctrl + 2来完成的 ,这是nautilus中设置列表或图标视图的快捷方式。

它在实践中如何运作

在后台运行第一个脚本,nautilus窗口的默认视图是图标视图

如果要为特定文件夹设置列表视图 ,请导航到文件夹(打开它),打开文件夹的窗口并按最前面,按(例如Ctrl + Alt + A

这会将窗口的名称添加到列表中(保存在主目录中的隐藏文件中)。 下次打开文件夹时,它会自动切换到列表视图,并在导航到另一个文件夹时返回到图标视图。

要从列表中删除该文件夹,请按Ctrl + Alt + R ,前面有相关文件夹。

如何设置

  1. 脚本需要wmctrlxdotool

     sudo apt-get install wmctrl sudo apt-get install xdotool 
  2. 将下面的脚本复制到一个空文件中,将其另存为add_folder.py这是在列表视图中添加或删除窗口的脚本。

     #!/usr/bin/env python3 import subprocess import os import sys add = sys.argv[1] wlist = os.environ["HOME"]+"/.window_list.txt" get = lambda cmd: subprocess.check_output(cmd).decode("utf-8") window = get(["xdotool", "getactivewindow", "getwindowname"]).strip()+"\n" def add_window(): if os.path.exists(wlist): current = open(wlist).readlines() if not window in current: new = current+[window] open(wlist, "w").writelines(new) else: open(wlist, "w").write(window) def remove_window(): if os.path.exists(wlist): current = open(wlist).readlines() if window in current: current.remove(window) open(wlist, "w").writelines(current) if add == "+": add_window() elif add == "-": remove_window() 
    • 测试通过命令运行脚本:

       python3 /path/to/add_folder.py + 

    应在~/home创建一个隐藏文件,名为.window_list.txt 。 您需要按Ctrl + H使其可见(具有名称的文件,以’。’开头默认情况下不可见)

    如果它工作正常,添加两个命令:

      python3 /path/to/add_folder.py + python3 /path/to/add_folder.py - 

    到快捷键组合(我使用Ctrl + Alt + RCtrl + Alt + A ):选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。 单击“+”并添加命令

  3. 将下面的脚本复制到一个空文件中,将其另存为set_view.py这是将窗口视图更改为列表视图图标视图的后台脚本。

     #!/usr/bin/env python3 import subprocess import time import os wlist = os.environ["HOME"]+"/.window_list.txt" def get(cmd): try: return subprocess.check_output(cmd).decode("utf-8") except subprocess.CalledProcessError: return "" def check_window(): pid = subprocess.check_output(["pidof", "nautilus"]).decode("utf-8").strip() wlist = get(["wmctrl", "-lp"]).splitlines() front = get(["xdotool", "getactivewindow", "getwindowname"]).strip() return (front, [w for w in wlist if all([pid in w, front in w])]) match1 = check_window() while True: time.sleep(1) match2 = check_window() if all([match2 != match1, match2[1] != []]): w = match2[0] try: if w in open(wlist).read().splitlines(): cmd = "xdotool key Ctrl+1" subprocess.Popen(["/bin/bash", "-c", cmd]) else: cmd = "xdotool key Ctrl+2" subprocess.Popen(["/bin/bash", "-c", cmd]) except FileNotFoundError: pass match1 = match2 

    通过从终端窗口运行来测试它:

     python3 /path/to/set_view.py 

    浏览您的文件夹,然后按照2中的说明将文件夹添加/删除到列表视图列表中2. (请记住, 下次打开文件夹将激活列表视图)

而已!

注意

由于脚本无法查看列出的文件夹是否仍存在于您的目录中,因此如果删除列出的文件夹,文件~/.window_list.txt可能会包含一些过时的条目。

您可以通过使用您设置的快捷方式来阻止数据,或者只是每隔一段时间浏览一次文件。