Solution:
With the help of @Drew, I figure out a solution. I am not good at elisp. The code may not be a good design but at least is working. I use this code to add 4 white space so I can copy a highlighted code and paste to web like stackoverflow and remove 4 white space afterward easily.
(defun shift-region (distance)
(let ((beg (save-excursion (goto-char (region-beginning))(line-beginning-position)))
(end (save-excursion (goto-char (region-end))(line-end-position))))
(goto-char beg)
(set-mark end)
(indent-rigidly beg end distance)
(setq deactivate-mark nil)))
(defun shift-right ()
(interactive)
(shift-region 4))
(defun shift-left ()
(interactive)
(shift-region -4))
(global-set-key (kbd "C-<tab>") 'shift-right)
(global-set-key (kbd "<backtab>") 'shift-left)
Question:
I have this code
(defun shift-region (distance)
(let ((mark (mark)))
(save-excursion
(indent-rigidly (region-beginning) (region-end) distance)
(push-mark mark t t)
(setq deactivate-mark nil))))
I want to expand the region-beginning
to the beginning of that line
while the region-end
to the end of that line.
Visual representation (I use [ ] to represent the region mark)
abcde
abcde [ fghi
abcdefghi
abc ] defg
abcde
will become
abcde
[ abcdefghi
abcdefghi
abcdefg ]
abcde