def _rename(view: View, defx: Defx, context: Context) -> None: """ Rename the file or directory. """ if len(context.targets) > 1: # ex rename view._vim.call('defx#exrename#create_buffer', [{'action__path': str(x['action__path'])} for x in context.targets], {'buffer_name': 'defx'}) return for target in context.targets: old = target['action__path'] new_filename = cwd_input( view._vim, defx._cwd, f'Old name: {old}\nNew name: ', str(old), 'file') view._vim.command('redraw') if not new_filename: return new = Path(defx._cwd).joinpath(new_filename) if not new or new == old: continue if str(new).lower() != str(old).lower() and new.exists(): error(view._vim, f'{new} already exists') continue old.rename(new) view.redraw(True) view.search_file(new, defx._index)
def _new_multiple_files(view: View, defx: Defx, context: Context) -> None: """ Create multiple files. """ save_cwd = view._vim.call('getcwd') view._vim.command(f'silent lcd {defx._cwd}') str_filenames: str = view._vim.call('input', 'Please input new filenames: ', '', 'file') view._vim.command(f'silent lcd {save_cwd}') if not str_filenames: return None for name in str_filenames.split(): is_dir = name[-1] == '/' filename = Path(defx._cwd).joinpath(name).resolve() if filename.exists(): error(view._vim, f'{filename} already exists') continue if is_dir: filename.mkdir(parents=True) else: if not filename.parent.exists(): filename.parent.mkdir(parents=True) filename.touch() view.redraw(True) view.search_file(filename, defx._index)
def _close_tree(self, view: View, defx: Defx, context: Context) -> None: for target in context.targets: if target['is_directory'] and target['is_opened_tree']: view.close_tree(target['action__path'], defx._index) else: view.close_tree(target['action__path'].parent, defx._index) view.search_file(target['action__path'].parent, defx._index)
def _cd(view: View, defx: Defx, context: Context) -> None: """ Change the current directory. """ source_name = defx._source.name is_parent = context.args and context.args[0] == '..' prev_cwd = Path(defx._cwd) if is_parent: path = prev_cwd.parent else: if context.args: if len(context.args) > 1: source_name = context.args[0] path = Path(context.args[1]) else: path = Path(context.args[0]) else: path = Path.home() path = prev_cwd.joinpath(path) if not readable(path): error(view._vim, f'{path} is invalid.') path = path.resolve() if source_name == 'file' and not path.is_dir(): error(view._vim, f'{path} is invalid.') return view.cd(defx, source_name, str(path), context.cursor) if is_parent: view.search_file(prev_cwd, defx._index)
def _new_file(view: View, defx: Defx, context: Context) -> None: """ Create a new file and it's parent directories. """ candidate = view.get_cursor_candidate(context.cursor) if not candidate: return if candidate['is_opened_tree'] or candidate['is_root']: cwd = str(candidate['action__path']) else: cwd = str(Path(candidate['action__path']).parent) new_filename = cwd_input( view._vim, cwd, 'Please input a new filename: ', '', 'file') if not new_filename: return isdir = new_filename[-1] == '/' filename = Path(cwd).joinpath(new_filename) if not filename: return if filename.exists(): error(view._vim, f'{filename} already exists') return if isdir: filename.mkdir(parents=True) else: filename.parent.mkdir(parents=True, exist_ok=True) filename.touch() view.redraw(True) view.search_file(filename, defx._index)
def _paste(view: View, defx: Defx, context: Context) -> None: action = view._clipboard.action dest = None for index, candidate in enumerate(view._clipboard.candidates): path = candidate['action__path'] dest = Path(defx._cwd).joinpath(path.name) if dest.exists(): overwrite = check_overwrite(view, dest, path) if overwrite == Path(''): continue dest = Path(defx._cwd).joinpath(overwrite.name) if path == dest: continue view.print_msg( f'[{index + 1}/{len(view._clipboard.candidates)}] {path}') if action == ClipboardAction.COPY: if path.is_dir(): shutil.copytree(str(path), dest) else: shutil.copy2(str(path), dest) elif action == ClipboardAction.MOVE: shutil.move(str(path), defx._cwd) view._vim.command('redraw') view._vim.command('echo') view.redraw(True) if dest: view.search_file(str(dest), defx._index)
def _search(self, view: View, defx: Defx, context: Context) -> None: if not context.args or not context.args[0]: return search_path = Path(context.args[0]) if not search_path.is_absolute(): # Use relative directory instead. search_path = Path(Path(defx._cwd).joinpath(context.args[0])) view.search_file(search_path, defx._index)
def _new_directory(view: View, defx: Defx, context: Context) -> None: """ Create a new directory. """ filename = cwd_input(view._vim, defx._cwd, 'Please input a new directory: ', '', 'dir') if os.path.exists(filename): error(view._vim, '{} is already exists'.format(filename)) return os.mkdir(filename) view.redraw(True) view.search_file(filename, defx._index)
def _cd(view: View, defx: Defx, context: Context) -> None: """ Change the current directory. """ path = Path(context.args[0]) if context.args else Path.home() path = Path(defx._cwd).joinpath(path).resolve() if not readable(path) or not path.is_dir(): error(view._vim, f'{path} is not readable directory') return prev_cwd = defx._cwd view.cd(defx, str(path), context.cursor) if context.args and context.args[0] == '..': view.search_file(Path(prev_cwd), defx._index)
def _new_directory(view: View, defx: Defx, context: Context) -> None: """ Create a new directory. """ filename = cwd_input(view._vim, defx._cwd, 'Please input a new directory: ', '', 'dir') if not filename: return if filename.exists(): error(view._vim, f'{filename} already exists') return filename.mkdir(parents=True) view.redraw(True) view.search_file(str(filename), defx._index)
def _rename(view: View, defx: Defx, context: Context) -> None: """ Rename the file or directory. """ for target in context.targets: old = target['action__path'] new = cwd_input(view._vim, defx._cwd, f'New name: {old} -> ', str(old), 'file') if not new or new == old: continue if new.exists(): error(view._vim, f'{new} already exists') continue old.rename(new) view.redraw(True) view.search_file(str(new), defx._index)
def _new_file(view: View, defx: Defx, context: Context) -> None: """ Create a new file and it's parent directories. """ filename = cwd_input(view._vim, defx._cwd, 'Please input a new filename: ', '', 'file') if os.path.exists(filename): error(view._vim, '{} is already exists'.format(filename)) return dirname = os.path.dirname(filename) if not os.path.exists(dirname): os.makedirs(dirname) with open(filename, 'w') as f: f.write('') view.redraw(True) view.search_file(filename, defx._index)
def _search(view: View, defx: Defx, context: Context) -> None: if not context.args or not context.args[0]: return search_path = context.args[0] path = Path(search_path) parents: typing.List[Path] = [] while view.get_candidate_pos(path, defx._index) < 0 and path.parent != path: path = path.parent parents.append(path) for parent in reversed(parents): view.open_tree(parent, defx._index, 0) view.update_opened_candidates() view.redraw() view.search_file(Path(search_path), defx._index)
def _new_file(view: View, defx: Defx, context: Context) -> None: """ Create a new file and it's parent directories. """ filename = cwd_input(view._vim, defx._cwd, 'Please input a new filename: ', '', 'file') if not filename: return if filename.exists(): error(view._vim, '{filename} already exists') return if not filename.parent.exists(): filename.parent.mkdir(parents=True) Path(filename).touch() view.redraw(True) view.search_file(str(filename), defx._index)
def _rename(view: View, defx: Defx, context: Context) -> None: """ Rename the file or directory. """ for target in context.targets: path = target['action__path'] filename = cwd_input( view._vim, defx._cwd, ('New name: {} -> '.format(path)), path, 'file') if not filename or filename == path: continue if os.path.exists(filename): error(view._vim, '{} is already exists'.format(filename)) continue os.rename(path, filename) view.redraw(True) view.search_file(filename, defx._index)
def _new_directory(view: View, defx: Defx, context: Context) -> None: """ Create a new directory. """ candidate = view.get_cursor_candidate(context.cursor) if not candidate: return filename = cwd_input(view._vim, str(Path(candidate['action__path']).parent), 'Please input a new filename: ', '', 'file') if not filename: return if filename.exists(): error(view._vim, f'{filename} already exists') return filename.mkdir(parents=True) view.redraw(True) view.search_file(filename, defx._index)
def _new_multiple_files(view: View, defx: Defx, context: Context) -> None: """ Create multiple files. """ candidate = view.get_cursor_candidate(context.cursor) if not candidate: return if candidate['is_opened_tree'] or candidate['is_root']: cwd = str(candidate['action__path']) else: cwd = str(Path(candidate['action__path']).parent) save_cwd = view._vim.call('getcwd') cd(view._vim, cwd) str_filenames: str = view._vim.call('input', 'Please input new filenames: ', '', 'file') cd(view._vim, save_cwd) if not str_filenames: return None for name in str_filenames.split(): is_dir = name[-1] == '/' filename = Path(cwd).joinpath(name) if filename.exists(): error(view._vim, f'{filename} already exists') continue if is_dir: filename.mkdir(parents=True) else: if not filename.parent.exists(): filename.parent.mkdir(parents=True) filename.touch() view.redraw(True) view.search_file(filename, defx._index)
def _cd(self, view: View, defx: Defx, context: Context) -> None: """ Change the current directory. """ source_name = defx._source.name is_parent = context.args and context.args[0] == '..' open = len(context.args) > 1 and context.args[1] == 'open' save_history = len(context.args) < 3 or context.args[2] != 'nohist' prev_cwd = self.path_maker(defx._cwd) if open: # Don't close current directory defx._opened_candidates.add(defx._cwd) if is_parent: path = prev_cwd.parent else: if context.args: if len(context.args) > 1: source_name = context.args[0] path = self.path_maker(context.args[1]) else: path = self.path_maker(context.args[0]) else: path = self.get_home() path = prev_cwd.joinpath(path) if not self.is_readable(path): error(view._vim, f'{path} is invalid.') path = path.resolve() if source_name == 'file' and not path.is_dir(): error(view._vim, f'{path} is invalid.') return view.cd(defx, source_name, str(path), context.cursor, save_history=save_history) if is_parent: view.search_file(prev_cwd, defx._index)
def _paste(view: View, defx: Defx, context: Context) -> None: candidate = view.get_cursor_candidate(context.cursor) if not candidate: return if candidate['is_opened_tree'] or candidate['is_root']: cwd = str(candidate['action__path']) else: cwd = str(Path(candidate['action__path']).parent) action = view._clipboard.action dest = None for index, candidate in enumerate(view._clipboard.candidates): path = candidate['action__path'] dest = Path(cwd).joinpath(path.name) if dest.exists(): overwrite = check_overwrite(view, dest, path) if overwrite == Path(''): continue dest = overwrite if path == dest: continue view.print_msg( f'[{index + 1}/{len(view._clipboard.candidates)}] {path}') if action == ClipboardAction.COPY: if path.is_dir(): shutil.copytree(str(path), dest) else: shutil.copy2(str(path), dest) elif action == ClipboardAction.MOVE: shutil.move(str(path), cwd) view._vim.command('redraw') view._vim.command('echo') view.redraw(True) if dest: view.search_file(dest, defx._index)