fastfile.plugin.zsh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. ###########################
  2. # Settings
  3. # These can be overwritten any time.
  4. # If they are not set yet, they will be
  5. # overwritten with their default values
  6. default fastfile_dir "${HOME}/.fastfile"
  7. default fastfile_var_prefix "§"
  8. ###########################
  9. # Impl
  10. #
  11. # Generate a shortcut
  12. #
  13. # Arguments:
  14. # 1. name - The name of the shortcut (default: name of the file)
  15. # 2. file - The file or directory to make the shortcut for
  16. # STDOUT:
  17. # => fastfle_print
  18. #
  19. function fastfile() {
  20. test "$2" || 2="."
  21. file=$(readlink -f "$2")
  22. test "$1" || 1="$(basename "$file")"
  23. name=$(echo "$1" | tr " " "_")
  24. mkdir -p "${fastfile_dir}"
  25. echo "$file" > "$(fastfile_resolv "$name")"
  26. fastfile_sync
  27. fastfile_print "$name"
  28. }
  29. #
  30. # Resolve the location of a shortcut file (the database file, where the value is written!)
  31. #
  32. # Arguments:
  33. # 1. name - The name of the shortcut
  34. # STDOUT:
  35. # The path to the shortcut file
  36. #
  37. function fastfile_resolv() {
  38. echo "${fastfile_dir}${1}"
  39. }
  40. #
  41. # Get the real path of a shortcut
  42. #
  43. # Arguments:
  44. # 1. name - The name of the shortcut
  45. # STDOUT:
  46. # The path
  47. #
  48. function fastfile_get() {
  49. cat "$(fastfile_resolv "$1")"
  50. }
  51. #
  52. # Print a shortcut
  53. #
  54. # Arguments:
  55. # 1. name - The name of the shortcut
  56. # STDOUT:
  57. # Name and value of the shortcut
  58. #
  59. function fastfile_print() {
  60. echo "${fastfile_var_prefix}${1} -> $(fastfile_get "$1")"
  61. }
  62. #
  63. # List all shortcuts
  64. #
  65. # STDOUT:
  66. # (=> fastfle_print) for each shortcut
  67. #
  68. function fastfile_ls() {
  69. for f in "${fastfile_dir}"/*(NF); do
  70. file=`basename "$f"` # To enable simpler handeling of spaces in file names
  71. varkey=`echo "$file" | tr " " "_"`
  72. # Special format for colums
  73. echo "${fastfile_var_prefix}${varkey}|->|$(fastfile_get "$file")"
  74. done | column -t -s "|"
  75. }
  76. #
  77. # Remove a shortcut
  78. #
  79. # Arguments:
  80. # 1. name - The name of the shortcut (default: name of the file)
  81. # STDOUT:
  82. # => fastfle_print
  83. #
  84. function fastfile_rm() {
  85. fastfile_print "$1"
  86. rm "$(fastfile_resolv "$1")"
  87. }
  88. #
  89. # Generate the aliases for the shortcuts
  90. #
  91. function fastfile_sync() {
  92. for f in "${fastfile_dir}"/*(NF); do
  93. file=`basename "$f"` # To enable simpler handeling of spaces in file names
  94. varkey=`echo "$file" | tr " " "_"`
  95. alias -g "${fastfile_var_prefix}${varkey}"="'$(fastfile_get "$file")'"
  96. done
  97. }
  98. ##################################
  99. # Shortcuts
  100. alias ff=fastfile
  101. alias ffp=fastfile_print
  102. alias ffrm=fastfile_rm
  103. alias ffls=fastfile_ls
  104. alias ffsync=fastfile_sync
  105. ##################################
  106. # Init
  107. fastfile_sync