PageRenderTime 25ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/packs/dev/clojure-pack/config/paredit-conf.el

https://gitlab.com/mechasparrow/myemacs
Emacs Lisp | 142 lines | 122 code | 19 blank | 1 comment | 3 complexity | bf9144c090d9f8ca5463740db225e797 MD5 | raw file
  1. (eval-after-load 'paredit
  2. ;; need a binding that works in the terminal
  3. '(define-key paredit-mode-map (kbd "M-)") 'paredit-forward-slurp-sexp))
  4. (require 'paredit)
  5. (require 'thingatpt)
  6. (defun live-paredit-next-top-level-form ()
  7. (interactive)
  8. (while (ignore-errors (paredit-backward-up) t))
  9. (live-paredit-forward))
  10. (defun live-paredit-previous-top-level-form ()
  11. (interactive)
  12. (if (ignore-errors (paredit-backward-up) t)
  13. (while (ignore-errors (paredit-backward-up) t))
  14. (paredit-backward)))
  15. (defun live-paredit-forward ()
  16. "Feels more natural to move to the beginning of the next item
  17. in the sexp, not the end of the current one."
  18. (interactive)
  19. (if (and (not (paredit-in-string-p))
  20. (save-excursion
  21. (ignore-errors
  22. (forward-sexp)
  23. (forward-sexp)
  24. t)))
  25. (progn
  26. (forward-sexp)
  27. (forward-sexp)
  28. (backward-sexp))
  29. (paredit-forward)))
  30. (defun live-paredit-forward-slurp-sexp-neatly ()
  31. (interactive)
  32. (save-excursion
  33. (cond ((or (paredit-in-comment-p)
  34. (paredit-in-char-p))
  35. (error "Invalid context for slurping S-expressions."))
  36. ((paredit-in-string-p)
  37. (paredit-forward-slurp-into-string))
  38. (t
  39. (save-excursion
  40. (paredit-forward-up)
  41. (paredit-backward-down)
  42. (paredit-forward-slurp-sexp)
  43. (just-one-space)))))
  44. (when (not (save-excursion
  45. (ignore-errors
  46. (backward-sexp)
  47. t)))
  48. (delete-horizontal-space)))
  49. (defun live-paredit-forward-kill-sexp (&optional arg)
  50. (interactive "p")
  51. (cond ((or (paredit-in-comment-p)
  52. (paredit-in-string-p)) (kill-word (or arg 1)))
  53. (t (kill-sexp (or arg 1)))))
  54. (defun live-paredit-backward-kill-sexp (&optional arg)
  55. (interactive "p")
  56. (cond ((or (paredit-in-comment-p)
  57. (paredit-in-string-p)) (backward-kill-word (or arg 1)))
  58. (t (backward-kill-sexp (or arg 1)))))
  59. (defun live-paredit-backward-kill ()
  60. (interactive)
  61. (let ((m (point-marker)))
  62. (paredit-backward-up)
  63. (forward-char)
  64. (delete-region (point) m)))
  65. (defun live-paredit-delete-horizontal-space ()
  66. (interactive)
  67. (just-one-space -1)
  68. (paredit-backward-delete))
  69. (defun live-paredit-tidy-trailing-parens ()
  70. (interactive)
  71. (save-excursion
  72. (while (ignore-errors (paredit-forward-up) t))
  73. (backward-char)
  74. (live-paredit-delete-horizontal-space)
  75. (while
  76. (or
  77. (eq (char-before) ?\))
  78. (eq (char-before) ?\})
  79. (eq (char-before) ?\]))
  80. (backward-char)
  81. (live-paredit-delete-horizontal-space))))
  82. (defun live-paredit-reindent-defun (&optional argument)
  83. "Reindent the definition that the point is on. If the point is
  84. in a string or a comment, fill the paragraph instead, and with
  85. a prefix argument, justify as well. Doesn't mess about with
  86. Clojure fn arglists when filling-paragraph in docstrings.
  87. Also tidies up trailing parens when in a lisp form"
  88. (interactive "P")
  89. (cond ((paredit-in-comment-p) (fill-paragraph argument))
  90. ((paredit-in-string-p) (progn
  91. (save-excursion
  92. (paredit-forward-up)
  93. (insert "\n"))
  94. (fill-paragraph argument)
  95. (save-excursion
  96. (paredit-forward-up)
  97. (delete-char 1))))
  98. (t (when (not (live-paredit-top-level-p))
  99. (progn (save-excursion
  100. (end-of-defun)
  101. (beginning-of-defun)
  102. (indent-sexp))
  103. (live-paredit-tidy-trailing-parens))))))
  104. (defun live-paredit-forward-down ()
  105. "Doesn't freeze Emacs if attempted to be called at end of
  106. buffer. Otherwise similar to paredit-forward-down."
  107. (interactive)
  108. (if (save-excursion
  109. (forward-comment (buffer-size))
  110. (not (live-end-of-buffer-p)))
  111. (paredit-forward-down)
  112. (error "unexpected end of buffer")))
  113. (defun live-paredit-top-level-p ()
  114. "Returns true if point is not within a given form i.e. it's in
  115. toplevel 'whitespace'"
  116. (not
  117. (save-excursion
  118. (ignore-errors
  119. (paredit-forward-up)
  120. t))))
  121. (defun live-paredit-copy-sexp-at-point ()
  122. (interactive)
  123. (kill-new (thing-at-point 'sexp)))