Comment configurer Emacs pour la programmation de l’assemblage et la correction de l’indentation?

Comment configurer Emacs pour la programmation de l’assemblage et la correction de l’indentation?

Emacs met en retrait certaines directives de manière agaçante.

En particulier, les mots-clés global , extern et section ci-dessous sont mis en retrait en tant que code.

Je veux que ces mots-clés soient alignés à gauche. Comment cela peut-il être fait?

En outre, existe-t-il de bons modes de programmation d’assemblage qui méritent d’être recommandés?

  global _main extern _printf section .text _main: push msg call _printf add esp, 4 ret msg: db 'HelloWorld', 0 

La mise en évidence de la syntaxe fonctionne en mode asm, bien que:

entrer la description de l'image ici

Je l’utilise dans mes ~/.emacs sous Linux pour personnaliser le mode asm, le rendant assez utilisable pour la syntaxe NASM, et moyennement ok pour la syntaxe GAS. (Syntaxe de mise en évidence et ainsi de suite ; comme le caractère de commentaire, GAS avec # est un gâchis. Je n’ai pas cherché à changer cela).

Je défais le commentaire élecsortingque pour que je puisse taper ; sans asm-mode en supposant qu’il sait où je veux le commentaire.

J’ai configuré des expressions rationnelles pour définir la colonne de retrait sur 0 pour la directive %nasm_macro , global , section et labels (se terminant par %nasm_macro

 (defun my-asm-mode-hook () ;; you can use `comment-dwim' (M-;) for this kind of behaviour anyway (local-unset-key (vector asm-comment-char)) ;; (local-unset-key "") ; doesn't work. "RET" in a terminal. http://emacs.stackexchange.com/questions/13286/how-can-i-stop-the-enter-key-from-sortingggering-a-completion-in-company-mode (elecsortingc-indent-local-mode) ; toggle off ; (setq tab-width 4) (setq indent-tabs-mode nil) ;; asm-mode sets it locally to nil, to "stay closer to the old TAB behaviour". ;; (setq tab-always-indent (default-value 'tab-always-indent)) (defun asm-calculate-indentation () (or ;; Flush labels to the left margin. ; (and (looking-at "\\(\\.\\|\\sw\\|\\s_\\)+:") 0) (and (looking-at "[.@_[:word:]]+:") 0) ;; Same thing for `;;;' comments. (and (looking-at "\\s<\\s<\\s<") 0) ;; %if nasm macro stuff goes to the left margin (and (looking-at "%") 0) (and (looking-at "c?global\\|section\\|default\\|align\\|INIT_..X") 0) ;; Simple `;' comments go to the comment-column ;(and (looking-at "\\s<\\(\\S<\\|\\'\\)") comment-column) ;; The rest goes at column 4 (or 4))) ) (add-hook 'asm-mode-hook #'my-asm-mode-hook) 

Appuyez sur Entrée pour mettre automatiquement en retrait la ligne sur laquelle se trouvait le curseur. Appuyez sur control-O pour insérer une nouvelle ligne sans déclencher de retrait automatique.

Enter vous amène toujours à la colonne 4. Si vous tapez quelque chose comme .my_loop: il sera indenté jusqu'à ce que vous .my_loop: sur la touche retour, donc il faut un peu de temps pour taper rapidement et ne pas s'attendre à devoir revenir indent sur une ligne après avoir appuyé sur enter.

Appuyez sur TAB pour indenter automatiquement une ligne, mais une nouvelle pression sur cette touche induira la prochaine tabulation.

Emacs 25.3.1 sur Arch Linux, éditer une réponse de code-golf en cours. (J'ai rendu la fenêtre petite seulement à des fins de capture d'écran, bien sûr.) Toutes ces lignes sont à leur indentation naturelle. Les commentaires sont principalement à la colonne qui meta- ; les met sur.

entrer la description de l'image ici