             (or (eq (svn-status-line-info->propmark line-info) ?_)
                 (eq (svn-status-line-info->propmark line-info) ? )
                 (eq (svn-status-line-info->propmark line-info) nil)))))
+
+(defun svn-status-line-info->hide-because-user-elide (line-info)
+  (eq (svn-status-line-info->user-elide line-info) t))
+
+(defun svn-status-line-info->show-user-elide-continuation (line-info)
+  (eq (svn-status-line-info->user-elide line-info) 'directory))
+
+(defun svn-status-toggle-elide ()
+  (interactive)
+  (let ((st-info svn-status-info)
+        (fname)
+        (test (svn-status-line-info->filename (svn-status-get-line-information)))
+        (len-test)
+        (len-fname)
+        (new-elide-mark t)
+        (elide-mark))
+    (when (string= test ".")
+      (setq test ""))
+    (setq len-test (length test))
+    (while st-info
+      (setq fname (svn-status-line-info->filename (car st-info)))
+      (setq len-fname (length fname))
+      (when (and (>= len-fname len-test)
+                 (string= (substring fname 0 len-test) test))
+        ;;(message "elide: %s %s" fname (svn-status-line-info->user-elide (car st-info)))
+        (setq elide-mark new-elide-mark)
+        (when (or (string= fname ".")
+                  (and (= len-fname len-test) (svn-status-line-info->directory-p (car st-info))))
+          (message "Elide directory %s and all its files." fname)
+          (setq new-elide-mark (not (svn-status-line-info->user-elide (car st-info))))
+          (setq elide-mark (if new-elide-mark 'directory nil)))
+        (setcar (nthcdr 8 (car st-info)) elide-mark))
+      (setq st-info (cdr st-info))))
+  (svn-status-update-buffer))
+
 
 (defun svn-status-line-info->directory-p (line-info)
   "Return t if LINE-INFO refers to a directory, nil otherwise.

;; _     - svn-status-toggle-hide-unmodified
;; m     - svn-status-set-user-mark
;; u     - svn-status-unset-user-mark
;; DEL   - svn-status-unset-user-mark-backwards
;; * !   - svn-status-unset-all-usermarks
;; .     - svn-status-goto-root-or-return
;; f     - svn-status-find-file
;; o     - svn-status-find-file-other-window
;; P l   - svn-status-property-list

  (define-key svn-status-mode-map [?u] 'svn-status-unset-user-mark)
  (define-key svn-status-mode-map "\M-DEL" 'svn-status-unset-all-user-mark)
  (define-key svn-status-mode-map [(backspace)] 'svn-status-unset-user-mark-backwards)
  (define-key svn-status-mode-map [?$] 'svn-status-toggle-elide)
  (define-key svn-status-mode-map [?.] 'svn-status-goto-root-or-return)
  (define-key svn-status-mode-map [?I] 'svn-status-parse-info)
  (define-key svn-status-mode-map [??] 'svn-status-toggle-hide-unknown)
