Ranger: Commands.py에서 선택한 파일을 추출하는 방법은 무엇입니까?

Ranger: Commands.py에서 선택한 파일을 추출하는 방법은 무엇입니까?

나는 아치 위키에서 이 조각을 복사했습니다. 그러나 선택한 파일을 추출하는 대신 가져온 파일을 추출합니다. 그래서 나는 알고 싶다하나이 두 가지:

  1. 추출된 파일 대신 선택한 파일로 extract_here를 만드는 방법은 무엇입니까?

  2. Commands.py에서 선택한 파일을 자동으로 추출하는 방법은 무엇입니까?

    class extract_here(Command):
    def execute(self):
        """ Extract yanked files to current directory.
            HOW TO USE: press yy to yank, then call the method
                        with a shortcut or the command itself."""
        copied_files = tuple(self.fm.copy_buffer)
    
        if not copied_files:
            return
    
        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()
    
        one_file = copied_files[0]
        cwd = self.fm.thisdir
        original_path = cwd.path
        au_flags = ['-X', cwd.path]
        au_flags += self.line.split()[1:]
        au_flags += ['-e']
    
        self.fm.copy_buffer.clear()
        self.fm.cut_buffer = False
        if len(copied_files) == 1:
            descr = "extracting: " + os.path.basename(one_file.path)
        else:
            descr = "extracting files from: " + os.path.basename(
                one_file.dirname)
        obj = CommandLoader(args=['aunpack'] + au_flags
                            + [f.path for f in copied_files], descr=descr,
                            read=True)
    
        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)
        ```
    

답변1

해결책:

class extract_here(Command):
def execute(self):
    """ Extract selected files to current directory."""
    import os
    from ranger.core.loader import CommandLoader
    cwd = self.fm.thisdir
    copied_files = tuple(cwd.get_selection())

    def refresh(_):
        cwd = self.fm.get_directory(original_path)
        cwd.load_content()

    one_file = copied_files[0]
    cwd = self.fm.thisdir
    original_path = cwd.path
    au_flags = ['-X', cwd.path]
    au_flags += self.line.split()[1:]
    au_flags += ['-e']

    self.fm.copy_buffer.clear()
    self.fm.cut_buffer = False
    if len(copied_files) == 1:
        descr = "extracting: " + os.path.basename(one_file.path)
    else:
        descr = "extracting files from: " + os.path.basename(
            one_file.dirname)
    obj = CommandLoader(args=['aunpack'] + au_flags
                        + [f.path for f in copied_files], descr=descr,
                        read=True)

    obj.signal_bind('after', refresh)
    self.fm.loader.add(obj)

아치 위키에서 편집, 누구도 이 문제를 다시 겪지 않기를 바랍니다.

관련 정보