Subversion Branch en Mode-Line

Si un file se encuentra en un directory respaldado por un repository de Subversion que termina con trunk o branches/X ¿cómo hago que el trunk o X aparezca en la línea de modo como SVN-trunk o SVN-X similar a lo que se muestra en Git? -los files respaldados típicamente como Git-master .

Determinar el estado de SVN

No conozco ninguna forma integrada de hacerlo, pero puede escribir su propio código para este fin.

Basado en vc-svn-repository-name y vc-backend , puede escribir una function que devuelve un text de modo personalizado para SVN, y vuelve al valor pnetworkingeterminado para todos los demás sistemas de VC:

 (defun lunaryorn-vc-mode-line () (let ((backend (vc-backend (buffer-file-name)))) (if (eq backend 'SVN) (let ((url (vc-svn-repository-hostname (buffer-file-name)))) (cond ((string-match-p "/trunk/" url) "SVN-trunk") ((string-match "/branches/\\([^/]+\\)/" url) (concat "SVN-" (match-string 1 url))) (t vc-mode))) ;; Use default mode text for other backends vc-mode))) 

Si el file actual está bajo SVN, verificamos su URL de repository según su convención y comstackmos un text de modo correspondiente. No se confunda con el nombre de vc-svn-repository-hostname , la function realmente devuelve la URL de repos completa del file dado.

Para todos los otros backends, o si el URL no coincide con ningún patrón, volvemos al text de estado de VC pnetworkingeterminado como en vc-mode .

Agregar a la línea de modo

A continuación, puede usar esta function en la línea de modo, agregando una construcción de línea de modo correspondiente a mode-line-format :

 (setq-default mode-line-format '(… (vc-mode (" " (:eval (lunaryorn-vc-mode-line)))) …)) 

Como mode-line-format es buffer-local, usamos setq-default para cambiar su valor global. Nuestra nueva construcción de línea de modo verifica si vc-mode está activo, es decir, si el file está bajo control de versión, y evalúa nuestra function en este caso, para get nuestro text de estado personalizado. Consulte Datos de línea de modo para get más información sobre las construcciones de línea de modo.

Las elipsis representan el otro contenido de la línea de modo, que también puede personalizar a su gusto. Sin embargo, sugeriría que simplemente copie el valor pnetworkingeterminado de mode-line-format , y reemplace (vc-mode vc-mode) con nuestro nuevo constructo. Eso simplemente replaceá la información anterior de VC con nuestro text de estado personalizado, y deja todo lo demás como antes.

Podrías definir una function:

 (defun vc-svn-mode-line-string (file) (format "SVN-%s" (vc-svn-current-branch-name file))) 

Por supuesto, también tendría que definir vc-svn-current-branch-name porque ese aún no existe. Supongo que tendría que hacer algo como

 (defun vc-svn-current-branch-name (file) (with-temp-buffer (setq default-directory (file-name-directory file)) (vc-svn-command tt file "info") ...extract the branch name from the info in current buffer.. ))