Created
September 25, 2012 15:38
-
-
Save benozol/3782636 to your computer and use it in GitHub Desktop.
Eliom development: Switch between server and client files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(setq | |
server-regexp "\\`.*/eliom/src/\\(server\\)/" | |
client-regexp "\\`.*/eliom/src/\\(client\\)/") | |
(defun switch-client-server-file-name (file-name) | |
(let* ((client-name (replace-regexp-in-string server-regexp "client" file-name nil nil 1)) | |
(server-name (replace-regexp-in-string client-regexp "server" file-name nil nil 1))) | |
(cond | |
((not (equal client-name file-name)) (list client-name 'server)) | |
((not (equal server-name file-name)) (list server-name 'client))))) | |
(defun rename-client-server-buffer () | |
(let ((switched (switch-client-server-file-name (buffer-file-name)))) | |
(when switched | |
(let* ((switched-file-name (car switched)) | |
(target (cadr switched)) | |
(nondir-name (file-name-nondirectory switched-file-name))) | |
(rename-buffer (format "%s (%s)" nondir-name target)))))) | |
(defun switch-client-server () | |
(interactive) | |
(let ((switched (switch-client-server-file-name (buffer-file-name)))) | |
(when switched | |
(let* ((switched-file-name (car switched)) | |
(target (cadr switched))) | |
(message (format "Switch to buffer %S" switched-file-name)) | |
(find-file switched-file-name))))) | |
(add-hook | |
'tuareg-mode-hook | |
'(lambda () | |
(add-hook 'find-file-hook 'rename-client-server-buffer) | |
(define-key tuareg-mode-map (kbd "C-c a") 'switch-client-server))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment