By: Tamás K. Papp
Re-posted from: https://tamaspapp.eu/post/emacs-julia-customizations/
I find the following customizations very useful for editing Julia
code in Emacs. Add them to julia-mode-hook
, eg
(defun customize-julia-mode ()
"Customize julia-mode."
(interactive)
;; my customizations go here
)
(add-hook 'julia-mode-hook 'customize-julia-mode)
Highlight FIXME/TODO/…
When I just want to note something in a comment for future reference,
I prefer to have certain words highlighted. You can use something like
this:
(font-lock-add-keywords nil
'(("\\<\\(FIXME\\|TODO\\|QUESTION\\|NOTE\\)"
1 font-lock-warning-face t)))
This is what it looks like:
chklapackerror(info[]) if any(ifail .!= 0) # TODO: better error message / type error("failed to converge eigenvectors:\n$(nonzeros(ifail))") end
Highlight symbols
After
(require 'highlight-symbol)
add a hook for
(local-set-key [(control ?c) ?s] 'highlight-symbol-at-point)
(local-set-key [(control ?c) ?n] 'highlight-symbol-next)
(local-set-key [(control ?c) ?p] 'highlight-symbol-prev)
This highlights symbols with C-c s
:
function issymmetric(A::AbstractMatrix) indsm, indsn = indices(A) if indsm != indsn return false end for i = first(indsn):last(indsn), j = (i):last(indsn) if A[i,j] != transpose(A[j,i]) return false end end return true end
Fill docstrings
This is useful if you want to use M-q
on docstrings.
(defun julia-fill-string ()
"Fill a docstring, preserving newlines before and after triple quotation marks."
(interactive)
(if (and transient-mark-mode mark-active)
(fill-region (region-beginning) (region-end) nil t)
(cl-flet ((fill-if-string ()
(when (or (looking-at (rx "\"\"\""
(group
(*? (or (not (any "\\"))
(seq "\\" anything))))
"\"\"\""))
(looking-at (rx "\""
(group
(*? (or (not (any "\\"))
(seq "\\" anything))))
"\"")))
(let ((start (match-beginning 1))
(end (match-end 1)))
;; (ess-blink-region start end)
(fill-region start end nil nil nil)))))
(save-excursion
(let ((s (syntax-ppss)))
(when (fourth s) (goto-char (ninth s))))
(fill-if-string)))))
Add
(local-set-key (kbd "M-q") 'julia-fill-string)
to the mode hook.
Highlight things after column 80
I add this to the mode hook:
(set-fill-column 80)
I also use whitespace
globally:
(require 'whitespace)
(setq whitespace-style '(face empty tabs lines-tail trailing))
(global-whitespace-mode t)
This is what it looks like:
QR{T,S}(factors::AbstractMatrix{T}, τ::Vector{T}) where {T,S<:AbstractMatrix} = new(factors, τ) end QR(factors::AbstractMatrix{T}, τ::Vector{T}) where {T} = QR{T,typeof(factors)}(factors, τ)
Hungry delete-mode
Add this to the mode hook:
(hungry-delete-mode)
and then backspace and delete will remove all whitespace near the point in the relevant direction.
In case you are wondering, the theme is alect-light.