Difference between revisions of "Emacs"

From Apertium
Jump to navigation Jump to search
m (handy function)
Line 33: Line 33:
 
add an RL restriction to the copy."
 
add an RL restriction to the copy."
 
(nxml-dix-restriction-copy 'RL)))
 
(nxml-dix-restriction-copy 'RL)))
  +
</pre>
  +
  +
Also, if you like having all <i> elements aligned at eg. column 25, the following in your .emacs lets you do <code>M-x align</code> on a region to achieve that:
  +
<pre>
  +
(add-hook 'align-load-hook
  +
(lambda ()
  +
(add-to-list 'align-rules-list
  +
'(nxml-dix-i-align
  +
(regexp . "\\(\\s-*\\)\\(<i.*\\)$")
  +
(modes . '(nxml-mode))
  +
(column . 25)))))
 
</pre>
 
</pre>
   

Revision as of 11:20, 7 June 2009

Emacs has a nice xml editing mode called nXML.

I often define keyboard macros as I edit, some of these I record as functions which you can put in your .emacs, since they come in handy time and again, eg. this one for bidix:

(defun nxml-dix-restriction-copy (&optional RL)
  "Make a copy of the Apertium element we're looking at, and add
an LR restriction to the copy. A prefix argument makes it an RL
restriction."
  (interactive "P")
  (nxml-token-after) 			
  (let ((tok (xmltok-start-tag-qname)))
    (while (not (equal tok "e"))
      (nxml-backward-up-element)
      (nxml-token-after)
      (setq tok (xmltok-start-tag-qname))))
  (if (looking-at "[e>]")
      (nxml-backward-up-element))
  (kill-sexp) (yank) (newline-and-indent) (yank)
  (goto-char (mark t))
  (let ((dir (if RL "RL" "LR")))
    (forward-word) (insert (concat " r=\"" dir "\"")))
  (forward-char) (just-one-space) (delete-backward-char 1))

;; whatever keys you prefer:
(define-key nxml-mode-map (kbd "C-c L") 'nxml-dix-restriction-copy)
(define-key nxml-mode-map (kbd "C-c R")
  (lambda nil (interactive)
    "Make a copy of the Apertium element we're looking at, and
add an RL restriction to the copy."
    (nxml-dix-restriction-copy 'RL)))

Also, if you like having all elements aligned at eg. column 25, the following in your .emacs lets you do M-x align on a region to achieve that:

 (add-hook 'align-load-hook
	  (lambda ()
	    (add-to-list 'align-rules-list
			 '(nxml-dix-i-align
			   (regexp . "\\(\\s-*\\)\\(<i.*\\)$")
			   (modes . '(nxml-mode))
			   (column . 25)))))

See also

Emacs C style for Apertium hacking