colourfind 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. #### license: creative commons cc0 1.0 (public domain)
  4. #### http://creativecommons.org/publicdomain/zero/1.0/
  5. proginf = "colourtext 0.1, mar 2019 mn"
  6. import sys
  7. import os
  8. from datetime import datetime
  9. from sys import stdin, stdout
  10. from os import popen
  11. from os import name as osname
  12. def colortext(f, b):
  13. if f == None: f = 0
  14. if b == None: b = 0
  15. n = "0"
  16. if f > 7: n = "1" ; f = f - 8
  17. if f == 1: f = 4 ## switch ansi colours for qb colours
  18. elif f == 4: f = 1 ## 1 = blue not red, 4 = red not blue, etc.
  19. if f == 3: f = 6
  20. elif f == 6: f = 3
  21. if b > 7: b = b - 8
  22. if b == 1: b = 4
  23. elif b == 4: b = 1
  24. if b == 3: b = 6
  25. elif b == 6: b = 3
  26. return "\x1b[" + n + ";" + str(30+f) + ";" + str(40+b) + "m"
  27. def padleft(p, s, c=7):
  28. if type(c) == int:
  29. c = (c, 0)
  30. else:
  31. c = c.split()
  32. return colortext(int(c[0]), int(c[1])) + (" " * s + str(p))[-s:] + colortext(7, 0)
  33. def padright(p, s, c="5 0"):
  34. if type(c) == int:
  35. c = (c, 0)
  36. else:
  37. c = c.split()
  38. return colortext(int(c[0]), int(c[1])) + (str(p) + " " * s)[:s] + colortext(7, 0)
  39. def colourdc(c, f="p"):
  40. if type(c) != int: c = c.lower()
  41. if c in [0, "0"]:
  42. return "9 0"
  43. cb = "0"
  44. if len(f.split()) > 1:
  45. cb = "1"
  46. if c in [2, ".bat", ".com", ".exe"]:
  47. return "10 " + cb
  48. if c in [1, ".lnk"]:
  49. return "11 " + cb
  50. if c in [".tgz", ".tar.gz", ".gz", ".zip", ".7z"]:
  51. return "4 " + cb
  52. if c in [".fig", ".alex", ".py", ".fig.py", ".rose"]:
  53. return "2 " + cb
  54. if c in [".ogg", ".mp4", ".mpeg", ".mpg", ".mp3", ".webm", ".odt", ".odp", ".pdf"]:
  55. return "3 " + cb
  56. if c in ["."]:
  57. return "8 " + cb
  58. if c in [".jpg", ".jpeg", ".gif", ".bmp", ".pbm", ".pgm", ".ppm", ".tga", ".xbm",
  59. ".xpm", ".tif", ".tiff", ".png", ".svg", ".svgz", ".mng", ".pcx", ".mov", ".mpg",
  60. ".mpeg", ".m2v", ".mkv", ".ogm", ".m4v", ".mp4v", ".vob", ".flc", ".avi", ".fli",
  61. ".flv", ".gl", ".dl", ".xcf", ".xwd", ".yuv", ".cgm", ".emf", ".ogv"]:
  62. return "13 " + cb
  63. if c in [".htm", ".html", ".txt", ".js", ".php"]:
  64. return "14 " + cb
  65. return "7 " + cb
  66. dates = ""
  67. cw = 80
  68. sizel = 0
  69. dates = dates[1:]
  70. from os import listdir
  71. from os import path
  72. for fp in stdin:
  73. fp = fp[:-1]
  74. b = []
  75. bfext = 0
  76. bp = 0
  77. bfs = 0
  78. bfiletime = 19
  79. try:
  80. paths = 1
  81. for p in chr(0):
  82. p = fp
  83. paths = 1
  84. fext = path.splitext(fp + path.sep + p)[1]
  85. if len(p) > bfext:
  86. bfext = len(p)
  87. try:
  88. fs = int(os.path.getsize(fp))
  89. bfs = 0
  90. except:
  91. fs = ""
  92. try:
  93. if os.access(fp, os.X_OK):
  94. fext = 2
  95. if os.path.isdir(fp):
  96. fext = 0
  97. if os.path.islink(fp):
  98. fext = 1
  99. except:
  100. pass
  101. try:
  102. filetime = str(datetime.fromtimestamp(os.path.getmtime(fp)))[0:19]
  103. except:
  104. filetime = ""
  105. tab = chr(9)
  106. pld = 1
  107. tab = chr(9)
  108. bfile = tab + tab + padleft(str(filetime), bfiletime)
  109. try: flag = (sys.argv[1] == "-d")
  110. except: flag = 0
  111. if not flag: bfile = ""
  112. print str(fs) + " " + tab + padright(p, bfext, colourdc(fext, p)) + bfile
  113. except OSError:
  114. pass