|
From: | Kevin Rodgers |
Subject: | Re: overlay (combine) lines |
Date: | Sat, 20 Oct 2007 00:20:24 -0600 |
User-agent: | Thunderbird 1.5.0.13 (Macintosh/20070809) |
ry2ngh@gmail.com wrote:
I am trying to figure out how to overlay lines of code. For example, if I have the following two lines, how can i combine the non blanks into one line. -----before overlay-------------- one three two four -------after overlay-------------- one two three four In the past on a mainframe I was able to do this using a primative line editor by typing an M and O on the line numbers as follows: 00M001 one three 00O002 two four resulting in only one line: 0000001 one two three four
Here is some pure hackery: (defun combine-next-line () "Combine the next line with the current line. The printable characters in the next line are used to replace the whitespace characters in the same column of the current line." (let* ((this-line-beg (line-beginning-position)) (next-line-end (line-end-position 2)) (this-line (buffer-substring this-line-beg (line-end-position))) (next-line (buffer-substring (line-beginning-position 2) next-line-end)) (column 0) (line-length (min (length this-line) (length next-line)))) (while (< column line-length) (when (and (equal (char-syntax (aref this-line column)) ?\s) (not (equal (char-syntax (aref next-line column)) ?\s))) (aset this-line column (aref next-line column))) (setq column (1+ column))) (delete-region this-line-beg next-line-end) (goto-char this-line-beg) (insert this-line) (when (< column (length next-line)) (insert (substring next-line column))))) -- Kevin Rodgers Denver, Colorado, USA
[Prev in Thread] | Current Thread | [Next in Thread] |