Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

#!/usr/bin/env python 

# -*- coding: utf-8 -*- 

# 

# Copyright (C) 2013 Bro <bro.development@gmail.com> 

# 

# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with 

# the additional special exception to link portions of this program with the OpenSSL library. 

# See LICENSE for more details. 

# 

 

import os 

 

 

def is_hidden(filepath): 

    def has_hidden_attribute(filepath): 

        import win32api 

        import win32con 

        try: 

            attribute = win32api.GetFileAttributes(filepath) 

            return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM) 

        except (AttributeError, AssertionError): 

            return False 

 

    name = os.path.basename(os.path.abspath(filepath)) 

    # Windows 

    if os.name == 'nt': 

        return has_hidden_attribute(filepath) 

    return name.startswith('.') 

 

 

def get_completion_paths(args): 

    """ 

    Takes a path value and returns the available completions. 

    If the path_value is a valid path, return all sub-directories. 

    If the path_value is not a valid path, remove the basename from the 

    path and return all sub-directories of path that start with basename. 

 

    :param args: options 

    :type args: dict 

    :returns: the args argument containing the available completions for the completion_text 

    :rtype: list 

 

    """ 

    args["paths"] = [] 

    path_value = args["completion_text"] 

    hidden_files = args["show_hidden_files"] 

 

    def get_subdirs(dirname): 

        try: 

            return os.walk(dirname).next()[1] 

        except StopIteration: 

            # Invalid dirname 

            return [] 

 

    dirname = os.path.dirname(path_value) 

    basename = os.path.basename(path_value) 

 

    dirs = get_subdirs(dirname) 

    # No completions available 

    if not dirs: 

        return args 

 

    # path_value ends with path separator so 

    # we only want all the subdirectories 

    if not basename: 

        # Lets remove hidden files 

        if not hidden_files: 

            old_dirs = dirs 

            dirs = [] 

            for d in old_dirs: 

                if not is_hidden(os.path.join(dirname, d)): 

                    dirs.append(d) 

    matching_dirs = [] 

    for s in dirs: 

        if s.startswith(basename): 

            p = os.path.join(dirname, s) 

            if not p.endswith(os.path.sep): 

                p += os.path.sep 

            matching_dirs.append(p) 

 

    args["paths"] = sorted(matching_dirs) 

    return args