My build of nnn with minor changes
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

6 роки тому
6 роки тому
6 роки тому
6 роки тому
6 роки тому
6 роки тому
6 роки тому
6 роки тому
6 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
6 роки тому
6 роки тому
7 роки тому
6 роки тому
7 роки тому
7 роки тому
6 роки тому
7 роки тому
7 роки тому
7 роки тому
6 роки тому
10 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
6 роки тому
7 роки тому
6 роки тому
7 роки тому
9 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
6 роки тому
7 роки тому
7 роки тому
6 роки тому
7 роки тому
7 роки тому
6 роки тому
7 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /*
  2. * BSD 2-Clause License
  3. *
  4. * Copyright (c) 2014-2016, Lazaros Koromilas <lostd@2f30.org>
  5. * Copyright (c) 2014-2016, Dimitris Papastamos <sin@2f30.org>
  6. * Copyright (c) 2016-2018, Arun Prakash Jana <engineerarun@gmail.com>
  7. * All rights reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions are met:
  11. *
  12. * * Redistributions of source code must retain the above copyright notice, this
  13. * list of conditions and the following disclaimer.
  14. *
  15. * * Redistributions in binary form must reproduce the above copyright notice,
  16. * this list of conditions and the following disclaimer in the documentation
  17. * and/or other materials provided with the distribution.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  20. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  22. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  23. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  25. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  26. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  27. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. */
  30. #define CONTROL(c) ((c) ^ 0x40)
  31. /* Supported actions */
  32. enum action {
  33. SEL_BACK = 1,
  34. SEL_GOIN,
  35. SEL_NEXT,
  36. SEL_PREV,
  37. SEL_PGDN,
  38. SEL_PGUP,
  39. SEL_HOME,
  40. SEL_END,
  41. SEL_CD,
  42. SEL_CDHOME,
  43. SEL_CDBEGIN,
  44. SEL_CDLAST,
  45. SEL_CDBM,
  46. SEL_PIN,
  47. SEL_VISIT,
  48. SEL_FLTR,
  49. SEL_MFLTR,
  50. SEL_SEARCH,
  51. SEL_TOGGLEDOT,
  52. SEL_DETAIL,
  53. SEL_STATS,
  54. SEL_MEDIA,
  55. SEL_FMEDIA,
  56. SEL_DFB,
  57. SEL_ARCHIVE,
  58. SEL_LIST,
  59. SEL_EXTRACT,
  60. SEL_FSIZE, /* file size */
  61. SEL_ASIZE, /* apparent size */
  62. SEL_BSIZE, /* block size */
  63. SEL_MTIME,
  64. SEL_REDRAW,
  65. SEL_COPY,
  66. SEL_COPYMUL,
  67. SEL_QUOTE,
  68. SEL_OPEN,
  69. SEL_NEW,
  70. SEL_RENAME,
  71. SEL_RENAMEALL,
  72. SEL_HELP,
  73. SEL_RUN,
  74. SEL_RUNSCRIPT,
  75. SEL_RUNARG,
  76. SEL_LOCK,
  77. SEL_CDQUIT,
  78. SEL_QUIT,
  79. };
  80. /* Associate a pressed key to an action */
  81. struct key {
  82. int sym; /* Key pressed */
  83. enum action act; /* Action */
  84. char *run; /* Program to run or program option */
  85. char *env; /* Environment variable to run */
  86. };
  87. /* Extension pattern and mime combination */
  88. struct assoc {
  89. char *regex; /* Regex to match on filename */
  90. char *mime; /* File type */
  91. };
  92. static struct assoc assocs[] = {
  93. { "\\.(c|cpp|h|log|md|py|rb|sh|txt)$", "text" },
  94. };
  95. static struct key bindings[] = {
  96. /* Back */
  97. { KEY_BACKSPACE, SEL_BACK, "", "" },
  98. { KEY_LEFT, SEL_BACK, "", "" },
  99. { 'h', SEL_BACK, "", "" },
  100. { CONTROL('H'), SEL_BACK, "", "" },
  101. /* Inside */
  102. { KEY_ENTER, SEL_GOIN, "", "" },
  103. { '\r', SEL_GOIN, "", "" },
  104. { KEY_RIGHT, SEL_GOIN, "", "" },
  105. { 'l', SEL_GOIN, "", "" },
  106. /* Next */
  107. { 'j', SEL_NEXT, "", "" },
  108. { KEY_DOWN, SEL_NEXT, "", "" },
  109. { CONTROL('N'), SEL_NEXT, "", "" },
  110. /* Previous */
  111. { 'k', SEL_PREV, "", "" },
  112. { KEY_UP, SEL_PREV, "", "" },
  113. { CONTROL('P'), SEL_PREV, "", "" },
  114. /* Page down */
  115. { KEY_NPAGE, SEL_PGDN, "", "" },
  116. { CONTROL('D'), SEL_PGDN, "", "" },
  117. /* Page up */
  118. { KEY_PPAGE, SEL_PGUP, "", "" },
  119. { CONTROL('U'), SEL_PGUP, "", "" },
  120. /* First entry */
  121. { KEY_HOME, SEL_HOME, "", "" },
  122. { 'g', SEL_HOME, "", "" },
  123. { CONTROL('A'), SEL_HOME, "", "" },
  124. { '^', SEL_HOME, "", "" },
  125. /* Last entry */
  126. { KEY_END, SEL_END, "", "" },
  127. { 'G', SEL_END, "", "" },
  128. { CONTROL('E'), SEL_END, "", "" },
  129. { '$', SEL_END, "", "" },
  130. /* Change dir */
  131. { 'c', SEL_CD, "", "" },
  132. /* HOME */
  133. { '~', SEL_CDHOME, "", "" },
  134. /* Initial directory */
  135. { '&', SEL_CDBEGIN, "", "" },
  136. /* Last visited dir */
  137. { '-', SEL_CDLAST, "", "" },
  138. /* Change dir using bookmark */
  139. { CONTROL('B'), SEL_CDBM, "", "" },
  140. /* Mark a path to visit later */
  141. { 'b', SEL_PIN, "", "" },
  142. /* Visit marked directory */
  143. { CONTROL('V'), SEL_VISIT, "", "" },
  144. /* Filter */
  145. { '/', SEL_FLTR, "", "" },
  146. /* Toggle filter mode */
  147. { KEY_IC, SEL_MFLTR, "", "" },
  148. { CONTROL('I'), SEL_MFLTR, "", "" },
  149. /* Desktop search */
  150. { CONTROL('_'), SEL_SEARCH, "", "" },
  151. /* Toggle hide .dot files */
  152. { '.', SEL_TOGGLEDOT, "", "" },
  153. /* Detailed listing */
  154. { 'd', SEL_DETAIL, "", "" },
  155. /* File details */
  156. { 'D', SEL_STATS, "", "" },
  157. /* Show media info short, run is hacked */
  158. { 'm', SEL_MEDIA, NULL, "" },
  159. /* Show media info full, run is hacked */
  160. { 'M', SEL_FMEDIA, "-f", "" },
  161. /* Open dir in desktop file manager */
  162. { 'o', SEL_DFB, "", "" },
  163. /* Create archive */
  164. { 'f', SEL_ARCHIVE, "", "" },
  165. /* List archive */
  166. { 'F', SEL_LIST, "-l", "" },
  167. /* Extract archive */
  168. { CONTROL('F'), SEL_EXTRACT, "-x", "" },
  169. /* Toggle sort by size */
  170. { 's', SEL_FSIZE, "", "" },
  171. /* Sort by apparent size including dir contents */
  172. { 'S', SEL_ASIZE, "", "" },
  173. /* Sort by total block count including dir contents */
  174. { CONTROL('J'), SEL_BSIZE, "", "" },
  175. /* Toggle sort by time */
  176. { 't', SEL_MTIME, "", "" },
  177. /* Redraw window */
  178. { CONTROL('L'), SEL_REDRAW, "", "" },
  179. { KEY_F(5), SEL_REDRAW, "", "" }, /* Undocumented */
  180. /* Copy currently selected file path */
  181. { CONTROL('K'), SEL_COPY, "", "" },
  182. { ' ', SEL_COPY, "", "" },
  183. /* Toggle copy multiple file paths */
  184. { CONTROL('Y'), SEL_COPYMUL, "", "" },
  185. /* Toggle quote on while copy */
  186. { CONTROL('T'), SEL_QUOTE, "", "" },
  187. /* Open in a custom application */
  188. { CONTROL('O'), SEL_OPEN, "", "" },
  189. /* Create a new file */
  190. { 'n', SEL_NEW, "", "" },
  191. /* Show rename prompt */
  192. { CONTROL('R'), SEL_RENAME, "", "" },
  193. { KEY_F(2), SEL_RENAME, "", "" }, /* Undocumented */
  194. /* Rename contents of current dir */
  195. { 'r', SEL_RENAMEALL, "", "" },
  196. /* Show help */
  197. { '?', SEL_HELP, "", "" },
  198. /* Run command */
  199. { '!', SEL_RUN, "sh", "SHELL" },
  200. { CONTROL(']'), SEL_RUN, "sh", "SHELL" },
  201. /* Run a custom script */
  202. { 'R', SEL_RUNSCRIPT, "sh", "SHELL" },
  203. /* Run command with argument */
  204. { 'e', SEL_RUNARG, "", "VISUAL" },
  205. { 'p', SEL_RUNARG, "less", "PAGER" },
  206. /* Lock screen */
  207. { 'L', SEL_LOCK, "", "" },
  208. /* Change dir on quit */
  209. { 'Q', SEL_CDQUIT, "", "" },
  210. { CONTROL('G'), SEL_CDQUIT, "", "" },
  211. /* Quit */
  212. { 'q', SEL_QUIT, "", "" },
  213. { CONTROL('X'), SEL_QUIT, "", "" },
  214. };