def apply_change_into_view(self, edit, line, indented_region): '''set count and index, track marks/selections, replace icon, erase indented_region''' v = self.view # do not set count & index on empty directory if not line.contains(indented_region): removed_count = len(v.lines(indented_region)) dired_count = v.settings().get('dired_count', 0) v.settings().set('dired_count', int(dired_count) - removed_count) if indented_region.b == v.size(): # MUST avoid new line at eof indented_region = Region(indented_region.a - 1, indented_region.b) start_line = 1 + v.rowcol(line.a)[0] end_line = start_line + removed_count self.index = self.index[:start_line] + self.index[end_line:] v.settings().set('dired_index', self.index) if self.marked or self.seled: path = self.path folded_name = self.get_parent(line, path) if self.marked: self.marked.append(folded_name) elif self.seled: self.seled[0].append(folded_name) name_point = self._get_name_point(line) icon_region = Region(name_point - 2, name_point - 1) v.set_read_only(False) v.replace(edit, icon_region, u'▸') v.erase(edit, indented_region) v.set_read_only(True) emit_event(u'fold', (self.view.id(), self.index[start_line - 1]), view=self.view)
def run(self, edit): if not self.filecount(): return sublime.status_message( 'Directory seems empty, nothing could be renamed') emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') # Store the original filenames so we can compare later. path = self.path self.view.settings().set('rename', [ f for f in self.get_all_relative('' if path == 'ThisPC\\' else path) if f and f != PARENT_SYM ]) self.view.settings().set('dired_rename_mode', True) self.view.set_read_only(False) self.set_ui_in_rename_mode(edit) self.view.set_status( "__FileBrowser__", u" 𝌆 [enter: Apply changes] [escape: Discard changes] %s" % (u'¡¡¡DO NOT RENAME DISKS!!! you can rename their children though ' if path == 'ThisPC\\' else '')) # Mark the original filename lines so we can make sure they are in the same place. r = self.fileregion() self.view.add_regions('rename', [r], '', '', MARK_OPTIONS)
def run(self, edit): if not self.view.settings().has('rename'): # Shouldn't happen, but we want to cleanup when things go wrong. self.view.run_command('dired_refresh') return before = self.view.settings().get('rename') # We marked the set of files with a region. Make sure the region still has the same # number of files. after = self.get_after() if len(after) != len(before): return sublime.error_message('You cannot add or remove lines') if len(set(after)) != len(after): return self.report_conflicts(before, after) self.apply_renames(before, after) self.view.erase_regions('rename') self.view.settings().erase('rename') self.view.settings().set('dired_rename_mode', False) emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS') self.view.run_command('dired_refresh', {'to_expand': self.re_expand_new_names()})
def run(self, edit): self.which = self.view.settings().get('which', '') if not self.which: return sublime.error_message('oops, does not work!') self.refresh = False value = self.view.substr(Region(0, self.view.size())) fqn = self.on_done(value) if not fqn: return sublime.status_message('oops, does not work!') sublime.active_window().run_command('hide_panel', {'cancel': True}) dired_view = sublime.active_window().active_view() if dired_view.settings().has('dired_path'): self.refresh = True if self.which == 'directory': dired_view.settings().set('dired_path', fqn + os.sep) else: sublime.active_window().open_file(fqn) if self.refresh: emit_event(u'watch_view', dired_view.id(), plugin=u'FileBrowserWFS') dired_view.run_command('dired_refresh', {'goto': fqn})
def run(self, edit, goto='', to_expand=None, toggle=None, reset_sels=None): """ goto Optional filename to put the cursor on; used only from "dired_up" to_expand List of relative paths for direcories which shall be expanded toggle If true, marked/selected directories shall switch state, i.e. expand/collapse reset_sels If True, previous selections & marks shan’t be restored """ # after restart ST, callback seems to disappear, so reset callback on each refresh for more reliability self.view.settings().clear_on_change('color_scheme') self.view.settings().add_on_change( 'color_scheme', lambda: set_proper_scheme(self.view)) path = self.path names = [] if path == 'ThisPC\\': path, names = '', self.get_disks() if path and not exists(path): if sublime.ok_cancel_dialog( u'FileBrowser:\n\nDirectory does not exist:\n\n\t%s\n\nTry to go up?' % path, u'Go'): self.view.run_command('dired_up') return emit_event(u'start_refresh', (self.view.id(), path), view=self.view) self.expanded = expanded = self.view.find_all( u'^\s*▾') if not reset_sels else [] self.show_hidden = self.view.settings().get('dired_show_hidden_files', True) self.goto = goto if os.sep in goto: to_expand = self.expand_goto(to_expand) self.number_line = 0 if reset_sels and not to_expand: self.index, self.marked, self.sels = [], None, None self.populate_view(edit, path, names) else: if not reset_sels: self.index = self.get_all() self.marked = self.get_marked() self.sels = (self.get_selected(), list(self.view.sel())) else: self.marked, self.sels = None, None self.re_populate_view(edit, path, names, expanded, to_expand, toggle) emit_event(u'finish_refresh', (self.view.id(), self.expanded + ([path] if path else [])), view=self.view)
def run(self, edit, which=None): assert which in ('file', 'directory'), "which: " + which emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') self.index = self.get_all() rel_path = relative_path(self.get_selected(parent=False) or '') self.which = which self.refresh = True pv = self.view.window().show_input_panel(which.capitalize() + ':', rel_path, self.on_done, None, None) pv.run_command('move_to', {'to': 'eol', 'extend': False}) pv.settings().set('dired_create', True) pv.settings().set('which', which) pv.settings().set('dired_path', self.path)
def dired_event_handler(self, package, event, payload): '''receiving args from common.emit_event''' def view_closed(view): self.paths.pop(view, None) def start_refresh(view, path): self.paths.update({view: [path.rstrip(os.sep)] if path else []}) def finish_refresh(view, paths): if not paths: return old_paths = sorted(self.paths.get(view, [])) paths = sorted(paths) if paths == old_paths: return self.paths.update({ view: sorted(p for p in set(old_paths + [p.rstrip(os.sep) for p in paths]) if os.path.exists(p)) }) self.observer.unschedule_all() for p in reduce(lambda i, j: i + j, self.paths.values()): self.observer.schedule(self.event_handler, p) def fold(view, path): p = set(self.paths.get(view, [])) - set([path.rstrip(os.sep)]) finish_refresh(view, list(p)) def toggle_watch_all(watch): '''watch is boolean or None, global setting dired_autorefresh''' views = self.paths.keys() if not watch: self.paths = {} sublime.set_timeout( lambda: refresh(views, erase_settings=(not watch)), 1) case = { 'start_refresh': lambda: start_refresh(*payload), 'finish_refresh': lambda: finish_refresh(*payload), 'view_closed': lambda: view_closed(payload), 'fold': lambda: fold(*payload), 'stop_watch': lambda: view_closed(payload), 'toggle_watch_all': lambda: toggle_watch_all(payload) } case[event]() emit_event(u'', self.paths, plugin=u'FileBrowserWFS')
def run(self, edit, goto='', to_expand=None, toggle=None, reset_sels=None): """ goto Optional filename to put the cursor on; used only from "dired_up" to_expand List of relative paths for direcories which shall be expanded toggle If true, marked/selected directories shall switch state, i.e. expand/collapse reset_sels If True, previous selections & marks shan’t be restored """ # after restart ST, callback seems to disappear, so reset callback on each refresh for more reliability self.view.settings().clear_on_change('color_scheme') self.view.settings().add_on_change('color_scheme', lambda: set_proper_scheme(self.view)) path = self.path names = [] if path == 'ThisPC\\': path, names = '', self.get_disks() if path and not exists(path): if sublime.ok_cancel_dialog(u'FileBrowser:\n\nDirectory does not exist:\n\n\t%s\n\nTry to go up?' % path, u'Go'): self.view.run_command('dired_up') return emit_event(u'start_refresh', (self.view.id(), path), view=self.view) self.expanded = expanded = self.view.find_all(u'^\s*▾') if not reset_sels else [] self.show_hidden = self.view.settings().get('dired_show_hidden_files', True) self.goto = goto if os.sep in goto: to_expand = self.expand_goto(to_expand) self.number_line = 0 if reset_sels and not to_expand: self.index, self.marked, self.sels = [], None, None self.populate_view(edit, path, names) else: if not reset_sels: self.index = self.get_all() self.marked = self.get_marked() self.sels = (self.get_selected(), list(self.view.sel())) else: self.marked, self.sels = None, None self.re_populate_view(edit, path, names, expanded, to_expand, toggle) emit_event(u'finish_refresh', (self.view.id(), self.expanded + ([path] if path else [])), view=self.view)
def on_close(self, view): if not 'dired' in view.scope_name(0): return emit_event(u'view_closed', view.id()) w = sublime.active_window() # check if closed view was a single one in group if ST3: single = not w.views_in_group(0) or not w.views_in_group(1) else: single = ([view.id()] == [v.id() for v in w.views_in_group(0)] or [view.id()] == [v.id() for v in w.views_in_group(1)]) if w.num_groups() == 2 and single: # without timeout ST may crash sublime.set_timeout(lambda: w.set_layout({"cols": [0.0, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1]]}), 300)
def expand_single_directory(self, edit, filename, toggle): '''Expand one directory is save and fast, thus we do it here, but for many directories calling refresh command''' marked = self.get_marked() seled = self.get_selected() if toggle and self.try_to_fold(marked): return self.view.run_command('dired_fold', { 'update': True, 'index': self.index }) self.index = self.get_all() # fold changed index, get a new one self.show_hidden = self.view.settings().get('dired_show_hidden_files', True) self.sel = self.view.get_regions('marked')[0] if marked else list( self.view.sel())[0] line = self.view.line(self.sel) # number of next line to make slicing work properly self.number_line = 1 + self.view.rowcol(line.a)[0] # line may have inline error msg after os.sep root = self.view.substr(line).split(os.sep)[0].replace(u'▸', u'▾', 1) + os.sep items, error = self.try_listing_directory(filename) if error: replacement = [u'%s\t<%s>' % (root, error)] elif items: replacement = [root] + self.prepare_filelist( items, '', filename, '\t') dired_count = self.view.settings().get('dired_count', 0) self.view.settings().set('dired_count', dired_count + len(items)) else: # expanding empty folder, so notify that it is empty replacement = [u'%s\t<empty>' % root] self.view.set_read_only(False) self.view.replace(edit, line, '\n'.join(replacement)) self.view.set_read_only(True) self.view.settings().set('dired_index', self.index) self.restore_marks(marked) self.restore_sels((seled, [self.sel])) self.view.run_command('dired_call_vcs', {'path': self.path}) emit_event(u'finish_refresh', (self.view.id(), [filename]), view=self.view)
def run(self, edit): s = self.view.settings() sources_move = s.get('dired_to_move', []) sources_copy = s.get('dired_to_copy', []) if not (sources_move or sources_copy): return sublime.status_message('Nothing to paste') self.index = self.get_all() path = self.get_path() rel_path = relative_path(self.get_selected(parent=False) or '') destination = join(path, rel_path) or path emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') if NT: return call_SHFileOperationW(self.view, sources_move, sources_copy, destination) else: return call_SystemAgnosticFileOperation(self.view, sources_move, sources_copy, destination)
def progress_bar(self, threads, i=0, dir=1): threads = [t for t in threads if t.is_alive()] if threads: # This animates a little activity indicator in the status area before = i % 8 after = (7) - before if not after: dir = -1 if not before: dir = 1 i += dir self.view.set_status('__FileBrowser__', u'Please wait%s…%sWriting %s' % (' ' * before, ' ' * after, u', '.join([t.name if ST3 else t.name.decode('utf8') for t in threads]))) sublime.set_timeout(lambda: self.progress_bar(threads, i, dir), 100) return else: emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS') self.view.run_command('dired_clear_copy_cut_list')
def caller(self, mode, sources, destination, duplicate=False): '''mode is int: 1 (move), 2 (copy), 3 (delete)''' import ctypes if ST3: from Default.send2trash.plat_win import SHFILEOPSTRUCTW else: from send2trash.plat_win import SHFILEOPSTRUCTW if duplicate: fFlags = 8 elif mode == 3: fFlags = 64 # send to recycle bin else: fFlags = 0 SHFileOperationW = ctypes.windll.shell32.SHFileOperationW SHFileOperationW.argtypes = [ctypes.POINTER(SHFILEOPSTRUCTW)] pFrom = u'\x00'.join(sources) + u'\x00' pTo = (u'%s\x00' % destination) if destination else None wf = ctypes.WINFUNCTYPE(ctypes.wintypes.HWND) get_hwnd = wf(ctypes.windll.user32.GetForegroundWindow) args = SHFILEOPSTRUCTW(hwnd=get_hwnd(), wFunc=ctypes.wintypes.UINT(mode), pFrom=ctypes.wintypes.LPCWSTR(pFrom), pTo=ctypes.wintypes.LPCWSTR(pTo), fFlags=fFlags, fAnyOperationsAborted=ctypes.wintypes.BOOL()) out = SHFileOperationW(ctypes.byref(args)) sublime.set_timeout( lambda: emit_event( u'watch_view', self.view.id(), plugin=u'FileBrowserWFS'), 1) if not out and destination: # 0 == success sublime.set_timeout( lambda: self.view.run_command('dired_clear_copy_cut_list'), 1) else: # probably user cancel op., or sth went wrong; keep settings sublime.set_timeout(lambda: self.view.run_command('dired_refresh'), 1)
def caller(self, mode, sources, destination, duplicate=False): '''mode is int: 1 (move), 2 (copy), 3 (delete)''' import ctypes if ST3: from Default.send2trash.plat_win import SHFILEOPSTRUCTW else: from send2trash.plat_win import SHFILEOPSTRUCTW if duplicate: fFlags = 8 elif mode == 3: fFlags = 64 # send to recycle bin else: fFlags = 0 SHFileOperationW = ctypes.windll.shell32.SHFileOperationW SHFileOperationW.argtypes = [ctypes.POINTER(SHFILEOPSTRUCTW)] pFrom = u'\x00'.join(sources) + u'\x00' pTo = (u'%s\x00' % destination) if destination else None wf = ctypes.WINFUNCTYPE(ctypes.wintypes.HWND) get_hwnd = wf(ctypes.windll.user32.GetForegroundWindow) args = SHFILEOPSTRUCTW( hwnd = get_hwnd(), wFunc = ctypes.wintypes.UINT(mode), pFrom = ctypes.wintypes.LPCWSTR(pFrom), pTo = ctypes.wintypes.LPCWSTR(pTo), fFlags = fFlags, fAnyOperationsAborted = ctypes.wintypes.BOOL()) out = SHFileOperationW(ctypes.byref(args)) sublime.set_timeout(lambda: emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS'), 1) if not out and destination: # 0 == success sublime.set_timeout(lambda: self.view.run_command('dired_clear_copy_cut_list'), 1) else: # probably user cancel op., or sth went wrong; keep settings sublime.set_timeout(lambda: self.view.run_command('dired_refresh'), 1)
def run(self, edit): s = self.view.settings() self.index = self.get_all() sources_move = s.get('dired_to_move', []) sources_copy = s.get('dired_to_copy') or self.get_marked(full=True) or self.get_selected(parent=False, full=True) mitems = len(sources_move) citems = len(sources_copy) if not (mitems or citems): return sublime.status_message('Nothing to paste') both = mitems and citems msg = '%s%s to:' % (('Move %d' % mitems) if mitems else '', ('%sopy %d' % (' and c' if both else 'C', citems)) if citems else '') path = self.get_path() window = self.view.window() or sublime.active_window() emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') prompt.start(msg, window, path, self.initfo, sources_move, sources_copy)
def run(self, edit): if not self.filecount(): return sublime.status_message('Directory seems empty, nothing could be renamed') emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') # Store the original filenames so we can compare later. path = self.path self.view.settings().set('rename', [f for f in self.get_all_relative('' if path == 'ThisPC\\' else path) if f and f != PARENT_SYM]) self.view.settings().set('dired_rename_mode', True) self.view.set_read_only(False) self.set_ui_in_rename_mode(edit) self.view.set_status("__FileBrowser__", u" 𝌆 [enter: Apply changes] [escape: Discard changes] %s" % (u'¡¡¡DO NOT RENAME DISKS!!! you can rename their children though ' if path == 'ThisPC\\' else '')) # Mark the original filename lines so we can make sure they are in the same place. r = self.fileregion() self.view.add_regions('rename', [r], '', '', MARK_OPTIONS)
def dired_event_handler(self, package, event, payload): '''receiving args from common.emit_event''' def view_closed(view): self.paths.pop(view, None) def start_refresh(view, path): self.paths.update({view: [path.rstrip(os.sep)] if path else []}) def finish_refresh(view, paths): if not paths: return old_paths = sorted(self.paths.get(view, [])) paths = sorted(paths) if paths == old_paths: return self.paths.update({view: sorted(p for p in set(old_paths + [p.rstrip(os.sep) for p in paths]) if os.path.exists(p))}) self.observer.unschedule_all() for p in reduce(lambda i, j: i + j, self.paths.values()): self.observer.schedule(self.event_handler, p) def fold(view, path): p = set(self.paths.get(view, [])) - set([path.rstrip(os.sep)]) finish_refresh(view, list(p)) def toggle_watch_all(watch): '''watch is boolean or None, global setting dired_autorefresh''' views = self.paths.keys() if not watch: self.paths = {} sublime.set_timeout(lambda: refresh(views, erase_settings=(not watch)), 1) case = { 'start_refresh': lambda: start_refresh(*payload), 'finish_refresh': lambda: finish_refresh(*payload), 'view_closed': lambda: view_closed(payload), 'fold': lambda: fold(*payload), 'stop_watch': lambda: view_closed(payload), 'toggle_watch_all': lambda: toggle_watch_all(payload) } case[event]() emit_event(u'', self.paths, plugin=u'FileBrowserWFS')
def run(self, edit, trash=False): self.index = self.get_all() files = self.get_marked() or self.get_selected(parent=False) if not files: return sublime.status_message('Nothing chosen') msg, trash = self.setup_msg(files, trash) emit_event(u'ignore_view', self.view.id(), plugin=u'FileBrowserWFS') if trash: need_confirm = self.view.settings().get('dired_confirm_send2trash', True) msg = msg.replace('Delete', 'Delete to trash', 1) if not need_confirm or (need_confirm and sublime.ok_cancel_dialog(msg)): self._to_trash(files) elif not trash and sublime.ok_cancel_dialog(msg): self._delete(files) else: print("Cancel delete or something wrong in DiredDeleteCommand") emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS')
def on_done(self, value): value = value.strip() if not value: return False fqn = join(self.path, value) if exists(fqn): sublime.error_message(u'{0} already exists'.format(fqn)) return False if self.which == 'directory': os.makedirs(fqn) else: with open(fqn, 'wb'): pass if self.refresh: # user press enter emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS') self.view.run_command('dired_refresh', {'goto': fqn}) # user press ctrl+enter, no refresh return fqn
def expand_single_directory(self, edit, filename, toggle): '''Expand one directory is save and fast, thus we do it here, but for many directories calling refresh command''' marked = self.get_marked() seled = self.get_selected() if toggle and self.try_to_fold(marked): return self.view.run_command('dired_fold', {'update': True, 'index': self.index}) self.index = self.get_all() # fold changed index, get a new one self.show_hidden = self.view.settings().get('dired_show_hidden_files', True) self.sel = self.view.get_regions('marked')[0] if marked else list(self.view.sel())[0] line = self.view.line(self.sel) # number of next line to make slicing work properly self.number_line = 1 + self.view.rowcol(line.a)[0] # line may have inline error msg after os.sep root = self.view.substr(line).split(os.sep)[0].replace(u'▸', u'▾', 1) + os.sep items, error = self.try_listing_directory(filename) if error: replacement = [u'%s\t<%s>' % (root, error)] elif items: replacement = [root] + self.prepare_filelist(items, '', filename, '\t') dired_count = self.view.settings().get('dired_count', 0) self.view.settings().set('dired_count', dired_count + len(items)) else: # expanding empty folder, so notify that it is empty replacement = [u'%s\t<empty>' % root] self.view.set_read_only(False) self.view.replace(edit, line, '\n'.join(replacement)) self.view.set_read_only(True) self.view.settings().set('dired_index', self.index) self.restore_marks(marked) self.restore_sels((seled, [self.sel])) self.view.run_command('dired_call_vcs', {'path': self.path}) emit_event(u'finish_refresh', (self.view.id(), [filename]), view=self.view)
def plugin_loaded(): if len(sublime.windows()) == 1 and len(sublime.windows()[0].views()) == 0: hijack_window() window = sublime.active_window() if not ST3: global recursive_plugin_loaded # recursion limit is 1000 generally, so it will try to refresh for 100*1000 ms (100 s) # if no active_window in 100 s, then no refresh # if view still loading, refresh fail because view cant be edited if not window or any(view.is_loading() for view in window.views()): recursive_plugin_loaded += 1 try: return sublime.set_timeout(plugin_loaded, 100) except RuntimeError: print( '\ndired.plugin_loaded run recursively %d time(s); and failed to refresh\n' % recursive_plugin_loaded) return for w in sublime.windows(): for v in w.views(): if v.settings() and v.settings().get("dired_path"): # reset sels because dired_index not exists yet, so we cant restore sels v.run_command("dired_refresh", {"reset_sels": True}) import sys dfsobserver = '%s0_dired_fs_observer' % ('FileBrowser.' if ST3 else '') if dfsobserver not in sys.modules or sys.modules[ dfsobserver].Observer is None: return sublime.error_message( u'FileBrowser:\n\n' u'watchdog module is not importable, hence we cannot know about ' u'changes on file system, and auto-refresh will not work.\n\n' u'Despite that, FileBrowser is fully usable without auto-refresh, ' u'you can just ignore this message and manually refresh view with r key.\n\n' u'But if you want working auto-refresh:\n' u' • if you install manually, then look at Readme how to install it,\n' u' • if you install via Package Control, report an issue.') sublime.load_settings('dired.sublime-settings').add_on_change( 'dired_autorefresh', lambda: emit_event( u'toggle_watch_all', sublime.load_settings('dired.sublime-settings').get( 'dired_autorefresh', None)))
def run(self, edit): emit_event(u'watch_view', self.view.id(), plugin=u'FileBrowserWFS') self.view.settings().erase('rename') self.view.settings().set('dired_rename_mode', False) self.view.run_command('dired_refresh')
def plugin_loaded(): if len(sublime.windows()) == 1 and len(sublime.windows()[0].views()) == 0: hijack_window() window = sublime.active_window() if not ST3: global recursive_plugin_loaded # recursion limit is 1000 generally, so it will try to refresh for 100*1000 ms (100 s) # if no active_window in 100 s, then no refresh # if view still loading, refresh fail because view cant be edited if not window or any(view.is_loading() for view in window.views()): recursive_plugin_loaded += 1 try: return sublime.set_timeout(plugin_loaded, 100) except RuntimeError: print('\ndired.plugin_loaded run recursively %d time(s); and failed to refresh\n' % recursive_plugin_loaded) return for w in sublime.windows(): for v in w.views(): if v.settings() and v.settings().get("dired_path"): # reset sels because dired_index not exists yet, so we cant restore sels v.run_command("dired_refresh", {"reset_sels": True}) import sys dfsobserver = '%s0_dired_fs_observer' % ('FileBrowser.' if ST3 else '') if dfsobserver not in sys.modules or sys.modules[dfsobserver].Observer is None: return sublime.error_message( u'FileBrowser:\n\n' u'watchdog module is not importable, hence we cannot know about ' u'changes on file system, and auto-refresh will not work.\n\n' u'Despite that, FileBrowser is fully usable without auto-refresh, ' u'you can just ignore this message and manually refresh view with r key.\n\n' u'But if you want working auto-refresh:\n' u' • if you install manually, then look at Readme how to install it,\n' u' • if you install via Package Control, report an issue.') sublime.load_settings('dired.sublime-settings').add_on_change('dired_autorefresh', lambda: emit_event(u'toggle_watch_all', sublime.load_settings('dired.sublime-settings').get('dired_autorefresh', None)))