Cool Moves é um pacote para Emacs de movimentação de texto. Ele usa funções básicas para mover palavras, linhas, sentenças, parágrafos e expressões simbólicas. Veja o Cool Moves em ação.
Sou usuário do pacote Evil e escrevo todo meu texto em prosa no Emacs. Este pacote foi inpirado por esta e esta postagens. Ele usa funções básicas casa para movimentar dinamicamente linhas, palavras, parágrafos, sentenças e expressões simbólicas. Poder reorganizar minha prosa facilmente é extremamente importante para mim. Essa é a primeira vez que público código e toda crítica é bem vinda!
Coloque o arquivo `cool-moves.el` em seu diretório de configuração e substitua `~/.emacs.d/lisp/cool-moves` por este caminho. Veja o exemplo (os atalhos de teclado são opcionais):
(use-package cool-moves
:load-path "~/.emacs.d/lisp/cool-moves"
:config
(general-define-key
:keymaps 'override
"<C-down>" 'cool-moves/paragraph-forward
"<C-up>" 'cool-moves/paragraph-backward
"C-S-j" 'cool-moves/line-forward
"C-S-k" 'cool-moves/line-backward
"C-M-n" 'cool-moves/word-forward
"C-M-p" 'cool-moves/word-backwards))
Lembre de substituir `~/.emacs.d/lisp/cool-moves`. O resto é simples.
(add-to-list 'load-path "~/.emacs.d/lisp/cool-moves")
(load "cool-moves")
(general-define-key
:keymaps 'override
"<C-down>" 'cool-moves/paragraph-forward
"<C-up>" 'cool-moves/paragraph-backward
"C-S-j" 'cool-moves/line-forward
"C-S-k" 'cool-moves/line-backward
"C-M-n" 'cool-moves/word-forward
"C-M-p" 'cool-moves/word-backwards)
Cada um desses comandos move algo para frente ou para trás. Este pacote não possui keybindings padrão, mas você pode seguir as sugestões deste documento.
Comando | Tradução |
---|---|
cool-moves/character-backward | caractere ← |
cool-moves/character-forward | caractere → |
cool-moves/word-backwards | palavra ← |
cool-moves/word-forward | palavra → |
cool-moves/sentence-backward | sentença ← |
cool-moves/sentence-forward | sentença → |
cool-moves/line-backward | linha ← |
cool-moves/line-forward | linha → |
cool-moves/paragraph-forward | parágrafo ← |
cool-moves/paragraph-backward | parágrafo → |
cool-moves/sexp-backward | expressão ← |
cool-moves/sexp-forward | expressão → |
Além dos atalhos de teclado, não há configurações a fazer.
São as mesmas de seção anteriores, aqui repetidas apenas para fácil referência. Eu uso o excelente general.el para minhas keybidings, então:
(general-define-key
:keymaps 'override
"C-S-j" 'cool-moves/line-forward
"C-M-n" 'cool-moves/word-forward
"C-S-k" 'cool-moves/line-backward
"C-M-p" 'cool-moves/word-backwards
"<C-up>" 'cool-moves/paragraph-backward
"<C-down>" 'cool-moves/paragraph-forward)
Se você não usa o General e não sabem como criar keybidings, este artigo pode ser útil.
Você pode usar um Hydra para deixar os comandos mais acessíveis.
(defhydra hydra-text-motions (:color amaranth :hint nil :foreign-keys nil)
"
^
^Motions^
-------------------------
_l_: line ↓ _w_: word →
_L_: line ↑ _W_: word ←
_p_: par ↓ _c_: char →
_P_: par ↑ _C_: char ←
_s_: sentence → _x_: sexp →
_S_: sentence ← _X_: sexp ←
"
("<escape>" nil)
("u" nil)
("l" cool-moves/line-forward)
("L" cool-moves/line-backward)
("p" cool-moves/paragraph-forward)
("P" cool-moves/paragraph-backward)
("w" cool-moves/word-forward)
("W" cool-moves/word-backwards)
("c" cool-moves/character-forward)
("C" cool-moves/character-backward)
("s" cool-moves/sentence-forward)
("S" cool-moves/sentence-backward)
("x" cool-moves/sexp-forward)
("X" cool-moves/sexp-backward))
drag-stuff é maior, mais robusto e capaz de arrastar regiões. Ao contrário de cool-moves
, não move sentenças ou caracteres. Ao tentar usar drag-stuff-right
na primeira palavra de uma linha, a mesma é trocada com a última palavra do paragrafo anterior. De todo modo, drag-stuff
é claramente um bom modo/plugin que faz muito com poucos comandos, mas em edição de texto previsibilidade é essencial e eu não preço da complexidade extra. Eu não usei nenhum código deste pacote, mas minhas funções foram muito inspiradas no artigo de Bozhidar Batsov mencionado anteriormente.