diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/haskell-mode-20180913.348/haskell-move-nested.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/haskell-mode-20180913.348/haskell-move-nested.el | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/haskell-mode-20180913.348/haskell-move-nested.el b/configs/shared/emacs/.emacs.d/elpa/haskell-mode-20180913.348/haskell-move-nested.el new file mode 100644 index 000000000000..1e4774de4fcc --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/haskell-mode-20180913.348/haskell-move-nested.el @@ -0,0 +1,130 @@ +;;; haskell-move-nested.el --- Change the column of text nested below a line -*- lexical-binding: t -*- + +;; Copyright (C) 2010 Chris Done + +;; Author: Chris Done <chrisdone@gmail.com> + +;; This file is not part of GNU Emacs. + +;; 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 3 of +;; the License, 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 this program. If not, see +;; <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This module is intended for Haskell mode users, but is +;; independent of Haskell mode. + +;; Example usage: + +;; (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left) +;; (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right) + +;;; Code: + +;;;###autoload +(defun haskell-move-nested (cols) + "Shift the nested off-side-rule block adjacent to point by COLS columns to the right. + +In Transient Mark mode, if the mark is active, operate on the contents +of the region instead. +" + (save-excursion + (if (and transient-mark-mode mark-active) + (progn + (indent-rigidly (region-beginning) (region-end) cols) + (setq deactivate-mark nil)) + (let ((region (haskell-move-nested-region))) + (when region + (indent-rigidly (car region) (cdr region) cols)))))) + +;;;###autoload +(defun haskell-move-nested-right (cols) + "Increase indentation of the following off-side-rule block adjacent to point. + +Use a numeric prefix argument to indicate amount of indentation to apply. + +In Transient Mark mode, if the mark is active, operate on the contents +of the region instead." + (interactive "p") + (haskell-move-nested cols) + ) + +;;;###autoload +(defun haskell-move-nested-left (cols) + "Decrease indentation of the following off-side-rule block adjacent to point. + +Use a numeric prefix argument to indicate amount of indentation to apply. + +In Transient Mark mode, if the mark is active, operate on the contents +of the region instead." + (interactive "p") + (haskell-move-nested (- cols)) + ) + +(defun haskell-move-nested-region () + "Infer region off-side-rule block adjacent to point. +Used by `haskell-move-nested'. +" + (save-excursion + (let ((starting-level (current-column))) + (forward-line) + (let ((current-level (haskell-move-nested-indent-level))) + (let ((start-point (line-beginning-position)) + (start-end-point (line-end-position)) + (end-point nil) + (last-line 0)) + (forward-line) + (while (and (not (= (line-beginning-position) last-line)) + (or (> (haskell-move-nested-indent-level) starting-level) + (and (> current-level starting-level) + (>= (haskell-move-nested-indent-level) current-level)))) + (setq last-line (line-beginning-position)) + (setq end-point (line-end-position)) + (forward-line)) + (cons start-point (or end-point + start-end-point))))))) + +(defun haskell-move-nested-indent-level () + (max + 0 + (1- (length + (buffer-substring-no-properties + (line-beginning-position) + (or (save-excursion (goto-char (line-beginning-position)) + (search-forward-regexp "[^ ]" (line-end-position) t 1)) + (line-beginning-position))))))) + +(defun haskell-kill-nested () + "Kill the nested region after point." + (interactive) + (let ((start (point)) + (reg (save-excursion + (search-backward-regexp "^[ ]+" (line-beginning-position) t 1) + (search-forward-regexp "[^ ]" (line-end-position) t 1) + (haskell-move-nested-region)))) + (kill-region start (cdr reg)))) + +(defun haskell-delete-nested () + "Kill the nested region after point." + (interactive) + (let ((start (point)) + (reg (save-excursion + (search-backward-regexp "^[ ]+" (line-beginning-position) t 1) + (search-forward-regexp "[^ ]" (line-end-position) t 1) + (haskell-move-nested-region)))) + (delete-region start (cdr reg)))) + +(provide 'haskell-move-nested) + +;;; haskell-move-nested.el ends here |