;;------ ms like selection ------ ;; Author: Ein Terakawa (Applause) ;; Version: 1.11 ;; WhereToGet: http://www.tky.3web.ne.jp/~applause/emacs-lisp/ ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with your Emacs; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ;; Also you can get the GPL from http://www.gnu.org/copyleft/gpl.txt . ;; As you notice, loading/evaluating more than once cause crash. ;; Load afterward of things modify cursor motion. ;;preserve origin cursor key function. (defvar ms-prev-previous-line (key-binding [up])) (defvar ms-prev-next-line (key-binding [down])) (defvar ms-prev-backward-char (key-binding [left])) (defvar ms-prev-forward-char (key-binding [right])) (defvar ms-prev-beginning-of-line (key-binding [home])) (defvar ms-prev-end-of-line (key-binding [end])) ;(defvar ms-prev-delete-char (key-binding [delete])) (transient-mark-mode t) (if (and (boundp 'ce-line-save-column-list) (not (memq 'ms-select-up ce-line-save-column-list))) (setq ce-line-save-column-list (append ce-line-save-column-list '(ms-select-up ms-select-down ms-select-s-up ms-select-s-down)))) (defun ms-select-s-up(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-previous-line a) ) (defun ms-select-s-down(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-next-line a) ) (defun ms-select-s-left(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-backward-char a) ) (defun ms-select-s-right(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-forward-char a) ) (defun ms-select-s-home(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-beginning-of-line) ) (defun ms-select-s-end(a)(interactive "p") (if (not mark-active) (set-mark-command nil) ) (funcall ms-prev-end-of-line) ) (defun ms-select-up(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-previous-line a) ) (defun ms-select-down(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-next-line a) ) (defun ms-select-left(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-backward-char a) ) (defun ms-select-right(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-forward-char a) ) (defun ms-select-home(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-beginning-of-line) ) (defun ms-select-end(a)(interactive "p") (if mark-active (setq deactivate-mark t) ) (funcall ms-prev-end-of-line) ) (defun ms-select-delete(a)(interactive "p") (if mark-active (let ((p (point))(m (mark))) (if (< p m) (delete-region p m) (delete-region m p)) (setq deactivate-mark t) ) (delete-char a) ) ) (defun ms-select-s-delete(a)(interactive "p") (if mark-active (let ((p (point))(m (mark t))) (if (< p m) (kill-region p m) (kill-region m p)) (setq deactivate-mark t) ) (backward-delete-char a) ) ) (defun ms-select-c-delete(a)(interactive "p") (if mark-active (let ((p (point))(m (mark t))) (if (< p m) (kill-region p m) (kill-region m p)) (setq deactivate-mark t) ) (kill-line) ) ) (defun ms-select-s-insert ()(interactive) (if mark-active (let ((m (mark))(p (point))) (if (< m p) (delete-region m p) (delete-region p m)))) (yank) ) (defun ms-select-c-insert ()(interactive) (if mark-active (let ((m (mark))(p (point))) (if (< m p) (kill-ring-save m p) (kill-ring-save p m)))) ) (define-key global-map [S-up] 'ms-select-s-up) (define-key global-map [S-down] 'ms-select-s-down) (define-key global-map [S-left] 'ms-select-s-left) (define-key global-map [S-right] 'ms-select-s-right) (define-key global-map [S-home] 'ms-select-s-home) (define-key global-map [S-end] 'ms-select-s-end) (define-key global-map [up] 'ms-select-up) (define-key global-map [down] 'ms-select-down) (define-key global-map [left] 'ms-select-left) (define-key global-map [right] 'ms-select-right) (define-key global-map [home] 'ms-select-home) (define-key global-map [end] 'ms-select-end) (define-key global-map [delete] 'ms-select-delete) (define-key global-map [S-delete] 'ms-select-s-delete) (define-key global-map [C-delete] 'ms-select-c-delete) (define-key global-map [S-insert] 'ms-select-s-insert) (define-key global-map [C-insert] 'ms-select-c-insert)