rect.elc 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. (defun operate-on-rectangle (function start end coerce-tabs) "\
  2. Call FUNCTION for each line of rectangle with corners at START, END.
  3. If COERCE-TABS is non-nil, convert multi-column characters
  4. that span the starting or ending columns on any line
  5. to multiple spaces before calling FUNCTION.
  6. FUNCTION is called with three arguments:
  7. position of start of segment of this line within the rectangle,
  8. number of columns that belong to rectangle but are before that position,
  9. number of columns that belong to rectangle but are after point.
  10. Point is at the end of the segment of this line within the rectangle." (byte-code "ÌÌÌÌŠ bˆi‰ˆÍ ˆ`‰)ˆŠ bˆi‰ˆÎÏ!ˆÐ ‰)ˆ
  11. Wƒ=
  12. ‰)‚>̈Ñ
  13. \"ƒÊŠ bˆ` W…ÆÌÌÌ Ò!ˆ
  14. …kiV…kÓ!ˆiZ‰ˆ`‰ˆÒ
  15. !ˆi
  16. Vƒ“
  17. ƒ�Ó
  18. !‚�ÔÕ!‚”̈
  19. iZ‰ ˆÖWƒ± \\ Ö‰‚²Ìˆ×  $+ˆÎÏ!ˆ‚J)‚Ë̈
  20. Z,‡" [startcol startlinepos endcol endlinepos start end tem startpos begextra endextra coerce-tabs function nil beginning-of-line forward-line 1 point-marker /= move-to-column rectangle-coerce-tab forward-char -1 0 funcall] 15))
  21. (defun delete-rectangle-line (startdelpos ignore ignore) (byte-code "Á`\"‡" [startdelpos delete-region] 3))
  22. (defun delete-extract-rectangle-line (startdelpos begextra endextra) (byte-code "ŠÃ
  23. #)ˆÄ`\"‡" [startdelpos begextra endextra extract-rectangle-line delete-region] 4))
  24. (defun extract-rectangle-line (startdelpos begextra endextra) (byte-code "È `\"` bˆÉÊ
  25. Ã#…8iŠËÌ!ˆi)ZÍÎ`
  26. Ï#OÐ !G`
  27. Z\\ÑOQ‰)ˆ‚
  28. ˆ ÍV†CÍVƒTÐ !Ð!Q‰‚UшB‰*‡" [line startdelpos end t width begextra endextra lines buffer-substring search-forward " " forward-char -1 0 - 1 spaces-string nil] 12))
  29. (defconst spaces-strings (quote ["" " " " " " " " " " " " " " " " "]))
  30. (defun spaces-string (n) (byte-code "ÃXƒ H‚(ÄÃV…!Å
  31. PÃZ‰ˆ‚ˆ
  32. HP)‡" [n spaces-strings val 8 "" " "] 3))
  33. (defun delete-rectangle (start end) "\
  34. Delete (don't save) text in rectangle with point and mark as corners.
  35. The same range of columns is deleted in each line
  36. starting with the line where the region begins
  37. and ending with the line where the region ends." (interactive "r") (byte-code "ÈÄÅ Â$‡" [start end t nil operate-on-rectangle delete-rectangle-line] 5))
  38. (defun delete-extract-rectangle (start end) "\
  39. Return and delete contents of rectangle with corners at START and END.
  40. Value is list of strings, one for each line of the rectangle." (byte-code "ÄÅÆ
  41. Ã$ˆÇ!)‡" [lines start end t nil operate-on-rectangle delete-extract-rectangle-line nreverse] 5))
  42. (defun extract-rectangle (start end) "\
  43. Return contents of rectangle with corners at START and END.
  44. Value is list of strings, one for each line of the rectangle." (byte-code "ÃÄÅ
  45. Ã$ˆÆ!)‡" [lines start end nil operate-on-rectangle extract-rectangle-line nreverse] 5))
  46. (defvar killed-rectangle nil "\
  47. Rectangle for yank-rectangle to insert.")
  48. (defun kill-rectangle (start end) "\
  49. Delete rectangle with corners at point and mark; save as last killed one.
  50. Calling from program, supply two args START and END, buffer positions.
  51. But in programs you might prefer to use delete-extract-rectangle." (interactive "r") (byte-code "ÈÄ
  52. \"‰‡" [killed-rectangle start end nil delete-extract-rectangle] 3))
  53. (defun yank-rectangle nil "\
  54. Yank the last killed rectangle with upper left corner at point." (interactive) (byte-code "ÁˆÂ!‡" [killed-rectangle nil insert-rectangle] 2))
  55. (defun insert-rectangle (rectangle) "\
  56. Insert text of RECTANGLE with upper left corner at point.
  57. RECTANGLE's first line is inserted at point,
  58. its second line is inserted at a point vertically under point, etc.
  59. RECTANGLE should be a list of strings." (byte-code " iÄ…H †7ÆÇ!ˆn†ÈcˆÉ
  60. !ˆi
  61. Vƒ)Ê
  62. !‚*ňi
  63. Wƒ6
  64. j‚7ňʼnˆ@cˆA‰ˆ‚+‡" [lines rectangle insertcolumn first t nil forward-line 1 10 move-to-column rectangle-coerce-tab] 6))
  65. (defun open-rectangle (start end) "\
  66. Blank out rectangle with corners at point and mark, shifting text right.
  67. The text previously in the region is not overwritten by the blanks,
  68. but insted winds up to the right of the rectangle." (interactive "r") (byte-code "ˆÃÄ Â$‡" [start end nil operate-on-rectangle open-rectangle-line] 5))
  69. (defun open-rectangle-line (startpos begextra endextra) (byte-code "Åi
  70. # bˆiÆÇ!ˆi Z\\‰)ˆÈ`ÉÇ!ˆ`\"ˆj)‡" [column begextra endextra startpos ocol + skip-chars-forward " " delete-region skip-chars-backward] 6))
  71. (defun clear-rectangle (start end) "\
  72. Blank out rectangle with corners at point and mark.
  73. The text previously in the region is overwritten by the blanks." (interactive "r") (byte-code "ÈÄÅ Â$‡" [start end t nil operate-on-rectangle clear-rectangle-line] 5))
  74. (defun clear-rectangle-line (startpos begextra endextra) (byte-code "ÃÄ!ˆi \\Å`
  75. bˆÆÄ!ˆ`\"ˆj)‡" [column endextra startpos skip-chars-forward " " delete-region skip-chars-backward] 5))
  76. (defun rectangle-coerce-tab (column) (byte-code "iÂÄÅ!ˆjˆÆ Z!*‡" [aftercol indent-tabs-mode nil column delete-char -1 backward-char] 4))