Skip to content

Instantly share code, notes, and snippets.

@benozol
Created September 25, 2012 15:38
Show Gist options
  • Save benozol/3782636 to your computer and use it in GitHub Desktop.
Save benozol/3782636 to your computer and use it in GitHub Desktop.
Eliom development: Switch between server and client files
(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