JSX in Emacs :en:jsx:react:emacs:
I find rjsx-mode annoying when it indents closed html tag with extra spaces.
It's based on js2-mode which is actually just calling Emacs v25 API
So the solution is as simple as advice
(defadvice js-jsx-indent-line (after js-jsx-indent-line-after-hack activate) "Workaround sgml-mode and follow airbnb component style." (let* ((cur-line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) (if (string-match "^\\( +\\)\/?> *$" cur-line) (let* ((empty-spaces (match-string 1 cur-line))) (replace-regexp empty-spaces (make-string (- (length empty-spaces) sgml-basic-offset) 32) nil (line-beginning-position) (line-end-position))))))
the buffer with Chinese name :en:emacs:chinese:
We can find the buffer with Chinese name efficiently by using the first character of pinyin.
(defun ivy-switch-buffer-matcher-pinyin (regexp candidates) (unless (featurep 'pinyinlib) (require 'pinyinlib)) (let* ((pys (split-string regexp "[ \t]+")) (regexp (format ".*%s.*" (mapconcat 'pinyinlib-build-regexp-string pys ".*")))) (ivy--switch-buffer-matcher regexp candidates))) (defun ivy-switch-buffer-by-pinyin () "Switch to another buffer." (interactive) (unless (featurep 'ivy) (require 'ivy)) (let ((this-command 'ivy-switch-buffer)) (ivy-read "Switch to buffer: " 'internal-complete-buffer :matcher #'ivy-switch-buffer-matcher-pinyin :preselect (buffer-name (other-buffer (current-buffer))) :action #'ivy--switch-buffer-action :keymap ivy-switch-buffer-map :caller 'ivy-switch-buffer)))
M-x ivy-switch-buffer-by-pinyin to switch buffer.
The algorithm of pinyinlib is simple. We build a big lookup table to convert the a plain English string into a regular expression containing Chinese characters.
You can apply the same algorithm to other non-English languages.