Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

everying

  • Loading branch information...
commit c014e1d5339de810efd85f4bb48f094f8ef3d66e 0 parents
@jrockway authored
Showing with 55,639 additions and 0 deletions.
  1. +121 −0 amarok.el
  2. +75 −0 chop.el
  3. +478 −0 css-mode.el
  4. +293 −0 ecb/Makefile
  5. +2,693 −0 ecb/NEWS
  6. +208 −0 ecb/README
  7. +281 −0 ecb/RELEASE_NOTES
  8. +624 −0 ecb/ecb-analyse.el
  9. +162 −0 ecb/ecb-autogen.el
  10. +52 −0 ecb/ecb-autoloads.el
  11. +1,231 −0 ecb/ecb-common-browser.el
  12. +119 −0 ecb/ecb-compatibility.el
  13. +313 −0 ecb/ecb-compilation.el
  14. +3 −0  ecb/ecb-compile-script
  15. +868 −0 ecb/ecb-create-layout.el
  16. +141 −0 ecb/ecb-cycle.el
  17. +365 −0 ecb/ecb-eshell.el
  18. +442 −0 ecb/ecb-examples.el
  19. +620 −0 ecb/ecb-face.el
  20. +4,102 −0 ecb/ecb-file-browser.el
  21. +449 −0 ecb/ecb-help.el
  22. +2 −0  ecb/ecb-images/default/height-10/.cvsignore
  23. +48 −0 ecb/ecb-images/default/height-10/ecb-close.xpm
  24. +41 −0 ecb/ecb-images/default/height-10/ecb-empty.xpm
  25. +15 −0 ecb/ecb-images/default/height-10/ecb-end-guide.xpm
  26. +15 −0 ecb/ecb-images/default/height-10/ecb-guide.xpm
  27. +16 −0 ecb/ecb-images/default/height-10/ecb-handle.xpm
  28. +34 −0 ecb/ecb-images/default/height-10/ecb-leaf.xpm
  29. +14 −0 ecb/ecb-images/default/height-10/ecb-no-guide.xpm
  30. +15 −0 ecb/ecb-images/default/height-10/ecb-no-handle.xpm
  31. +50 −0 ecb/ecb-images/default/height-10/ecb-open.xpm
  32. +51 −0 ecb/ecb-images/default/height-14/ecb-close.xpm
  33. +277 −0 ecb/ecb-images/default/height-14/ecb-empty.xpm
  34. +277 −0 ecb/ecb-images/default/height-14/ecb-end-guide.xpm
  35. +277 −0 ecb/ecb-images/default/height-14/ecb-guide.xpm
  36. +19 −0 ecb/ecb-images/default/height-14/ecb-handle.xpm
  37. +277 −0 ecb/ecb-images/default/height-14/ecb-leaf.xpm
  38. +277 −0 ecb/ecb-images/default/height-14/ecb-no-guide.xpm
  39. +18 −0 ecb/ecb-images/default/height-14/ecb-no-handle.xpm
  40. +53 −0 ecb/ecb-images/default/height-14/ecb-open.xpm
  41. +2 −0  ecb/ecb-images/default/height-15/.cvsignore
  42. +53 −0 ecb/ecb-images/default/height-15/ecb-close.xpm
  43. +278 −0 ecb/ecb-images/default/height-15/ecb-empty.xpm
  44. +278 −0 ecb/ecb-images/default/height-15/ecb-end-guide.xpm
  45. +278 −0 ecb/ecb-images/default/height-15/ecb-guide.xpm
  46. +21 −0 ecb/ecb-images/default/height-15/ecb-handle.xpm
  47. +278 −0 ecb/ecb-images/default/height-15/ecb-leaf.xpm
  48. +278 −0 ecb/ecb-images/default/height-15/ecb-no-guide.xpm
  49. +20 −0 ecb/ecb-images/default/height-15/ecb-no-handle.xpm
  50. +55 −0 ecb/ecb-images/default/height-15/ecb-open.xpm
  51. +2 −0  ecb/ecb-images/default/height-16/.cvsignore
  52. +54 −0 ecb/ecb-images/default/height-16/ecb-close.xpm
  53. +279 −0 ecb/ecb-images/default/height-16/ecb-empty.xpm
  54. +279 −0 ecb/ecb-images/default/height-16/ecb-end-guide.xpm
  55. +279 −0 ecb/ecb-images/default/height-16/ecb-guide.xpm
  56. +22 −0 ecb/ecb-images/default/height-16/ecb-handle.xpm
  57. +279 −0 ecb/ecb-images/default/height-16/ecb-leaf.xpm
  58. +279 −0 ecb/ecb-images/default/height-16/ecb-no-guide.xpm
  59. +21 −0 ecb/ecb-images/default/height-16/ecb-no-handle.xpm
  60. +56 −0 ecb/ecb-images/default/height-16/ecb-open.xpm
  61. +2 −0  ecb/ecb-images/default/height-17/.cvsignore
  62. +55 −0 ecb/ecb-images/default/height-17/ecb-close.xpm
  63. +280 −0 ecb/ecb-images/default/height-17/ecb-empty.xpm
  64. +280 −0 ecb/ecb-images/default/height-17/ecb-end-guide.xpm
  65. +280 −0 ecb/ecb-images/default/height-17/ecb-guide.xpm
  66. +23 −0 ecb/ecb-images/default/height-17/ecb-handle.xpm
  67. +280 −0 ecb/ecb-images/default/height-17/ecb-leaf.xpm
  68. +280 −0 ecb/ecb-images/default/height-17/ecb-no-guide.xpm
  69. +22 −0 ecb/ecb-images/default/height-17/ecb-no-handle.xpm
  70. +57 −0 ecb/ecb-images/default/height-17/ecb-open.xpm
  71. +2 −0  ecb/ecb-images/default/height-18/.cvsignore
  72. +56 −0 ecb/ecb-images/default/height-18/ecb-close.xpm
  73. +281 −0 ecb/ecb-images/default/height-18/ecb-empty.xpm
  74. +281 −0 ecb/ecb-images/default/height-18/ecb-end-guide.xpm
  75. +281 −0 ecb/ecb-images/default/height-18/ecb-guide.xpm
  76. +24 −0 ecb/ecb-images/default/height-18/ecb-handle.xpm
  77. +281 −0 ecb/ecb-images/default/height-18/ecb-leaf.xpm
  78. +281 −0 ecb/ecb-images/default/height-18/ecb-no-guide.xpm
  79. +23 −0 ecb/ecb-images/default/height-18/ecb-no-handle.xpm
  80. +58 −0 ecb/ecb-images/default/height-18/ecb-open.xpm
  81. +2 −0  ecb/ecb-images/default/height-19/.cvsignore
  82. +57 −0 ecb/ecb-images/default/height-19/ecb-close.xpm
  83. +282 −0 ecb/ecb-images/default/height-19/ecb-empty.xpm
  84. +282 −0 ecb/ecb-images/default/height-19/ecb-end-guide.xpm
  85. +282 −0 ecb/ecb-images/default/height-19/ecb-guide.xpm
  86. +25 −0 ecb/ecb-images/default/height-19/ecb-handle.xpm
  87. +282 −0 ecb/ecb-images/default/height-19/ecb-leaf.xpm
  88. +282 −0 ecb/ecb-images/default/height-19/ecb-no-guide.xpm
  89. +24 −0 ecb/ecb-images/default/height-19/ecb-no-handle.xpm
  90. +59 −0 ecb/ecb-images/default/height-19/ecb-open.xpm
  91. +2 −0  ecb/ecb-images/default/height-20/.cvsignore
  92. +58 −0 ecb/ecb-images/default/height-20/ecb-close.xpm
  93. +283 −0 ecb/ecb-images/default/height-20/ecb-empty.xpm
  94. +283 −0 ecb/ecb-images/default/height-20/ecb-end-guide.xpm
  95. +283 −0 ecb/ecb-images/default/height-20/ecb-guide.xpm
  96. +26 −0 ecb/ecb-images/default/height-20/ecb-handle.xpm
  97. +283 −0 ecb/ecb-images/default/height-20/ecb-leaf.xpm
  98. +283 −0 ecb/ecb-images/default/height-20/ecb-no-guide.xpm
  99. +25 −0 ecb/ecb-images/default/height-20/ecb-no-handle.xpm
  100. +60 −0 ecb/ecb-images/default/height-20/ecb-open.xpm
  101. +2 −0  ecb/ecb-images/default/height-21/.cvsignore
  102. +59 −0 ecb/ecb-images/default/height-21/ecb-close.xpm
  103. +284 −0 ecb/ecb-images/default/height-21/ecb-empty.xpm
  104. +284 −0 ecb/ecb-images/default/height-21/ecb-end-guide.xpm
  105. +284 −0 ecb/ecb-images/default/height-21/ecb-guide.xpm
  106. +27 −0 ecb/ecb-images/default/height-21/ecb-handle.xpm
  107. +284 −0 ecb/ecb-images/default/height-21/ecb-leaf.xpm
  108. +284 −0 ecb/ecb-images/default/height-21/ecb-no-guide.xpm
  109. +26 −0 ecb/ecb-images/default/height-21/ecb-no-handle.xpm
  110. +61 −0 ecb/ecb-images/default/height-21/ecb-open.xpm
  111. +2 −0  ecb/ecb-images/directories/height-10/.cvsignore
  112. +62 −0 ecb/ecb-images/directories/height-10/ecb-close.xpm
  113. +38 −0 ecb/ecb-images/directories/height-10/ecb-empty.xpm
  114. +32 −0 ecb/ecb-images/directories/height-10/ecb-leaf.xpm
  115. +33 −0 ecb/ecb-images/directories/height-10/ecb-open.xpm
  116. +277 −0 ecb/ecb-images/directories/height-14/ecb-close.xpm
  117. +277 −0 ecb/ecb-images/directories/height-14/ecb-empty.xpm
  118. +277 −0 ecb/ecb-images/directories/height-14/ecb-leaf.xpm
  119. +277 −0 ecb/ecb-images/directories/height-14/ecb-open.xpm
  120. +2 −0  ecb/ecb-images/directories/height-15/.cvsignore
  121. +278 −0 ecb/ecb-images/directories/height-15/ecb-close.xpm
  122. +32 −0 ecb/ecb-images/directories/height-15/ecb-empty.xpm
  123. +278 −0 ecb/ecb-images/directories/height-15/ecb-leaf.xpm
  124. +278 −0 ecb/ecb-images/directories/height-15/ecb-open.xpm
  125. +2 −0  ecb/ecb-images/directories/height-16/.cvsignore
  126. +279 −0 ecb/ecb-images/directories/height-16/ecb-close.xpm
  127. +33 −0 ecb/ecb-images/directories/height-16/ecb-empty.xpm
  128. +279 −0 ecb/ecb-images/directories/height-16/ecb-leaf.xpm
  129. +279 −0 ecb/ecb-images/directories/height-16/ecb-open.xpm
  130. +2 −0  ecb/ecb-images/directories/height-17/.cvsignore
  131. +280 −0 ecb/ecb-images/directories/height-17/ecb-close.xpm
  132. +34 −0 ecb/ecb-images/directories/height-17/ecb-empty.xpm
  133. +280 −0 ecb/ecb-images/directories/height-17/ecb-leaf.xpm
  134. +280 −0 ecb/ecb-images/directories/height-17/ecb-open.xpm
  135. +2 −0  ecb/ecb-images/directories/height-18/.cvsignore
  136. +281 −0 ecb/ecb-images/directories/height-18/ecb-close.xpm
  137. +35 −0 ecb/ecb-images/directories/height-18/ecb-empty.xpm
  138. +281 −0 ecb/ecb-images/directories/height-18/ecb-leaf.xpm
  139. +281 −0 ecb/ecb-images/directories/height-18/ecb-open.xpm
  140. +2 −0  ecb/ecb-images/directories/height-19/.cvsignore
  141. +282 −0 ecb/ecb-images/directories/height-19/ecb-close.xpm
  142. +36 −0 ecb/ecb-images/directories/height-19/ecb-empty.xpm
  143. +282 −0 ecb/ecb-images/directories/height-19/ecb-leaf.xpm
  144. +282 −0 ecb/ecb-images/directories/height-19/ecb-open.xpm
  145. +2 −0  ecb/ecb-images/directories/height-20/.cvsignore
  146. +283 −0 ecb/ecb-images/directories/height-20/ecb-close.xpm
  147. +37 −0 ecb/ecb-images/directories/height-20/ecb-empty.xpm
  148. +283 −0 ecb/ecb-images/directories/height-20/ecb-leaf.xpm
  149. +283 −0 ecb/ecb-images/directories/height-20/ecb-open.xpm
  150. +2 −0  ecb/ecb-images/directories/height-21/.cvsignore
  151. +284 −0 ecb/ecb-images/directories/height-21/ecb-close.xpm
  152. +38 −0 ecb/ecb-images/directories/height-21/ecb-empty.xpm
  153. +284 −0 ecb/ecb-images/directories/height-21/ecb-leaf.xpm
  154. +284 −0 ecb/ecb-images/directories/height-21/ecb-open.xpm
  155. +8 −0 ecb/ecb-images/klaus.sh
  156. +2 −0  ecb/ecb-images/methods/height-14_to_21/.cvsignore
  157. +49 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-class-private.xpm
  158. +55 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-class-protected.xpm
  159. +49 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-class-public.xpm
  160. +48 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-class-unknown.xpm
  161. +35 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-constructor-private.xpm
  162. +42 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-constructor-protected.xpm
  163. +34 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-constructor-public.xpm
  164. +32 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-constructor-unknown.xpm
  165. +61 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-private-static.xpm
  166. +37 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-private.xpm
  167. +68 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-protected-static.xpm
  168. +44 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-protected.xpm
  169. +61 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-public-static.xpm
  170. +36 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-public.xpm
  171. +60 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-unknown-static.xpm
  172. +35 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-function-unknown.xpm
  173. +64 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-private-static.xpm
  174. +48 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-private.xpm
  175. +68 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-protected-static.xpm
  176. +54 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-protected.xpm
  177. +65 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-public-static.xpm
  178. +48 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-public.xpm
  179. +63 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-unknown-static.xpm
  180. +46 −0 ecb/ecb-images/methods/height-14_to_21/ecb-abstract-variable-unknown.xpm
  181. +57 −0 ecb/ecb-images/methods/height-14_to_21/ecb-class-private.xpm
  182. +65 −0 ecb/ecb-images/methods/height-14_to_21/ecb-class-protected.xpm
  183. +56 −0 ecb/ecb-images/methods/height-14_to_21/ecb-class-public.xpm
  184. +55 −0 ecb/ecb-images/methods/height-14_to_21/ecb-class-unknown.xpm
  185. +111 −0 ecb/ecb-images/methods/height-14_to_21/ecb-constructor-bucket.xpm
  186. +39 −0 ecb/ecb-images/methods/height-14_to_21/ecb-constructor-private.xpm
  187. +48 −0 ecb/ecb-images/methods/height-14_to_21/ecb-constructor-protected.xpm
  188. +39 −0 ecb/ecb-images/methods/height-14_to_21/ecb-constructor-public.xpm
  189. +36 −0 ecb/ecb-images/methods/height-14_to_21/ecb-constructor-unknown.xpm
  190. +24 −0 ecb/ecb-images/methods/height-14_to_21/ecb-enum-private.xpm
  191. +33 −0 ecb/ecb-images/methods/height-14_to_21/ecb-enum-protected.xpm
  192. +23 −0 ecb/ecb-images/methods/height-14_to_21/ecb-enum-public.xpm
  193. +22 −0 ecb/ecb-images/methods/height-14_to_21/ecb-enum-unknown.xpm
  194. +120 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-bucket.xpm
  195. +70 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-private-static.xpm
  196. +37 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-private.xpm
  197. +77 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-protected-static.xpm
  198. +45 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-protected.xpm
  199. +68 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-public-static.xpm
  200. +36 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-public.xpm
  201. +67 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-unknown-static.xpm
  202. +35 −0 ecb/ecb-images/methods/height-14_to_21/ecb-function-unknown.xpm
  203. +205 −0 ecb/ecb-images/methods/height-14_to_21/ecb-parent-bucket.xpm
  204. +127 −0 ecb/ecb-images/methods/height-14_to_21/ecb-parent-private.xpm
  205. +136 −0 ecb/ecb-images/methods/height-14_to_21/ecb-parent-protected.xpm
  206. +126 −0 ecb/ecb-images/methods/height-14_to_21/ecb-parent-public.xpm
  207. +122 −0 ecb/ecb-images/methods/height-14_to_21/ecb-parent-unknown.xpm
  208. +133 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-bucket.xpm
  209. +72 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-private-static.xpm
  210. +56 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-private.xpm
  211. +80 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-protected-static.xpm
  212. +64 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-protected.xpm
  213. +72 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-public-static.xpm
  214. +56 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-public.xpm
  215. +70 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-unknown-static.xpm
  216. +54 −0 ecb/ecb-images/methods/height-14_to_21/ecb-variable-unknown.xpm
  217. +30 −0 ecb/ecb-images/methods/height-14_to_21/klaus.sh
  218. +277 −0 ecb/ecb-images/sources/height-14_to_21/ecb-leaf.xpm
  219. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-added.xpm
  220. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-edited.xpm
  221. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-ignored.xpm
  222. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-needs-merge.xpm
  223. +28 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-needs-patch.xpm
  224. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-unknown.xpm
  225. +27 −0 ecb/ecb-images/sources/height-14_to_21/ecb-vc-up-to-date.xpm
  226. +189 −0 ecb/ecb-jde.el
  227. +993 −0 ecb/ecb-layout-defs.el
  228. +5,547 −0 ecb/ecb-layout.el
  229. +63 −0 ecb/ecb-makedef.mk
  230. +4,287 −0 ecb/ecb-method-browser.el
  231. +339 −0 ecb/ecb-mode-line.el
  232. +349 −0 ecb/ecb-navigate.el
  233. +382 −0 ecb/ecb-semantic-wrapper.el
  234. +496 −0 ecb/ecb-speedbar.el
  235. +387 −0 ecb/ecb-symboldef.el
  236. +154 −0 ecb/ecb-tod.el
  237. +2,065 −0 ecb/ecb-upgrade.el
  238. +1,983 −0 ecb/ecb-util.el
  239. +333 −0 ecb/ecb-winman-support.el
Sorry, we could not display the entire diff because too many files (823) changed.
121 amarok.el
@@ -0,0 +1,121 @@
+;;; amarok.el --- Simple interface to Amarok music player
+;;
+;; Copyright (C) 2006 Mathias Dahl
+;;
+;; Version: 0.1
+;; Keywords: multimedia
+;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
+
+;; This file is NOT part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This file provides a simple interface to play music in Amarok. It
+;; just provides some basic commands to pause/play and manipulate
+;; playlist. Its primary use is for control from Dired, while browsing
+;; your music collection there.
+;;
+;; For convenience, a command, `amarok-setup-dired-key-bindings', is
+;; provided for setting up useful keybindings in Dired. Use that or
+;; create your own bindings.
+;;
+
+;;; History:
+
+;; Version 0.1, 2006-08-12
+;;
+;; * First release.
+
+;;; Code:
+
+(defun amarok-dired-add-files ()
+ "Add marked files to Amarok playlist."
+ (interactive)
+ (dired-map-over-marks
+ (let ((file (dired-get-filename)))
+ (shell-command
+ (format "dcop amarok playlist addMedia \"%s\"" file)))
+ nil))
+
+(defun amarok-dired-play-current-file ()
+ "Play current file in Amarok."
+ (interactive)
+ (shell-command
+ (format "dcop amarok playlist playMedia \"%s\"" (dired-get-filename))))
+
+(defun amarok-clear-playlist ()
+ "Clear Amarok playlist."
+ (interactive)
+ (shell-command
+ (format "dcop amarok playlist clearPlaylist")))
+
+(defun amarok-play ()
+ "Start playback in Amarok."
+ (interactive)
+ (amarok-player "play"))
+
+(defun amarok-pause ()
+ "Pause playback in Amarok."
+ (interactive)
+ (amarok-player "pause"))
+
+(defun amarok-next ()
+ "Next amarok track"
+ (interactive)
+ (amarok-player "next"))
+
+(defun amarok-prev ()
+ "Next amarok track"
+ (interactive)
+ (amarok-player "prev"))
+
+(defun amarok-play-pause ()
+ "Toggle play/pause in Amarok."
+ (interactive)
+ (amarok-player "playPause"))
+
+(defun amarok-seek (&optional where)
+ "Seek to a given location"
+ (interactive "p")
+ (if (< where 2)
+ (amarok-play)
+ (amarok-player (format "seek %d" where))))
+
+(defun amarok-player (command)
+ "Send COMMAND to Amarok player."
+ (shell-command
+ (format "dcop amarok player %s" command)))
+
+(defun amarok-setup-dired-key-bindings ()
+ "Setup convenient bindings for Amarok in dired.
+
+The following bindings will be set up:
+
+C-c a p - Play/pause
+C-c a c - Clear playlist
+C-c a a - Add marked files to playlist
+C-c a . - Play current file"
+ (interactive)
+ (define-key dired-mode-map (kbd "C-c a p") 'amarok-play-pause)
+ (define-key dired-mode-map (kbd "C-c a c") 'amarok-clear-playlist)
+ (define-key dired-mode-map (kbd "C-c a a") 'amarok-dired-add-files)
+ (define-key dired-mode-map (kbd "C-c a .") 'amarok-dired-play-current-file))
+
+(provide 'amarok)
+
+;;; amarok.el ends here
75 chop.el
@@ -0,0 +1,75 @@
+;;; chop.el -- Interactive binary search for a line within a window.
+;;; Written by Luke Gorrie <luke@bluetail.com>. Version 1.0, May 2002.
+;;; Probably only works in GNU Emacs 21.
+
+;; Interactively-driven binary search to move the point to a
+;; particular line on the screen, by successive choppings in half.
+
+;; Setup:
+;;
+;; Bind move-chop-{up,down} to keys. Otherwise they probably won't
+;; work right, since M-x mucks with `last-command'.
+
+;; Instructions:
+;;
+;; Use the following algorithm to move to any visible line in O(log N)
+;; steps for a window N lines high:
+;;
+;; 1. Choose a line, L.
+;; 2. Press either UP or DOWN. This starts by moving the point to the center.
+;; 3. Repeat until L is the current line (or close enough):
+;; If L is above the point, press UP. Otherwise press DOWN.
+;;
+;; In practice, a few chops usually gets you pretty close. Then you
+;; can zero in with line/paragraph/defun-based motion.
+
+(defvar chop-size nil
+ "Number of lines that the next \"chop\" will contain, as floating-point.
+Only meaningful for consecutive chops.")
+
+(defvar chop-current-line nil
+ "Current line number, as floating-point.
+Only meaningful for consecutive chops.")
+
+(defun chop-move-up ()
+ "Move by one 'chop' into the upper half of the remaining space."
+ (interactive)
+ (chop-move -1))
+
+(defun chop-move-down ()
+ "Move by one 'chop' into the lower half of the remaining space."
+ (interactive)
+ (chop-move 1))
+
+(defun chop-move (dir)
+ "Move by one 'chop'. DIR is the direction: -1 for upwards, 1 for downwards."
+ (setq this-command 'chop-move)
+ (if (chop-new-p)
+ (chop-first)
+ (chop-next dir)))
+
+(defun chop-new-p ()
+ (or current-prefix-arg
+ (not (eq last-command 'chop-move))))
+
+(defun chop-first ()
+ "Make a first chop, leaving the point in the middle of the window."
+ (let ((half (/ (chop-last-line-number) 2.0)))
+ (setq chop-size half)
+ (setq chop-current-line half)
+ (move-to-window-line (round half))))
+
+(defun chop-next (dir)
+ "Make the next chop."
+ (setq chop-size (/ chop-size 2))
+ (incf chop-current-line (* dir chop-size))
+ (move-to-window-line (min (chop-last-line-number)
+ (round chop-current-line))))
+
+(defun chop-last-line-number ()
+ "Window height, minus 1 to index from 0, minus 1 to account for modeline."
+ (- (window-height) 2))
+
+(provide 'chop)
+
+;;; chop.el ends here
478 css-mode.el
@@ -0,0 +1,478 @@
+;;; css-mode.el
+
+;; css-mode.el -*- Emacs-Lisp -*-
+
+;; Mode for editing Cascading Style Sheets
+
+;; Created: <Sat Feb 12 13:51:49 EST 2000>
+;; Time-stamp: <2006-07-24 01:51:12 peabody>
+;; Author: Alex Shinn <foof@synthcode.com>
+;; Version: 0.3
+;; Keywords: html, style sheets, languages
+
+;; Copyright (C) 2000-2002 Alex Shinn
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2 of
+;; the License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public
+;; License along with this program; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+;; MA 02111-1307 USA
+
+;;; Commentary:
+;;
+;; This file provides a major mode for editing level 1 and 2 Cascading
+;; Style Sheets. It offers syntax highlighting, indentation, and
+;; auto-completion of various CSS elements.
+;;
+;; To use it, put the following in your .emacs:
+;;
+;; (autoload 'css-mode "css-mode" "Mode for editing CSS files" t)
+;;
+;; You may also want something like:
+;;
+;; (setq auto-mode-alist
+;; (append '(("\\.css$" . css-mode))
+;; auto-mode-alist))
+;;
+
+;;; ChangeLog:
+;;
+;; 2002/11/25 (version 0.3):
+;; * changed to use indent-to to obey tab preference (Vasily Korytov)
+
+;; Sam: c-emacs-features is not defined until cc-mode is loaded
+(require 'cc-mode)
+
+(defgroup css nil
+ "Customizations for editing Cascading Style Sheets"
+ :group 'languages)
+
+(defcustom css-mode-hook nil
+ "*Hook to be run when `css-mode' is entered."
+ :group 'css
+ :type 'hook)
+
+(defcustom css-electric-semi-behavior nil
+ "If non-nil semicolons are electric in css mode"
+ :group 'css
+ :type 'boolean)
+
+(defcustom css-electric-brace-behavior nil
+ "If non-nil braces are electric in css mode"
+ :group 'css
+ :type 'boolean)
+
+(defcustom css-indent-offset 4
+ "Number of spaces to indent lines in CSS mode"
+ :group 'css
+ :type 'integer)
+
+(defcustom css-tab-mode 'auto
+ "Behavior of tab in CSS mode"
+ :group 'css
+ :type '(choice (const :tag "Always insert" insert)
+ (const :tag "Always indent" indent)
+ (const :tag "Always complete" complete)
+ (const :tag "Auto" auto) ))
+
+(defvar css-mode-abbrev-table nil
+ "Abbreviation table used in `css-mode' buffers.")
+(define-abbrev-table 'css-mode-abbrev-table ())
+
+
+(defvar css-at-rule-keywords nil
+ "Keywords for CSS at rules" )
+(if css-at-rule-keywords nil
+ (setq css-at-rule-keywords
+ '("import" "media" "page" "font-face" "charset") ))
+
+(defvar css-at-rule-table nil
+ "Table for CSS at rules" )
+(if css-at-rule-table nil
+ (setq css-at-rule-table (make-vector 5 0))
+ (mapcar (lambda (x) (intern x css-at-rule-table))
+ css-at-rule-keywords ))
+
+(defvar css-element-keywords nil
+ "Common CSS elements" )
+(if css-element-keywords nil
+ (setq css-element-keywords
+ '("a" "address" "b" "blockquote" "body" "br" "cite"
+ "code" "dir" "div" "dd" "dl" "dt" "em" "form" "h1"
+ "h2" "h3" "h4" "h5" "h6" "hr" "i" "img" "kbd" "li"
+ "menu" "ol" "p" "pre" "samp" "span" "strong" "table"
+ "tr" "th" "td" "tt" "ul" "var" )))
+
+(defvar css-element-table nil
+ "Table for CSS elements" )
+(if css-element-table nil
+ (setq css-element-table (make-vector 5 0))
+ (mapcar (lambda (x) (intern x css-element-table))
+ css-element-keywords ))
+
+
+(defvar css-property-keywords nil "CSS properties" )
+(if css-property-keywords nil
+ (setq css-property-keywords
+'("azimuth" "background" "background-attachment" "background-color"
+ "background-image" "background-position" "background-repeat" "border"
+ "border-collapse" "border-color" "border-spacing" "border-style"
+ "border-top" "border-right" "border-bottom" "border-left"
+ "border-top-color" "border-right-color" "border-bottom-color"
+ "border-left-color" "border-top-style" "border-right-style"
+ "border-bottom-style" "border-left-style" "border-top-width"
+ "border-right-width" "border-bottom-width" "border-left-width"
+ "border-width" "bottom" "caption-side" "clear" "clip" "color"
+ "content" "counter-increment" "counter-reset" "cue" "cue-after"
+ "cue-before" "cursor" "direction" "display" "elevation" "empty-cells"
+ "float" "font" "font-family" "font-size" "font-size-adjust"
+ "font-stretch" "font-style" "font-variant" "font-weight" "height"
+ "left" "letter-spacing" "line-height" "list-style" "list-style-image"
+ "list-style-position" "list-style-type" "margin" "margin-top"
+ "margin-right" "margin-bottom" "margin-left" "marker-offset" "marks"
+ "max-height" "max-width" "min-height" "min-width" "orphans" "outline"
+ "outline-color" "outline-style" "outline-width" "overflow" "padding"
+ "padding-top" "padding-right" "padding-bottom" "padding-left" "page"
+ "page-break-after" "page-break-before" "page-break-inside" "pause"
+ "pause-after" "pause-before" "pitch" "pitch-range" "play-during"
+ "position" "quotes" "richness" "right" "size" "speak" "speak-header"
+ "speak-numeral" "speak-punctuation" "speech-rate" "stress"
+ "table-layout" "text-align" "text-decoration" "text-indent"
+ "text-shadow" "text-transform" "top" "unicode-bidi" "vertical-align"
+ "visibility" "voice-family" "volume" "white-space" "widows" "width"
+ "word-spacing" "z-index" )))
+
+(defvar css-property-table nil
+ "Table for CSS properties" )
+(if css-property-table nil
+ (setq css-property-table (make-vector 5 0))
+ (mapcar (lambda (x) (intern x css-property-table))
+ css-property-keywords ))
+
+
+;; Three levels of highlighting
+
+(defconst css-font-lock-keywords-1 nil
+ "Subdued level highlighting for C modes.")
+
+(defconst css-font-lock-keywords-2 nil
+ "Medium level highlighting for C modes.")
+
+(defconst css-font-lock-keywords-3 nil
+ "Gaudy level highlighting for C modes.")
+
+(defvar css-font-keywords nil
+ "Font lock keywords for `css-mode'." )
+
+(let* ((css-keywords "\\(url\\|![ \t]*important\\)")
+ (css-nmstart "[a-zA-Z]")
+ (css-nmchar "[a-zA-Z0-9-]")
+ (css-ident (concat css-nmstart css-nmchar "*"))
+ (css-at-rule (concat "\\(@" css-ident "\\)"))
+ (css-element-s (concat "^\\(" css-ident "\\)"))
+ (css-element (concat "\\(?:[,+>][ \t]*\\)\\(" css-ident "\\)"))
+ (css-class (concat css-element "?\\.\\(" css-ident "\\)"))
+ (css-pseudo (concat ":\\(" css-ident "\\)"))
+ (css-attr (concat "\\[\\(" css-ident "\\)\\]"))
+ (css-id (concat "#\\(" css-ident "\\)"))
+ (css-declaration (concat "[ \t][ \t]*\\(\\<" css-ident "\\>\\):")) )
+ (setq css-font-lock-keywords-1
+ (list
+ (list css-keywords 1 'font-lock-keyword-face)
+ (list css-at-rule 1 'font-lock-keyword-face)
+ (list css-element-s 1 'font-lock-function-name-face)
+ (list css-element 1 'font-lock-function-name-face)
+ (list css-class 2 'font-lock-type-face)
+ (list css-pseudo 1 'font-lock-constant-face)
+ (list css-attr 1 'font-lock-variable-name-face)
+ (list css-id 1 'font-lock-string-face)
+ (list css-declaration 1 'font-lock-variable-name-face) ))
+ (setq css-font-lock-keywords-2 css-font-lock-keywords-1)
+ (setq css-font-lock-keywords-3 css-font-lock-keywords-2) )
+
+(defvar css-mode-syntax-table nil
+ "Syntax table used in `css-mode' buffers.")
+
+(if css-mode-syntax-table nil
+ (setq css-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?+ "." css-mode-syntax-table)
+ (modify-syntax-entry ?= "." css-mode-syntax-table)
+ (modify-syntax-entry ?< "." css-mode-syntax-table)
+ (modify-syntax-entry ?> "." css-mode-syntax-table)
+ (modify-syntax-entry ?- "w" css-mode-syntax-table)
+ (modify-syntax-entry ?/ "w" css-mode-syntax-table)
+ (modify-syntax-entry ?. "w" css-mode-syntax-table)
+ (modify-syntax-entry ?\' "\"" css-mode-syntax-table)
+ (cond
+ ;; XEmacs 19 & 20
+ ((memq '8-bit c-emacs-features)
+ (modify-syntax-entry ?/ ". 1456" css-mode-syntax-table)
+ (modify-syntax-entry ?* ". 23" css-mode-syntax-table))
+ ;; Emacs 19 & 20
+ ((memq '1-bit c-emacs-features)
+ (modify-syntax-entry ?/ ". 124b" css-mode-syntax-table)
+ (modify-syntax-entry ?* ". 23" css-mode-syntax-table))
+ ;; incompatible
+ (t (error "CSS Mode is incompatible with this version of Emacs")) )
+ (modify-syntax-entry ?\n "> b" css-mode-syntax-table)
+ ;; Give CR the same syntax as newline, for selective-display
+ (modify-syntax-entry ?\^m "> b" css-mode-syntax-table) )
+
+
+(defvar css-mode-map nil
+ "Keymap used in `css-mode' buffers.")
+
+(if css-mode-map nil
+ (setq css-mode-map (make-sparse-keymap))
+ (define-key css-mode-map ";" 'css-electric-semicolon)
+ (define-key css-mode-map "{" 'css-electric-brace)
+ (define-key css-mode-map "}" 'css-electric-brace)
+ (define-key css-mode-map "\t" 'css-tab-function)
+ (define-key css-mode-map "\C-c\C-c" 'css-comment-region)
+ (define-key css-mode-map "\C-c\C-a" 'css-complete-at-keyword)
+ (define-key css-mode-map "\C-c\C-e" 'css-complete-element)
+ (define-key css-mode-map "\C-c\C-p" 'css-complete-property) )
+
+
+;;; Utility functions
+
+(defun css-in-comment-p ()
+ "Check whether we are currently in a comment"
+ (let ((here (point)))
+ (and (search-backward "/*" nil t)
+ (prog1
+ (not (search-forward "*/" here t))
+ (goto-char here) ))))
+
+
+(defun css-complete-symbol (&optional table predicate prettify)
+ (let* ((end (point))
+ (beg (save-excursion
+ (skip-syntax-backward "w")
+ (point)))
+ (pattern (buffer-substring beg end))
+ (table (or table obarray))
+ (completion (try-completion pattern table predicate)))
+ (cond ((eq completion t))
+ ((null completion)
+ (message "Can't find completion for \"%s\"" pattern))
+ ((not (string-equal pattern completion))
+ (delete-region beg end)
+ (insert completion))
+ (t
+ (message "Making completion list...")
+ (let ((list (all-completions pattern table predicate)))
+ (if prettify
+ (setq list (funcall prettify list)))
+ (with-output-to-temp-buffer "*Help*"
+ (display-completion-list list)))
+ (message "Making completion list...%s" "done")))))
+
+
+(defun css-indent-line ()
+ "Indent the current line"
+ (if (or (css-in-comment-p)
+ (looking-at "[ \t]*/\\*") )
+ nil
+ (save-excursion
+ (let ((here (point))
+ (depth 0))
+ (while (and (forward-line -1)
+ (or (looking-at "^[ \t]*$")
+ (css-in-comment-p) ))
+ ; Jump to a non comment/white-space line
+ )
+ (cond ((looking-at "\\([ \t]*\\)\\([^ \t].*\\)?{[ \t]*$")
+ (setq depth (+ (- (match-end 1) (match-beginning 1))
+ css-indent-offset )))
+ ((looking-at "\\([ \t]*\\)[^ \t]")
+ (setq depth (- (match-end 1) (match-beginning 1))) )
+ (t (setq depth 0)) )
+ (goto-char here)
+ (beginning-of-line)
+ (if (looking-at "[ \t]*}")
+ (setq depth (max (- depth css-indent-offset) 0)) )
+ (if (looking-at "\\([ \t]*\\)")
+ (if (= depth (- (match-end 1) (match-beginning 1)))
+ nil
+ (delete-region (match-beginning 1) (match-end 1))
+ (indent-to depth))
+ (if (> depth 0)
+ (indent-to depth)))))
+ (if (looking-at "[ \t]*")
+ (end-of-line) )))
+
+
+(defun css-indent-region (start end)
+ "Indent the current line"
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char start)
+ (while (and (not (eobp)) (forward-line 1))
+ (css-indent-line) ))))
+
+
+;;; Commands
+
+(defun css-electric-semicolon (arg)
+ "Insert a semi-colon, and possibly indent line.
+If numeric argument is not given, or is 1, auto-indent according to
+`css-electric-semi-behavior'. If arg is 0, do not auto-indent, if
+arg is 2 always auto-indent, and if arg is anything else invert the
+usual behavior."
+ (interactive "P")
+ ;; insert a semicolon
+ (self-insert-command 1)
+ ;; maybe do electric behavior
+ (or (css-in-comment-p)
+ (and (eq arg 1)
+ css-electric-semi-behavior
+ (css-indent-line) )
+ (and (eq arg 2)
+ (css-indent-line) )
+ (eq arg 0)
+ (or (not css-electric-semi-behavior)
+ (css-indent-line) )))
+
+
+(defun css-electric-brace (arg)
+ "Insert a brace, and possibly indent line.
+If numeric argument is not given, or is 1, auto-indent according to
+`css-electric-brace-behavior'. If arg is 0, do not auto-indent, if
+arg is 2 always auto-indent, and if arg is anything else invert the
+usual behavior."
+ (interactive "P")
+ ;; insert a brace
+ (self-insert-command 1)
+ ;; maybe do electric behavior
+ (or (css-in-comment-p)
+ (and (eq arg 1)
+ css-electric-brace-behavior
+ (css-indent-line) )
+ (and (eq arg 2)
+ (css-indent-line) )
+ (eq arg 0)
+ (or (not css-electric-brace-behavior)
+ (css-indent-line) )))
+
+(defun css-complete-at-keyword ()
+ "Complete the standard element at point"
+ (interactive)
+ (let ((completion-ignore-case t))
+ (css-complete-symbol css-at-rule-table) ))
+
+(defun css-complete-element ()
+ "Complete the standard element at point"
+ (interactive)
+ (let ((completion-ignore-case t))
+ (css-complete-symbol css-element-table) ))
+
+(defun css-complete-property ()
+ "Complete the standard element at point"
+ (interactive)
+ (let ((completion-ignore-case t))
+ (css-complete-symbol css-property-table) ))
+
+
+(defun css-tab-function (&optional arg)
+ "Function to call when tab is pressed in CSS mode.
+
+With a prefix arg, insert a literal tab. Otherwise behavior depends
+on the value of `css-tab-mode'. If it's 'insert, insert a literal
+tab. If it's 'indent, indent the current line, and if it's 'complete,
+try to complete the expression before point. A value of 'auto means
+to inspect the current line, and indent if point is at the beginning
+or end of the line, but complete if it's at a word.
+
+There are three possible completions to perform:
+`css-complete-at-keyword' if the point is after an '@',
+`css-complete-property' if point is inside a block, and
+`css-complete-element' otherwise."
+ (interactive "P")
+ (let* ((end (point))
+ (start (prog2
+ (beginning-of-line)
+ (point)
+ (goto-char end) ))
+ (prefix (buffer-substring start end)) )
+ (cond ((or arg (eq css-tab-mode 'insert))
+ (insert "\t"))
+ ((eq css-tab-mode 'indent)
+ (css-indent-line))
+ ((and (not (eq css-tab-mode 'complete))
+ (or (string-match "^[ \t]*[{}]?[ \t]*$" prefix)
+ (string-match "^.*;[ \t]*" prefix) ))
+ ;; indent at the beginning or end of a line
+ (css-indent-line))
+ ((string-match "^.*@[a-zA-Z0-9-]*$" prefix)
+ (css-complete-at-keyword))
+ ((string-match "^\\([ \t]+.*\\|.*\{[ \t]*[a-zA-Z-]+\\)$" prefix)
+ ;; complete properties on non-starting lines
+ (css-complete-property))
+ ;; otherwise try an element
+ (t
+ (css-complete-element)) )))
+
+
+;;;###autoload
+(defun css-mode ()
+ "Major mode for editing CSS files"
+ (interactive)
+ (kill-all-local-variables)
+ (set-syntax-table css-mode-syntax-table)
+ (setq major-mode 'css-mode
+ mode-name "CSS"
+ local-abbrev-table css-mode-abbrev-table)
+ (use-local-map css-mode-map)
+ ;; local variables
+ (make-local-variable 'parse-sexp-ignore-comments)
+ (make-local-variable 'comment-start-skip)
+ (make-local-variable 'comment-start)
+ (make-local-variable 'comment-end)
+ (make-local-variable 'block-comment-start)
+ (make-local-variable 'block-comment-end)
+ (make-local-variable 'block-comment-left)
+ (make-local-variable 'block-comment-right)
+ (make-local-variable 'block-comment-top-right)
+ (make-local-variable 'block-comment-bot-left)
+ (make-local-variable 'block-comment-char)
+ (make-local-variable 'paragraph-start)
+ (make-local-variable 'paragraph-separate)
+ (make-local-variable 'paragraph-ignore-fill-prefix)
+ (make-local-variable 'font-lock-defaults)
+ (setq font-lock-defaults '((css-font-lock-keywords-1
+ css-font-lock-keywords-2
+ css-font-lock-keywords-3)))
+ ;; now set their values
+ (setq parse-sexp-ignore-comments t
+ comment-start-skip "/\\*+ *\\|// *"
+ comment-start "/\\*"
+ comment-end "\\*/")
+ (setq block-comment-start "/*"
+ block-comment-end "*/"
+ block-comment-left " * "
+ block-comment-right " *"
+ block-comment-top-right ""
+ block-comment-bot-left " "
+ block-comment-char ?* )
+ (setq indent-line-function 'css-indent-line
+ indent-region-function 'css-indent-region
+ paragraph-ignore-fill-prefix t
+ paragraph-start (concat "\\|$" page-delimiter)
+ paragraph-separate paragraph-start)
+ (run-hooks 'css-mode-hook))
+
+
+(provide 'css-mode)
+
+;;; css-mode.el ends here.
293 ecb/Makefile
@@ -0,0 +1,293 @@
+# This Makefile byte-compiles the ECB lisp files and generates online-help.
+
+# Copyright (C) 2000 - 2005 Jesper Nordenberg,
+# Klaus Berndl,
+# Kevin A. Burton,
+# Free Software Foundation, Inc.
+
+# Author: Jesper Nordenberg <mayhem@home.se>
+# Klaus Berndl <klaus.berndl@sdm.de>
+# Kevin A. Burton <burton@openprivacy.org>
+# Maintainer: Klaus Berndl <klaus.berndl@sdm.de>
+# Kevin A. Burton <burton@openprivacy.org>
+# Keywords: browser, code, programming, tools
+# Created: 2001
+
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+
+# You should have received a copy of the GNU General Public License along with
+# GNU Emacs; see the file COPYING. If not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# $Id: Makefile,v 1.106 2005/04/19 15:29:31 berndl Exp $
+
+
+# ========================================================================
+# User configurable section
+
+# ------------------------------------------------------------------------
+# Byte-compiling ECB:
+# ------------------------------------------------------------------------
+
+# Define here the correct path to your Emacs or XEmacs binary. Ensure you
+# have set this variable to 'xemacs' if you want byte-compile with XEmacs!
+EMACS=emacs
+
+# In the following path-settings of this section use always FORWARD-SLASHES
+# as directory-separator even with MS Windows systems.
+
+# -------- Compiling ECB with the cedet-library 1.0 ----------------------
+
+# cedet 1.0 (contains a.o. semantic 2.0, eieio 0.18 and speedbar 0.15). If
+# you want compile ECB with the cedet library then set here the full path
+# to the cedet-installation directory. If you do not want using the
+# cedet-suite but separate semantic-, eieio- and speedbar-pathes set this
+# variable to empty.
+
+CEDET=
+#CEDET=c:/Programme/emacs-21/site-lisp/package-development/cedet
+#CEDET=c:/Programme/emacs-21/site-lisp/multi-file-packages/cedet-1.0beta2b
+
+# -------- Compiling ECB with the semantic < 2.0 -------------------------
+
+# If you do not want compiling ECB with the cedet1.0-library then do not
+# set CEDET above!
+
+# If semantic, eieio and speedbar are added to load-path within some
+# Elisp-statements in the Emacs initialization-files (e.g. .emacs or
+# site-start.el) then set here again the load-path of the semantic-version,
+# the eieio-version and the speedbar-version loaded into your Emacs. Make
+# sure you compile ECB with the semantic-, eieio- and speedbar-version you
+# load into Emacs!
+
+# If you are using XEmacs with already installed XEmacs-packages for
+# semantic, eieio and speedbar or if you are using a file subdirs.el with
+# GNU Emacs which adds semantic, eieio and speedbar then there is NO need
+# to set the load-path for semantic, eieio or speedbar.
+SEMANTIC=
+EIEIO=
+SPEEDBAR=
+
+# You can set here more load-paths to arbitrary packages if you want. But
+# this is really not necessary!
+LOADPATH=
+
+# Two ways to build ECB:
+# - Call "make" to byte-compile the ECB. You can savely ignore the messages.
+# - Or call
+#
+# make EMACS="path/to/emacs"
+#
+# or
+#
+# make CEDET="path/to/cedet" (for compiling with cedet 1.0)
+#
+# or
+#
+# make SEMANTIC="path/to/semantic" EIEIO="path/to/eieio" \
+# SPEEDBAR="path/to/speedbar "EMACS="path/to/emacs"
+#
+# if you want to set either different load-paths or Emacs-binary and
+# you do not want edit the Makefile. Do not forget quoting the arguments
+# if they contain spaces!
+#
+# If there are any warning messages during byte-compilation (normally there
+# are not any) you can savely ignore them!
+
+
+# ------------------------------------------------------------------------
+# Generating different online-help formats
+# ------------------------------------------------------------------------
+
+# If you want to generate all formats of online-help from the texi-source
+# you must set here the FULL paths to the required tools. The Makefile
+# tests if the tools are available on these locations, so if a tool x is
+# not available let the related setting X empty! NOTE: For generating the
+# PDF-format you will need an installed TeX and Ghostscript!
+MAKEINFO=/usr/bin/makeinfo
+TEXI2DVI=/C/Programme/texmf/miktex/bin/texi2dvi
+# You need either the dvipdfm-tool
+#DVIPDFM=/C/Programme/texmf/miktex/bin/dvipdfm
+DVIPDFM=
+# or the tools dvips and ps2pdf. If dvipdfm is available the Makefile uses
+# this one!
+DVIPS=/C/Programme/texmf/miktex/bin/dvips
+PS2PDF=/C/home/bin/ps2pdf
+
+# To generate the online-formats just call "make online-help" for info- and
+# HTML-format and "make pdf" for PDF-format.
+
+# ------------------------------------------------------------------------
+# Installing the info online-help in the Top-directory of (X)Emacs-info
+# ------------------------------------------------------------------------
+
+# Set here the path of the info subdirectory of your (X)Emacs installation
+# which contains the dir file.
+EMACSINFOPATH=/C/Programme/emacs-21/info
+
+# If you want to install the info-format of the online-help in the
+# Top-directory of the info-directory of (X)Emacs (see above EMACSINFOPATH)
+# then you must specify the full path of the tool install-info.
+INSTALLINFO=/usr/bin/install-info
+
+# To install the online-help just call "make install-help"
+
+# end of user configurable section
+# ========================================================================
+
+# Do not change anything below!
+
+# $Id: Makefile,v 1.106 2005/04/19 15:29:31 berndl Exp $
+
+# For the ECB-maintainers: Change the version-number here and not
+# elsewhere!
+ecb_VERSION=2.32
+
+include ecb-makedef.mk
+
+ecb: $(ecb_LISP_EL)
+ @echo "Byte-compiling ECB with LOADPATH=${LOADPATH} ..."
+ @$(RM) $(ecb_LISP_ELC) ecb-compile-script
+ @echo "(add-to-list 'load-path nil)" > ecb-compile-script
+ @if test ! -z "${CEDET}"; then\
+ echo "(load-file \"$(CEDET)/common/cedet.el\")" >> ecb-compile-script; \
+ else \
+ if test ! -z "${SEMANTIC}"; then\
+ echo "(add-to-list 'load-path \"$(SEMANTIC)\")" >> ecb-compile-script; \
+ fi; \
+ if test ! -z "${EIEIO}"; then\
+ echo "(add-to-list 'load-path \"$(EIEIO)\")" >> ecb-compile-script; \
+ fi; \
+ if test ! -z "${SPEEDBAR}"; then\
+ echo "(add-to-list 'load-path \"$(SPEEDBAR)\")" >> ecb-compile-script; \
+ fi; \
+ fi
+ @if test ! -z "${LOADPATH}"; then\
+ for loadpath in ${LOADPATH}; do \
+ echo "(add-to-list 'load-path \"$$loadpath\")" >> ecb-compile-script; \
+ done; \
+ fi
+ @echo "(require 'ecb)" >> ecb-compile-script
+ @echo "(setq debug-on-error t)" >> ecb-compile-script
+ $(EBATCH) -l ecb-compile-script --eval '(ecb-byte-compile t)'
+ @$(RM) ecb-compile-script
+
+
+all: ecb online-help
+
+online-help: $(ecb_TEXI)
+ @if test -x "$(MAKEINFO)"; then\
+ $(RM) -R $(ecb_INFO_DIR) $(ecb_HTML_DIR); \
+ $(MKDIR) $(ecb_INFO_DIR) $(ecb_HTML_DIR); \
+ echo Generating info-format...; \
+ $(MAKEINFO) --fill-column=78 $<; \
+ $(MV) *.info* $(ecb_INFO_DIR); \
+ echo Generating html-format...; \
+ $(MAKEINFO) --html --output=$(ecb_HTML_DIR) $<; \
+ for file in $(ecb_HTML_DIR)/*.html; do\
+ $(MV) $$file tmpfile; \
+ sed "s/index\\.html/$(ecb_HTML)/g" tmpfile > $$file; \
+ $(RM) tmpfile; \
+ done; \
+ $(MV) $(ecb_HTML_DIR)/index.html $(ecb_HTML_DIR)/$(ecb_HTML); \
+ else \
+ echo No info- and html-format generating because the tool; \
+ echo - makeinfo in $(MAKEINFO); \
+ echo is not available!; \
+ fi
+
+pdf: $(ecb_TEXI)
+ @if test -x "$(TEXI2DVI)" -a -x "$(DVIPDFM)"; then\
+ $(RM) $(ecb_DVI) $(ecb_PDF); \
+ echo Generating pdf-format with dvipdfm ...; \
+ $(TEXI2DVI) --clean $<; \
+ $(DVIPDFM) $(ecb_DVI); \
+ $(RM) $(ecb_DVI); \
+ elif test -x "$(TEXI2DVI)" -a -x "$(DVIPS)" -a -x "$(PS2PDF)"; then\
+ $(RM) $(ecb_DVI) $(ecb_PS) $(ecb_PDF); \
+ echo Generating pdf-format with dvips and ps2pdf ...; \
+ $(TEXI2DVI) --quiet --clean $<; \
+ $(DVIPS) -Pcmz -q $(ecb_DVI) -o $(ecb_PS); \
+ $(PS2PDF) $(ecb_PS); \
+ $(RM) $(ecb_DVI) $(ecb_PS); \
+ else \
+ echo No pdf-format generating because at least one of the tools; \
+ echo - texi2dvi in $(TEXI2DVI); \
+ echo - dvips in $(DVIPS); \
+ echo - ps2pdf in $(PS2PDF); \
+ echo is not available!; \
+ fi
+
+
+install-help: $(ecb_INFO_DIR)/$(ecb_INFO)
+ @if test -x "$(INSTALLINFO)" -a -f "$(EMACSINFOPATH)/dir"; then\
+ echo Installing the Online-help in $(EMACSINFOPATH)...; \
+ $(CP) $(ecb_INFO_DIR)/*info* $(EMACSINFOPATH); \
+ $(INSTALLINFO) $< $(EMACSINFOPATH)/dir; \
+ else \
+ echo Can not install the online-help because either; \
+ echo - the tool $(INSTALLINFO) or; \
+ echo - the file $(EMACSINFOPATH)/dir; \
+ echo is not available!; \
+ fi
+
+
+clean:
+ @$(RM) $(ecb_LISP_ELC) ecb-compile-script
+
+# The targets below are only for maintaining the ECB-package.
+
+$(ecb_INFO_DIR)/$(ecb_INFO): online-help
+
+# updates RELEASE_NOTES, README, NEWS, ecb.texi and ecb.el to the
+# version-number of $(ecb_VERSION).
+prepversion:
+ @$(MV) RELEASE_NOTES RELEASE_NOTES.tmp
+ @sed "1s/version.*/version $(ecb_VERSION)/" RELEASE_NOTES.tmp > RELEASE_NOTES
+ @$(RM) RELEASE_NOTES.tmp
+ @$(MV) README README.tmp
+ @sed "1s/version.*/version $(ecb_VERSION)/" README.tmp > README
+ @$(RM) README.tmp
+ @$(MV) NEWS NEWS.tmp
+ @sed "1s/version.*/version $(ecb_VERSION)/" NEWS.tmp > NEWS
+ @$(RM) NEWS.tmp
+ @$(MV) ecb-upgrade.el ecb-upgrade.el.tmp
+ @sed "s/^(defconst ecb-version.*/(defconst ecb-version \"$(ecb_VERSION)\"/" ecb-upgrade.el.tmp > ecb-upgrade.el
+ @$(RM) ecb-upgrade.el.tmp
+ @(echo "/@macro ecbver"; \
+ echo "+"; \
+ echo "c"; \
+ echo "$(ecb_VERSION)"; \
+ echo "."; \
+ echo "w"; \
+ echo "q") | ed -s $(ecb_TEXI) 1> /dev/null
+
+
+autoloads:
+ @$(RM) $(ecb_AUTOLOADS) $(ecb_AUTOLOADS)c
+ $(EBATCH) -l ecb-autogen -f ecb-update-autoloads
+
+
+# builds the distribution file $(ecb_VERSION).tar.gz
+distrib: $(ecb_INFO_DIR)/$(ecb_INFO) prepversion autoloads ecb
+ @$(RM) ecb-$(ecb_VERSION).tar.gz
+ @$(RM) -R ecb-$(ecb_VERSION)
+ @$(MKDIR) ecb-$(ecb_VERSION)
+ @$(CP) $(ecb_DISTRIB_FILES) ecb-$(ecb_VERSION)
+ @$(CP) -r $(ecb_INFO_DIR) ecb-$(ecb_VERSION)
+ @$(CP) -r $(ecb_HTML_DIR) ecb-$(ecb_VERSION)
+ @$(CP) -r $(ecb_IMAGE_DIR) ecb-$(ecb_VERSION)
+ @find ecb-$(ecb_VERSION)/$(ecb_IMAGE_DIR) -name CVS -print | xargs rm -Rf
+ @find ecb-$(ecb_VERSION)/$(ecb_IMAGE_DIR) -name *~ -print | xargs $(RM)
+ @find ecb-$(ecb_VERSION)/$(ecb_IMAGE_DIR) -name *.png -print | xargs $(RM)
+ @tar -cvzf ecb-$(ecb_VERSION).tar.gz ecb-$(ecb_VERSION)
+ @$(RM) -R ecb-$(ecb_VERSION)
+
+# End of Makefile
2,693 ecb/NEWS
2,693 additions, 0 deletions not shown
208 ecb/README
@@ -0,0 +1,208 @@
+README for the Emacs Code Browser (ECB) version 2.32
+
+
+About
+-----
+
+This package contains a code browser for several programming-languages for
+(X)Emacs. For instructions on how to use the browser read the online-help
+either with the shipped info-manual (see "Usage" below) or direct from the
+ECB-Homepage at http://ecb.sourceforge.net.
+
+The latest version can be found at: http://ecb.sourceforge.net
+
+
+Requirements
+------------
+
+ECB requires the following packages:
+
+- Semantic, author version 1.4 or higher
+ (http://cedet.sourceforge.net/semantic.shtml)
+
+- Eieio, author version 0.17 or higher
+ (http://cedet.sourceforge.net/eieio.shtml).
+
+- speedbar, author version 0.14beta1 or higher
+ (http://cedet.sourceforge.net/speedbar.shtml)
+ IMPORTANT: The speedbar-version shipped with GNU Emacs <= 21.3 does not
+ satisfy the requirements - download and install a newer one!
+
+- Optional: If Java code is edited the ECB works best when the JDEE package
+ (http://sunsite.auc.dk/jde) is installed.
+
+If you use XEmacs you must have installed the package c-support (contains
+hideshow.el). If you want to read the online-help of ECB in HTML-format you
+must have the library browse-url (part of the mail-lib XEmacs package)
+installed; this package is also needed for submitting problem-reports to the
+ECB-maintainers!
+
+
+Using the beta of cedet 1.0 (contains semantic 2.0)
+---------------------------------------------------
+
+From beginning with version 2.01 ECB supports the next generation of the
+cedet-tools. But before the cedet 1.0 suite becomes stable this means that ECB
+runs correctly with loaded cedet 1.0 but the ECB-upgrading festure does not
+support autom. upgrading to latest available cedet versions. This will be
+first available after first stable release of the new cedet-library 1.0.
+
+So, if the cedet 1.0 suite is loaded then the min- and max-version of
+semantic, eieio and speedbar (mentioned in the Requirements-section above)
+have no relevance! If the new cedet 1.0 suite should be used then just install
+and load cedet 1.0 like described in the cedet-installation-instructions and
+go one with step 3. But ensure you have loaded - as described in the
+cedet-INSTALL-file - the file "/path/to/cedet/common/cedet.el" because
+otherwise cedet is not properly installed and ECB can not savely recognize
+that the new cedet-suite is loaded and should be used!
+
+
+Installation
+------------
+
+*IMPORTANT*: The following steps 1. to 8. describe installation tasks if you
+got the archive in the format available at the ECB website. If you use XEmacs
+and got ECB as regular XEmacs-package (e.g. downloaded and installed by the
+package-manager of XEmacs) then there is nothing to do for you, just start ECB
+with `ecb-activate' or read the online-help with `ecb-show-help'.
+
+
+1. Unpack the ECB archive (probably you have already done this :-)
+
+2. Install the required semantic-, eieio- and speedbar-version.
+
+ *Note 1*: If the new cedet 1.0 suite should be used then just install and
+ load cedet 1.0 like described in the cedet-installation-instructions and go
+ one with step 3.
+
+ *Note 2*: ECB maybe requires a newer version of these libraries than shipped
+ with (X)Emacs. You have to install exactly a version ECB requires and also
+ to make sure that the correct version is loaded into (X)Emacs!
+
+ But ECB performs two automatic checks:
+
+ - At load-time: It checks if the packages semantic, eieio and speedbar are
+ at least installed so ECB can be loaded. If not it offers to download
+ and install them.
+
+ - At start-time: It checks if the correct versions of semantic, eieio and
+ speedbar are installed and gives you proper feedback.
+
+ So if you are not sure if you have installed the required packages at all
+ or if you have installed the correct versions of these packages then do
+ not worry about this, just go on with the following installation steps: If
+ ECB is missing something it will give you proper feedback and support not
+ later than at load-time or start-time!
+
+3. Add the new ECB-directory to your `load-path' variable.
+
+ You *MUST* add the ECB-install-directory to the `load-path' either by
+ changing the `load-path' variable directly in your `.emacs' or
+ `site-lisp/site-start.el' or by working with a file `subdirs.el'.
+
+ So for example the needed entry for your .emacs-file could be:
+
+ (add-to-list 'load-path
+ "/path/to/your/ecb/installation/directory")
+
+ *ATTENTION*: ECB is NOT properly installed if it's directory is not added
+ to `load-path' and for example just loaded by
+
+ (load-file "/path/to/ecb/ecb.el")
+
+ Do not do this!
+
+4. Load ECB by adding code to your `.emacs':
+
+ If you want to load the complete ECB at (X)Emacs-loadtime (Advantage: All
+ ECB-options available after loading ECB). Disadvantage: Increasing
+ loadtime):
+
+ (require 'ecb)
+
+ If you want to load the ECB first after starting it by `ecb-activate'
+ (Advantage: Fast loading. Disadvantage: ECB- and semantic-options first
+ available after starting ECB):
+
+ (require 'ecb-autoloads)
+
+ This loads all available autoloads (e.g. `ecb-activate', `ecb-minor-mode',
+ `ecb-show-help' or `ecb-byte-compile') of current ECB.
+
+ Regardless which method you prefer: In both cases the used statement must
+ be placed *after* the statement of step 3!
+
+5. Restart (X)Emacs.
+
+ECB is now ready for use and can be activated by calling `M-x ecb-activate' or
+`ecb-minor-mode'. Now you can either starting using ECB or you can do these
+optional installation steps:
+
+6. Reading the online help with `ecb-show-help'
+
+ Maybe you are interested to read the online-help of ECB before first start.
+
+7. Calling `ecb-byte-compile'
+
+ This byte compiles ECB. You can safely ignore all messages. (You can also
+ byte-compile ECB from the command-line either by using the `Makefile' or by
+ using the batch-file `make.bat'. Just read the comments in that file you
+ choose.)
+
+8. Installing the supplied `ecb.info'
+
+ The ECB distribution contains a subdirectory "info-help" which contains the
+ online-help of ECB in Info-format. You can install this online help so it's
+ available in the Top-directory of Info. There are two ways to do this:
+
+ - Use "install-info" (recommended):
+
+ 1. Copy the the files of the subdirectory "info-help" into the
+ info-directory of Emacs
+
+ 2. Install the file "info-help/ecb.info" with the command "install-info"
+ (if available on your system) in the `dir'-file.
+
+ The supplied `Makefile' offers a target `install-help' which does both of
+ these steps. You have just to call `make install-help' with the correct
+ EMACSINFOPATH set (see the comment in `Makefile'). Here is an example:
+
+ make EMACSINFOPATH=/path/to/emacs/info install-help
+
+ - Manual Installation:
+
+ Copy the files of the subdirectory "info-help" into the info-directory of
+ Emacs and modify the file `dir' manually.
+
+ But it doesn't matter if you do not execute this step (8.) because the
+ online help of ECB is always available though, see `ecb-show-help'.
+
+
+Usage
+-----
+
+Call "M-x ecb-activate" to activated ECB.
+
+Call "M-x ecb-customize-most-important" to get a list of the most important
+options of ECB. These are options you should at least know that they exist.
+
+Call "M-x ecb-show-help" to get a detailed online-help for ECB. If you are
+using ECB the first time you should read the online help accurately!
+
+
+Contacts
+--------
+
+Send comments, bug reports and improvement suggestions to:
+
+ecb-list@lists.sourceforge.net
+
+*IMPORTANT*: Cause of extra appearance of SPAM in the mailing-lists,
+SourceForge has changed its policy: Now it is only possible to post to the
+mailing-list for users who have subscribed this mailing-list.
+
+So please be aware you will not be able to send comments, bug reports and
+improvement suggestions before you have subscribed the ECB-mailing-list. See
+the section "Mailing-list" at the ECB-website at http://ecb.sourceforge.net
+how to do this.
+
281 ecb/RELEASE_NOTES
@@ -0,0 +1,281 @@
+This file contains some important release-notes for ECB version 2.32
+
+General:
+--------
+
+Please read also the sections "Known conflicts and bugs" and "Tips and Tricks"
+in the online help ('ecb-show-help'). The former one is a small list of known
+conflicts and for each conflict a proper and easy solution! Please read also
+carefully the upgrade informations below!
+
+
+Installing ECB first time:
+--------------------------
+
+No special notes beyond the contents of README.
+
+
+Upgrading from any version:
+---------------------------
+
+The option `ecb-auto-expand-tag-tree-collapse-other' has changed its type. ECB
+autom. upgrades your old setting to the new option-type.
+
+
+Upgrading from any version < 2.26:
+----------------------------------
+
+Some regexp-options has been changed to regexp-list-options:
+`ecb-excluded-directories-regexp' --> `ecb-excluded-directories-regexps'
+`ecb-source-file-regexps' --> `ecb-source-file-regexps'
+`ecb-exclude-parents-regexp' --> `ecb-exclude-parents-regexps'
+
+All these options now accept (and require) a list of regexps instead of
+exactly one big regexp. ECB autom. upgrades your old settings to the new
+option-types rsp. also -names (if the option has been renamed).
+
+
+Upgrading from versions < 2.25:
+-------------------------------
+
+`ecb-sort-history-items' has been renamed to `ecb-history-sort-method'. ECB
+autom. upgrades your old setting to the new option-name and -type.!
+
+
+Upgrading from versions < 2.23:
+-------------------------------
+
+The option `ecb-show-tags' has changed its type. ECB autom. upgrades your old
+setting to the new option-type.!
+
+
+Upgrading from versions < 2.20:
+-------------------------------
+
+All user-defined extensions written for and added to one of the options
+`ecb-directories-menu-user-extension', `ecb-sources-menu-user-extension',
+`ecb-methods-menu-user-extension' or `ecb-history-menu-user-extension' MUST be
+rewritten and redefined via the new macro `tree-buffer-defpopup-command'!
+
+The option `ecb-primary-mouse-jump-destination' has been renamed to
+`ecb-mouse-click-destination' and has also changed its default value to
+'last-point.
+
+The option `ecb-split-edit-window' has been renamed in
+`ecb-split-edit-window-after-start'. In addition the value t is not allowed
+anymore for this option - use 'before-activation instead. In a further
+addition this option has a new default value 'before-deactivation. See the
+docstring of this option to get all details.
+
+The Option `ecb-other-window-jump-behavior' has been renamed to
+`ecb-other-window-behavior'.
+
+ECB autom. upgrades your old settings to the new option types/names!
+
+
+Upgrading from versions < 2.11:
+-------------------------------
+
+The type of the option `ecb-post-process-semantic-taglist' has been changed.
+ECB autom. upgrades the old-value of that option to the new type! There is
+nothing to do for you.
+
+
+Upgrading from versions < 2.01:
+-------------------------------
+
+The following options have changed their name:
+
+- ecb-auto-expand-token-tree -> ecb-auto-expand-tag-tree
+- ecb-font-lock-tokens -> ecb-font-lock-tags
+- ecb-token-jump-sets-mark -> ecb-tag-jump-sets-mark
+- ecb-token-display-function -> ecb-tag-display-function
+- ecb-type-token-display -> ecb-type-tag-display
+- ecb-post-process-semantic-tokenlist -> ecb-post-process-semantic-taglist
+- ecb-show-only-positioned-tokens -> ecb-show-only-positioned-tags
+- ecb-show-tokens -> ecb-show-tags
+- ecb-highlight-token-with-point -> ecb-highlight-tag-with-point
+- ecb-highlight-token-with-point-delay -> ecb-highlight-tag-with-point-delay
+- ecb-token-visit-post-actions -> ecb-tag-visit-post-actions
+- ecb-token-header-face -> ecb-tag-header-face
+
+ECB autom. upgrades all old-values of these options to the new options! There
+is nothing to do for you.
+
+The type of the options `ecb-directories-menu-user-extension',
+`ecb-sources-menu-user-extension', `ecb-methods-menu-user-extension' and
+`ecb-history-menu-user-extension' has been changed - now sub-menus are
+allowed. The new default values of these options contains now entries, mostly
+concerning "version control". ECB autom. upgrades the old-values to the new
+option-type by appending the new defaults to your old values. So no old
+personal menu-entries are lost, but cause of the new default maybe you have
+some entries twice. Feel free to delete via customize what you want from the
+new settings.
+
+The old option `ecb-tree-use-image-icons' has been replaced by
+`ecb-tree-buffer-style'.
+
+
+Upgrading from versions < 1.96:
+-------------------------------
+
+The options `ecb-mode-line-data' and `ecb-mode-line-prefixes' have changed
+their type. ECB will autom. upgrade the old values of these options as best as
+possible to the new types!
+
+The option `ecb-layout-switch-to-compilation-window' has been removed. This
+mimic is now done automatically.
+
+The name of the command `ecb-toggle-enlarged-compilation-window' has been
+changed to `ecb-toggle-compile-window-height' (The old name is still available
+as alias but is deprecated). The keybinding [C-. /] remains.
+
+The command `ecb-eshell-goto-eshell' has been removed. Now just use `eshell'
+to work with the eshell. The old binding [C-. e] now simply runs `eshell'.
+
+The command `ecb-eshell-enlarge' has been removed. Now just use the standard
+ECB-command `ecb-toggle-compile-window-height' for this.
+
+
+Upgrading from a version < 1.95.1:
+----------------------------------
+
+If there are byte-compiled(!) user-defined layouts - either created
+interactively by `ecb-create-new-layout' or programmed with the macro
+`ecb-layout-define' - then the file where these user-defined layouts are saved
+(see option `ecb-create-layout-file') must be re-byte-compiled with latest ECB
+version >= 1.95.1! If the user-defined layouts are not byte-compiled then
+there is nothing to do.
+
+Some default key-bindings have changed; the new bindings are:
+
+ C-c . g1: `ecb-goto-window-edit1' (was C-c . 1)
+ C-c . g2: `ecb-goto-window-edit2' (was C-c . 2)
+ C-c . gd: `ecb-goto-window-directories' (was C-c . d)
+ C-c . gs: `ecb-goto-window-sources' (was C-c . s)
+ C-c . gm: `ecb-goto-window-methods' (was C-c . m)
+ C-c . gh: `ecb-goto-window-history' (was C-c . h)
+ C-c . gb: `ecb-goto-window-speedbar' (was C-c . bw)
+ C-c . gc: `ecb-goto-window-compilation' (was C-c . c)
+
+
+Upgrading from version < 1.95:
+------------------------------
+
+Some default key-bindings have changed; the new bindings are:
+
+ C-c . r: `ecb-rebuild-methods-buffer' (was not bound before)
+ C-c . lc: `ecb-change-layout' (was C-c . l)
+ C-c . lr: `ecb-redraw-layout' (was C-c . r)
+ C-c . lt: `ecb-toggle-layout' (was C-c . t)
+ C-c . lw: `ecb-toggle-ecb-windows' (was C-c . w)
+
+ECB now requires speedbar. ECB needs a version >= 0.14beta1.
+
+For XEmacs now the package c-support (contains hideshow.el) has to be
+installed.
+
+
+Upgrading from versions < 1.92:
+--------------------------------
+
+The type of the option `ecb-truncate-lines' has changed.
+ECB autom. upgrades the old value of this option to its new type!
+
+
+Upgrading from version 1.80:
+----------------------------
+
+The type or name of the following options has changed:
+
+- ecb-layout-nr: New name is ecb-layout-name
+- ecb-toggle-layout-sequence: New type
+- ecb-major-modes-activate: New type
+- ecb-layout-window-sizes: New type
+- ecb-show-sources-in-directories-buffer: New type
+- ecb-cache-directory-contents: New type
+- ecb-source-file-regexps: New type
+- ecb-show-ecb-windows-hook: New name is ecb-show-ecb-windows-before-hook
+- ecb-hide-ecb-windows-hook: New name is ecb-hide-ecb-windows-before-hook
+
+ECB autom. upgrades the values of these options to theirs new names/types!
+
+
+Upgrading from version < 1.80:
+------------------------------
+
+The type of the following options has changed:
+
+- 'ecb-token-display-function'
+- 'ecb-window-sync'
+
+ECB has a new feature 'ecb-auto-compatibility-check' which enables a check for
+incompatible or renamed ECB-options at ECB startup. These options are then
+autom. upgraded to the new type or reset to the default-values of current
+ECB-version if no upgrade is possible. All upgraded or reset options are
+displayed to the user with their old and new values!
+
+ECB now requires Semantic version 1.4 and eieio version 0.17! Any previous
+beta version is not supported anymore!
+
+
+Upgrading from any version < 1.60:
+----------------------------------
+
+- The options `ecb-show-node-name-in-minibuffer',
+ `ecb-show-complete-file-name-in-minibuffer' and
+ `ecb-show-file-info-in-minibuffer' are gone and have been replaced by one
+ single new option `ecb-show-node-info-in-minibuffer' where you can define
+ separately for every tree-buffer when and which node info should be
+ displayed in the minibuffer
+
+
+Upgrading from versions < 1.52:
+-------------------------------
+
++ ECB now requires eieio >= 0.16 (see also README)
+
++ The option ecb-prefix-key has been removed. Now all customization of
+ key-bindings is done via the new option ecb-key-map.
+
++ ecb-layout-window-sizes is now an association list. If you have customized
+ this variable or used the ecb-store-window-sizes function, there will be an
+ error when drawing the ECB layout. Reset ecb-layout-window-sizes to it's
+ default value (nil) and store your window sizes using ecb-store-window-sizes.
+
++ A new customization variable ecb-show-tokens controls the behavior of the
+ methods buffer. Read the documentation for more information.
+
+
+Upgrading from versions < 1.20:
+-------------------------------
+
++ Now mouse-1 and mouse-2 for opening source-files and jumping to
+ methods/variables is not longer the default key-binding. Please take a look
+ at the new options 'ecb-primary-secondary-mouse-buttons' and
+ 'ecb-primary-mouse-jump-destination'.
+
++ Now it is no longer necessary to bind in the ECB-hooks (ecb-activate-hook
+ and ecb-deactivate-hook) some standard-Emacs-keys for window-handling to the
+ ECB replacements for the related standard-functions to get proper
+ window-handling within the edit-window(s) of ECB.
+
+ Example: With ECB < 1.20 it was necessary to bind [C-x o] to
+ 'ecb-other-window' in 'ecb-activate-hook' (and also "unbinding" it back to
+ the standard other-window in the 'ecb-deactivate-hook') to get a more
+ ECB-suitable other-window behavior. Same for other window-keys.
+
+ This way will work also in ECB 1.20 but it is NOT the recommended way
+ because the new option 'ecb-advice-window-functions' makes this much easier
+ and better. Please read the documentation of this option exactly!
+
++ Default-value of `ecb-other-window-jump-behavior' is now 'all.
+
++ Interactively calling 'ecb-update-methods-buffer' is not longer necessary as
+ work-around for the bug, that sometimes the error "Wrong type argument,
+ integer-or-marker-p nil" is displayed after clicking onto a method/variable
+ in the ECB-method-buffer. This bug is fixed!
+
++ For a complete list of changes and new features for versions > 1.20 see the
+ NEWS file.
+
624 ecb/ecb-analyse.el
@@ -0,0 +1,624 @@
+;;; ecb-analyse.el --- ECB analysis display interactor
+
+;;; Copyright (C) 2004 - 2005 Klaus Berndl
+
+;; Author: Klaus Berndl <klaus.berndl@sdm.de>
+;; Maintainer: Klaus Berndl <klaus.berndl@sdm.de>
+;; Keywords: browser, code, programming, analyse
+;; Created: 2004
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+;; details.
+
+;; You should have received a copy of the GNU General Public License along with
+;; GNU Emacs; see the file COPYING. If not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;; $Id: ecb-analyse.el,v 1.13 2005/06/27 17:03:06 berndl Exp $
+
+
+;;; Commentary:
+;;
+;; Displays the analysing informations of semantic-analyze in a special
+;; tree-buffer.
+;;
+
+;;; Code:
+
+(require 'semantic-analyze)
+(require 'ecb-layout)
+(require 'ecb-common-browser)
+(require 'ecb-method-browser)
+
+(eval-when-compile
+ (require 'silentcomp))
+
+(eval-when-compile
+ ;; to avoid compiler grips
+ (require 'cl))
+
+
+(defgroup ecb-analyse nil
+ "Settings for the analyse-buffer in the Emacs code browser."
+ :group 'ecb
+ :prefix "ecb-")
+
+
+(defcustom ecb-analyse-buffer-name " *ECB Analyse*"
+ "*Name of the ECB analyse buffer.
+Because it is not a normal buffer for editing you should enclose the name with
+stars, e.g. \"*ECB Analyse*\".
+
+If it is necessary for you you can get emacs-lisp access to the buffer-object of
+the ECB-analyse-buffer by this name, e.g. by a call of `set-buffer'.
+
+Changes for this option at runtime will take affect only after deactivating and
+then activating ECB again!"
+ :group 'ecb-analyse
+ :type 'string)
+
+(defcustom ecb-analyse-buffer-after-create-hook nil
+ "*Local hook running after the creation of the analyse-buffer.
+Every function of this hook is called once without arguments direct after
+creating the analyse-buffer of ECB and it's local key-map. So for example a
+function could be added which performs calls of `local-set-key' to define new
+key-bindings only for the analyse-buffer of ECB."
+ :group 'ecb-analyse
+ :type 'hook)
+
+(defcustom ecb-analyse-show-node-info '(if-too-long . name)
+ "*When to display which node-info in the history-buffer.
+Define which node info should displayed after moving the mouse over a node
+\(or after a shift click onto the node) in the history-buffer.
+
+You can define \"when\" a node-info should be displayed:
+See `ecb-directories-show-node-info' for the possible choices.
+
+You can define what info should be displayed:
+- name: The full name of the node
+- full-info: All infos available to a node.
+
+Do NOT set this option directly via setq but use always customize!"
+ :group 'ecb-analyse
+ :type '(cons (choice :tag "When"
+ (const :tag "Always" :value always)
+ (const :tag "If too long" :value if-too-long)
+ (const :tag "After shift click" :value shift-click)
+ (const :tag "Never" :value never))
+ (choice :tag "What"
+ (const :tag "Node-name" :value name)
+ (const :tag "Full info" :value full-info))))
+
+
+(defcustom ecb-analyse-collapsed-buckets nil
+ "*Buckets collapsed when displaying the current semantic analysis.
+The semantic analyse-modul offers several categories of analysis which are
+called buckets here. These are for example:
+
+Context: The current context, which is the current function/method, variable,
+class etc. \(what exactly depends on the programming language) point is in.
+This means not the current function/method/variable/class-name point stand on
+but the current surrounding context. Example: If point stays somewhere within
+a defun-definition in emacs-lisp or within a java-method then this defun rsp.
+method is the context. In object oriented languages this can be the full
+hierachy, i.e. not only the current method, but the current method, the class
+of this method, the superclass of this class and so on!
+
+Arguments: The arguments of the context if the context is a function/method.
+
+Local Variables: All accessible and bound local variables visible at current
+point.
+
+Prefix: The currently parsed prefix, which is mostly the current identifier
+point stands on.
+
+Assignee: See the semantic manual
+
+Function: Current function-name point stands on.
+
+Argument #: When point is located within a function-call then this is the
+number of the argument point stands on.
+
+Completions: All possible completions for current prefix \(see above). This is
+probably the most helpful bucket.
+
+If one of these categories/buckets are not needed per default then add the
+bucket-name \(s.a.) to this option and ECB will per default collapse this
+bucket. So most needed buckets are better visible in the analyse-buffer."
+ :group 'ecb-analyse
+ :type '(repeat (choice :tag "Bucket" :menu-tag "Bucket"
+ (const :tag "Context" :value "Context")
+ (const :tag "Arguments" :value "Arguments")
+ (const :tag "Local Variables" :value "Local Variables")
+ (const :tag "Prefix" :value "Prefix")
+ (const :tag "Assignee" :value "Assignee")
+ (const :tag "Function" :value "Function")
+ (const :tag "Argument #" :value "Argument #")
+ (const :tag "Completions" :value "Completions")
+ (string :tag "Other bucketname"))))
+
+(defcustom ecb-analyse-fontified-buckets '("Context")
+ "*Buckets whose elements should be fontified as in the methods-buffer.
+If the name of a category/bucket is contained in this option then all elements
+of this bucket will be displayed as in the methods-buffer - at least if an
+element is a semantic-tag. This means if `ecb-font-lock-tags' is not nil these
+elements will be fontified and also displayed with an appropriate icon if
+possible. The default value does this only for the Context-bucket because for
+most of the other buckets this makes not really much sense.
+
+For available buckets see `ecb-analyse-collapsed-buckets'.
+
+For the faces used to display a bucket-node itself or bucket-elements not
+fontified see the options `ecb-analyse-bucket-node-face' rsp.
+`ecb-analyse-bucket-element-face'."
+ :group 'ecb-analyse
+ :type '(repeat (choice :tag "Bucket" :menu-tag "Bucket"
+ (const :tag "Context" :value "Context")
+ (const :tag "Arguments" :value "Arguments")
+ (const :tag "Local Variables" :value "Local Variables")
+ (const :tag "Prefix" :value "Prefix")
+ (const :tag "Assignee" :value "Assignee")
+ (const :tag "Function" :value "Function")
+ (const :tag "Argument #" :value "Argument #")
+ (const :tag "Completions" :value "Completions")
+ (string :tag "Other bucketname"))))
+
+(defcustom ecb-analyse-gen-tag-info-fn nil
+ "*Which info should be displayed for a tag of the analyse-buffer.
+If nil then the default information about a tag will be displayed. If a
+function then this function gets as argument the tag for which tag-information
+should be displayed. This function has to return a string which will be then
+display as tag-info. This string has to be fully formatted \(e.g. must already
+include line-breaks if the tag-info should be displayed in several lines).
+
+See `ecb-analyse-show-tag-info-fn' how the tag-info is displayed."
+ :group 'ecb-analyse
+ :type '(radio (const :tag "Default info" :value nil)
+ (function :tag "")))
+
+(defcustom ecb-analyse-show-tag-info-fn 'message
+ "*How to display the tag-info for a tag of the analyse-buffer.
+The value of this option is a function which will be called with the
+info-string generated for the current tag of the analyse-buffer. This function
+must do all things necessary for displaying this info. When this function is
+called the window stored in `ecb-last-edit-window-with-point' is the selected
+window!
+
+ECB offers two builtin ways: Display the info in the echo-area \(via the
+function `message') or in a temp-buffer in the edit-area \(via the function
+`ecb-analyse-show-tag-info-in-temp-buffer'). Default is echo-area-display.
+
+See also `ecb-analyse-gen-tag-info-fn'."
+ :group 'ecb-analyse
+ :type '(radio (const :tag "Display in the echo-area" :value message)
+ (const :tag "Display in a temp-buffer"
+ :value ecb-analyse-show-tag-info-in-temp-buffer)
+ (function :tag "Info display-function")))
+
+;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: first we start simple by creating
+;; an analyse-tree-buffer which can be included in a layout and all should
+;; work. Later we could design a basic-mechanism which:
+;; - creates a "mode"-tree-buffer for stuff like analyse, class browser etc.
+;; - a mechansims which copy the anaylse-tree-buffer (or in future the
+;; class-browser-tree-buffer etc.) to that "mode"-tree-buffer so you can
+;; display in that basic tree-buffer different "modes". Probably this would
+;; be the best: We have 4 basic tree-buffers (directories, sources, methods
+;; and history and one additional "mode"-tree-buffer which can be added to a
+;; layout. Then there is a command which display different tree-buffers uin
+;; the mode-tree-buffer, e.g. the analyse tree-buffer or a
+;; class-browser-tree-buffer.
+
+(defconst ecb-analyse-nodedata-tag-with-pos 0)
+(defconst ecb-analyse-nodedata-tag-without-pos 1)
+(defconst ecb-analyse-nodedata-no-tag 2)
+
+(defconst ecb-analyse-nodetype-bucket 0)
+(defconst ecb-analyse-nodetype-context 1)
+(defconst ecb-analyse-nodetype-arguments 2)
+(defconst ecb-analyse-nodetype-completions 3)
+(defconst ecb-analyse-nodetype-localvars 4)
+(defconst ecb-analyse-nodetype-prefix 5)
+(defconst ecb-analyse-nodetype-assignee 6)
+(defconst ecb-analyse-nodetype-function 7)
+(defconst ecb-analyse-nodetype-function-arg 8)
+
+(defun ecb-analyse-buffer-sync ()
+ "Synchronize the analyse buffer with the current buffer and point.
+This means in fact display the current analysis for current point."
+ (interactive)
+ (ecb-do-if-buffer-visible-in-ecb-frame 'ecb-analyse-buffer-name
+ ;; (current-buffer) is here the current buffer of the edit-area!
+ (let ((analysis nil)
+ (completions nil)
+ (fnargs nil)
+ (cnt nil)
+ )
+ ;; Try and get some sort of analysis
+ (ignore-errors
+ (save-excursion
+ (setq analysis (ecb--semantic-analyze-current-context (point)))
+ (setq cnt (ecb--semantic-find-tag-by-overlay))
+ (when analysis
+ (setq completions (ecb--semantic-analyze-possible-completions analysis))
+ (setq fnargs (ecb--semantic-get-local-arguments (point)))
+ )))
+ (ecb-exec-in-window ecb-analyse-buffer-name
+ ;; we must remove the old nodes
+ (tree-buffer-set-root (tree-node-new-root))
+ (when analysis
+ ;; Now insert information about the context
+ (when cnt
+ (ecb-analyse-add-nodes "Context" "Context"
+ cnt ecb-analyse-nodetype-context))
+ (when fnargs
+ (ecb-analyse-add-nodes "Arguments" "Arguments" fnargs
+ ecb-analyse-nodetype-arguments))
+ ;; Let different classes draw more nodes.
+ (ecb-analyse-more-nodes analysis)
+ (when completions
+ (ecb-analyse-add-nodes "Completions" "Completions" completions
+ ecb-analyse-nodetype-completions)))
+ (tree-buffer-update)))))
+
+(defmethod ecb-analyse-more-nodes ((context semantic-analyze-context))
+ "Show a set of ecb-nodes specific to CONTEXT."
+ (let ((localvars (oref context localvariables)))
+ (when localvars
+ (ecb-analyse-add-nodes "Local Variables" "Local Variables" localvars
+ ecb-analyse-nodetype-localvars)))
+ (let ((prefix (oref context prefix)))
+ (when prefix
+ (ecb-analyse-add-nodes "Prefix" "Prefix" prefix ecb-analyse-nodetype-prefix))))
+
+(defmethod ecb-analyse-more-nodes ((context semantic-analyze-context-assignment))
+ "Show a set of ecb-nodes specific to CONTEXT."
+ (call-next-method)
+ (let ((assignee (oref context assignee)))
+ (when assignee
+ (ecb-analyse-add-nodes "Assignee" "Assignee" assignee
+ ecb-analyse-nodetype-assignee))))
+
+(defmethod ecb-analyse-more-nodes ((context semantic-analyze-context-functionarg))
+ "Show a set of ecb-nodes specific to CONTEXT."
+ (call-next-method)
+ (let ((func (oref context function)))
+ (when func
+ (ecb-analyse-add-nodes "Function" "Function" func ecb-analyse-nodetype-function)
+ ;; An index for the argument the prefix is in:
+ (let ((arg (oref context argument)))
+ (when arg
+ (ecb-analyse-add-nodes "Argument #"
+ (format "Argument # %d" (oref context index))
+ arg
+ ecb-analyse-nodetype-function-arg))))))
+
+;; Each category of nodes gets its own nodetype, so we can offer different
+;; popup-menus for different categories (e.g. completions have other senseful
+;; popup-menu-entries than the rest. The date of a node will always be a cons
+;; where the car is the analyse-elem and the cdr is a const if it is a
+;; semantic-tag (positionless or with position) or not.
+
+(defun ecb-analyse-add-nodes (bucket bucket-name list nodetype)
+ "Create ecb-nodes from LIST. BUCKET is one of the categories/buckets
+mentioned in `ecb-analyse-collapsed-buckets'. BUCKET-NAME is the name a bucket
+should be displayed with. LIST is a list of tags for this bucket. NODETYPE is
+an integer which will be added as type to the nodes created for the elements
+of LIST."
+ (when list
+ (save-excursion
+ (set-buffer ecb-analyse-buffer-name)
+ (let* ((bucket-name-formatted (ecb-merge-face-into-text bucket-name
+ ecb-analyse-bucket-node-face))
+ (bucket-node (tree-node-new bucket-name-formatted
+ ecb-analyse-nodetype-bucket
+ (list 'ecb-bucket-node
+ ecb-analyse-nodetype-bucket)
+ nil
+ (tree-buffer-get-root))))
+ (setf (tree-node->expanded bucket-node)
+ (not (member bucket
+ ecb-analyse-collapsed-buckets)))
+ (dolist (elem list)
+ (let* ((fontify-tags (member bucket ecb-analyse-fontified-buckets))
+ (string-1 (typecase elem
+ (string elem)
+ (ecb--semantic-tag
+ (if fontify-tags
+ (ecb-displayed-tag-name elem)
+ (ecb--semantic-format-tag-uml-concise-prototype elem)))
+ (otherwise "foo")))
+ (string (concat string-1)))
+ (unless fontify-tags
+ (ecb-merge-face-into-text string ecb-analyse-bucket-element-face))
+ (if (ecb--semantic-tag-p elem)
+ (tree-node-new string nodetype
+ (list elem
+ (if (ecb--semantic-tag-with-position-p elem)
+ ecb-analyse-nodedata-tag-with-pos
+ ecb-analyse-nodedata-tag-without-pos)
+ nodetype)
+ t bucket-node nil)
+ (tree-node-new string nodetype
+ (list elem ecb-analyse-nodedata-no-tag nodetype)
+ t bucket-node nil))))))))
+
+(defun ecb-analyse-compare-node-data (left right)
+ "Return not nil when LEFT and RIGHT are identical node-datas."
+ (and (equal (nth 2 left) (nth 2 right))
+ (ecb-compare-methods-buffer-node-data (car left) (car right))))
+
+(tree-buffer-defpopup-command ecb-analyse-jump-to-tag
+ "Jump to the definition of current tag of the analyse-buffer.
+If first arg of the REST-ARG-LIST is not nil then it must be a window and then
+ECB jumps to that window. If nil then `ecb-last-edit-window-with-point' is
+used as window."
+ (let ((window (nth 0 rest-arg-list)))
+ (when node
+ (let* ((data (tree-node->data node))
+ (tag (nth 0 data)))
+ ;; if we have a positioned tag we jump to it
+ (when (and tag (= (nth 1 data) ecb-analyse-nodedata-tag-with-pos))
+ ;; We must highlight the tag
+ (tree-buffer-highlight-node-data data)
+ (ecb-jump-to-tag (or (and (ecb--semantic-tag-buffer tag)
+ (buffer-file-name (ecb--semantic-tag-buffer tag)))
+ ;; then we have a tag with no buffer but only
+ ;; buffer-start- and buffer-end-pos
+ ecb-path-selected-source)
+ tag
+ (or window ecb-last-edit-window-with-point)
+ t nil))))))
+
+(tree-buffer-defpopup-command ecb-analyse-complete
+ "Complete at current point of the edit-window the selected completion-tag."
+ ;; We must highlight the tag
+ (let* ((data (tree-node->data node))
+ (tag (nth 0 data))
+ (type (tree-node->type node)))
+ (when (= type ecb-analyse-nodetype-completions)
+ (tree-buffer-highlight-node-data data)
+ (ecb-find-file-and-display ecb-path-selected-source nil)
+ (let* ((a (ecb--semantic-analyze-current-context (point)))
+ (bounds (oref a bounds))
+ (movepoint nil))
+ (save-excursion
+ (if (and (<= (point) (cdr bounds)) (>= (point) (car bounds)))
+ (setq movepoint t))
+ (goto-char (car bounds))
+ (delete-region (car bounds) (cdr bounds))
+ (insert (ecb--semantic-tag-name tag))
+ (if movepoint (setq movepoint (point))))
+ (if movepoint
+ (goto-char movepoint))))))
+
+(defun ecb-analyse-node-clicked (node ecb-button edit-window-nr
+ shift-mode meta-mode)
+ "Handle clicking onto NODE in the analyse-buffer. ECB-BUTTON can be 1, 2 or
+3. If 3 then EDIT-WINDOW-NR contains the number of the edit-window the NODE
+should be displayed or whatever should be done with NODE. For 1 and 2 the
+value of EDIT-WINDOW-NR is ignored."
+ (if shift-mode
+ (ecb-mouse-over-analyse-node node nil nil 'force))
+ (let* ((data (tree-node->data node))
+ (tag (nth 0 data))
+ (type (tree-node->type node)))
+ (cond
+ ((= type ecb-analyse-nodetype-bucket)
+ (tree-node-toggle-expanded node)
+ (tree-buffer-update node))
+ ((= type ecb-analyse-nodetype-completions)
+ (ecb-analyse-complete node))
+ (t
+ (ecb-analyse-jump-to-tag node (ecb-get-edit-window
+ ;; `ecb-analyse-jump-to-tag' expects all
+ ;; args beyond NODE as one list.
+ `(,(ecb-combine-ecb-button/edit-win-nr
+ ecb-button edit-window-nr))))
+ (when (and tag (= (nth 1 data) ecb-analyse-nodedata-tag-with-pos))
+ (when meta-mode
+ (ecb-run-with-idle-timer 0.001 nil 'ecb-hide-ecb-windows)))))))
+
+(defecb-window-dedicator ecb-set-analyse-buffer ecb-analyse-buffer-name
+ "Display the analyse buffer in current window and make window dedicated."
+ (add-hook 'ecb-current-buffer-sync-hook-internal 'ecb-analyse-buffer-sync)
+ (switch-to-buffer ecb-analyse-buffer-name))
+
+(defun ecb-maximize-window-analyse ()
+ "Maximize the ECB-analyse-window.
+I.e. delete all other ECB-windows, so only one ECB-window and the
+edit-window\(s) are visible \(and maybe a compile-window). Works also if the
+ECB-analyse-window is not visible in current layout."
+ (interactive)
+ (ecb-maximize-ecb-buffer ecb-analyse-buffer-name t))
+
+(defun ecb-goto-window-analyse ()
+ "Make the ECB-analyse window the current window."
+ (interactive)
+ (ecb-goto-ecb-window ecb-analyse-buffer-name))
+
+(defun ecb-analyse-show-tag-info-in-temp-buffer (info-string)
+ "Display INFO-STRING in a temp-buffer in the edit-area."
+ (with-output-to-temp-buffer "*Tag Information*"
+ (save-excursion
+ (set-buffer "*Tag Information*")
+ (insert info-string)))
+ ;; Make it small
+ (shrink-window-if-larger-than-buffer
+ (get-buffer-window "*Tag Information*")))
+
+;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: we could use the function
+;; `semantic-documentation-for-tag' here to display more infos?!
+
+(defun ecb-analyse-gen-tag-info (tag)
+ "Return the info-string for TAG."
+ (or (and (functionp ecb-analyse-gen-tag-info-fn)
+ (or (funcall ecb-analyse-gen-tag-info-fn tag)
+ (format "No info generated by `%s'." ecb-analyse-gen-tag-info-fn)))
+ (concat (ecb-displayed-tag-name tag)
+ "\n"
+ (let ((typetag
+ (condition-case nil
+ (save-excursion
+ (ecb--semantic-analyze-tag-type tag))
+ (error nil))))
+ (if typetag
+ (ecb-displayed-tag-name typetag)
+ ;; No type found by the analyzer The below used
+ ;; to try and select the buffer from the last
+ ;; analysis, but since we are already in the
+ ;; correct buffer, I don't think that is needed.
+ (when (fboundp 'semantic-lex-keyword-p)
+ (let ((type (ecb--semantic-tag-type tag)))
+ (typecase type
+ (ecb--semantic-tag
+ (setq type (ecb--semantic-tag-name type)))
+ (list
+ (setq type (car type))))
+ (if (semantic-lex-keyword-p type)
+ (setq typetag
+ (semantic-lex-keyword-get type 'summary))))
+ (if typetag
+ typetag))
+ )))))
+
+
+(tree-buffer-defpopup-command ecb-analyse-show-tag-info
+ "Display as much information as possible about current tag.
+Show the information in a shrunk split-buffer and expand out as many details
+as possible."
+ (let* ((data (tree-node->data node))
+ (tag (car data)))
+ (when (ecb--semantic-tag-p tag)
+ (save-selected-window
+ (select-window ecb-last-edit-window-with-point)
+ (funcall ecb-analyse-show-tag-info-fn (ecb-analyse-gen-tag-info tag))))))
+
+(defun ecb-mouse-over-analyse-node (node &optional window no-message click-force)
+ "Displays help text if mouse moves over a node in the analyse buffer or if
+CLICK-FORCE is not nil and always with regards to the settings in
+`ecb-analyse-show-node-info'. NODE is the node for which help text should be
+displayed, WINDOW is the related window, NO-MESSAGE defines if the help-text
+should be printed here."
+ (let ((str (when (or click-force
+ (ecb-show-minibuffer-info node window
+ (car
+ ecb-analyse-show-node-info)))
+ (if (equal (cdr ecb-analyse-show-node-info) 'full-info)
+ (ecb-analyse-gen-tag-info (car (tree-node->data node)))
+ (tree-node->name node)))))
+ (prog1 str
+ (unless no-message
+ (ecb-nolog-message str)))))
+
+(defun ecb-analyse-node-mouse-highlighted-p (node)
+ "Return not nil when NODE has a positioned tag as data or belongs to the
+completions. This means that this node should be highlighted when mouse is
+moved over it."
+ (or (equal ecb-analyse-nodedata-tag-with-pos
+ (nth 1 (tree-node->data node)))
+ (= (tree-node->type node) ecb-analyse-nodetype-completions)))
+
+(defun ecb-analyse-create-menu (node)
+ "Return a popup-menu suitable for NODE."
+ (let* ((data (tree-node->data node))
+ (tag-p (not (equal (nth 1 data) ecb-analyse-nodedata-no-tag)))
+ (tag-with-pos-p (equal (nth 1 data) ecb-analyse-nodedata-tag-with-pos))
+ (nodetype (nth 2 data)))
+ (delq nil (list (if (equal nodetype ecb-analyse-nodetype-completions)
+ '(ecb-analyse-complete "Complete"))
+ (if tag-p
+ '(ecb-analyse-show-tag-info "Show tag info"))
+ (if tag-with-pos-p
+ '(ecb-analyse-jump-to-tag "Jump to tag"))))))
+
+(defun ecb-analyse-menu-creator (tree-buffer-name node)
+ "Creates the popup-menus for the analyse-buffer."
+ (setq ecb-layout-prevent-handle-ecb-window-selection t)
+ (let ((nodetype (tree-node->type node)))
+ (unless (equal nodetype ecb-analyse-nodetype-bucket)
+ (mapcar (function (lambda (type)
+ (cons type (ecb-analyse-create-menu node))))
+ `(,ecb-analyse-nodetype-context
+ ,ecb-analyse-nodetype-arguments
+ ,ecb-analyse-nodetype-completions
+ ,ecb-analyse-nodetype-localvars
+ ,ecb-analyse-nodetype-prefix
+ ,ecb-analyse-nodetype-assignee
+ ,ecb-analyse-nodetype-function
+ ,ecb-analyse-nodetype-function-arg)))))
+
+