server.elc 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. (defvar server-program "server" "\
  2. *The program to use as the edit server")
  3. (defvar server-process nil "\
  4. the current server process")
  5. (defvar server-clients nil "\
  6. List of current server clients.
  7. Each element is (CLIENTID FILES...) where CLIENTID is a string
  8. that can be given to the server process to identify a client.
  9. When a buffer is marked as \"done\", it is removed from this list.")
  10. (defvar server-buffer-clients nil "\
  11. List of clientids for clients requesting editing of current buffer.")
  12. (make-variable-buffer-local (quote server-buffer-clients))
  13. (setq-default server-buffer-clients nil)
  14. (or (assq (quote server-buffer-clients) minor-mode-alist) (setq minor-mode-alist (cons (quote (server-buffer-clients " Server")) minor-mode-alist)))
  15. (defun server-log (string) (byte-code "ÁÂ!…ŠÂqˆdbˆcˆo†Ã )‡" [string get-buffer "*server*" newline] 3))
  16. (defun server-sentinel (proc msg) (byte-code "Á!Â=ƒÃÄÅ!!‚Á!Æ=…ÃÄÇ!!‡" [proc process-status exit server-log message "Server subprocess exited" signal "Server subprocess killed"] 7))
  17. (defun server-start (leave-dead) "\
  18. Start a server process, killing any existing server first.
  19. Prefix arg means just kill any existing server." (interactive "P") (byte-code "Áˆ…ÆÁ\"ˆÁÇÈ�ˆÁÉÊ�ˆ
  20. …&Ë
  21. @8Ì !)ˆ‚ˆ ƒ/Á‚HÍÎÁ #‰ˆÆÏ\"ˆÐÑ\"ˆÒ!ˆÓÔ!‡" [server-process nil server-clients buffer leave-dead server-program set-process-sentinel (byte-code "Á!‡" [server-process delete-process] 2) ((error (byte-code "À‡" [nil] 1))) (byte-code "ÀÁ!‡" [delete-file "~/.emacs_server"] 2) ((error (byte-code "À‡" [nil] 1))) 1 server-buffer-done start-process "server" server-sentinel set-process-filter server-process-filter process-kill-without-query server-log "Starting server"] 8))
  22. (defun server-process-filter (proc string) (byte-code "Å!ˆÆÇÈ\"=?ƒÁ‚hÉÆ!ÁO‰ˆÆÇÊ\"OCÁÉÆ!ÁO‰ˆÇË\"…PÌÆ!ÉÆ!SO B‰ˆÉÆ!ÁO‰ˆ‚/ˆÍ
  23. \"ˆ
  24. B‰ˆÎÏ
  25. 8!ˆÐÑÒ!!*‡" [string nil client filenames server-clients server-log 0 string-match "Client: " match-end " " "[^ ]+ " match-beginning server-visit-files switch-to-buffer 1 message substitute-command-keys "When done with a buffer, type \\[server-edit]."] 14))
  26. (defun server-visit-files (filenames client) "\
  27. Finds FILES and returns the list CLIENT with the buffers nconc'd." (byte-code "Æ …FŠÇ @!
  28. …È
  29. !?…ÉÊ
  30. !!ƒ)
  31. qˆËÃÃ\"‚.Ì @!q)ˆ @ B‰ˆpB‰)ˆ A‰ˆ‚ˆÍ \")‡" [client-record filenames obuf t server-buffer-clients client nil get-file-buffer buffer-modified-p file-exists-p buffer-file-name revert-buffer find-file-noselect nconc] 9))
  32. (defun server-buffer-done (buffer) "\
  33. Mark BUFFER as \"done\" for its client(s).
  34. Buries the buffer, and returns another server buffer
  35. as a suggestion for what to select next." (byte-code "É !Ê=Ã  …Y @
  36. †Ë>8‰ˆÌ\"ˆAƒ1ÂO…GÍ ÎÏ@\"\"ˆÐÎÏ@\"!ˆÌ \"‰)ˆ A‰ˆ‚
  37. ˆÑ!…kŠqˆÃ‰)ˆÒ!ˆ
  38. +‡" [running server-process next-buffer nil old-clients server-clients client buffer server-buffer-clients process-status run 1 delq send-string format "Close: %s Done
  39. " server-log buffer-name bury-buffer] 10))
  40. (defun server-done nil "\
  41. Offer to save current buffer, mark it as \"done\" for clients,
  42. bury it, and return a suggested buffer to select next." (byte-code "p …5ÃÄ Å\"ƒ Æ!ˆÇed
  43. ÈP#ˆÉ!‚1Ê …+ËÌ
  44. ÍQ!…1Æ!ˆÎ!)‡" [buffer server-buffer-clients buffer-file-name string= buffer-name "draft" save-buffer write-region "~" kill-buffer buffer-modified-p y-or-n-p "Save file" "? " server-buffer-done] 10))
  45. (defun server-edit (&optional arg) "\
  46. Switch to next server editing buffer; say \"Done\" for current buffer.
  47. If a server buffer is current, it is marked \"done\" and optionally saved.
  48. MH <draft> files are always saved and backed up, no questions asked.
  49. When all of a client's buffers are marked as \"done\", the client is notified.
  50. If there is no server process running, one is started and that's all." (interactive) (byte-code "ˆ† ?†à !Ä>ƒÅÂ!‚ÆÇ !‡" [arg server-process nil process-status (signal exit) server-start server-switch-buffer server-done] 5))
  51. (defun server-switch-buffer (next-buffer) "\
  52. Switch to another buffer, preferably one that has a client.
  53. Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." (byte-code "ƒÂ!… Ã!ƒÄ!‚ÅÆ!!‚/ ƒ+ÅÇ @8!‚/ÄÈ !‡" [next-buffer server-clients bufferp buffer-name switch-to-buffer server-switch-buffer server-buffer-done 1 other-buffer] 9))
  54. (global-set-key "#" (quote server-edit))