@ -198,41 +198,42 @@ point reaches the beginning or end of the buffer, stop there."
( kill-new filename )
( message " Copied buffer file name '%s' to the clipboard. " filename ) ) ) )
( defun prelude-duplicate-current-line-or-region ( arg )
" Duplicates the current line or region ARG times.
If there 's no region, the current line will be duplicated. However, if
there 's a region, all lines that region covers will be duplicated. "
( interactive " p " )
( let ( beg end ( origin ( point ) ) )
( defun prelude-get-positions-of-line-or-region ( )
" Return positions (beg . end) of the current line
or region. "
( let ( beg end )
( if ( and mark-active ( > ( point ) ( mark ) ) )
( exchange-point-and-mark ) )
( setq beg ( line-beginning-position ) )
( if mark-active
( exchange-point-and-mark ) )
( setq end ( line-end-position ) )
( let ( ( region ( buffer-substring-no-properties beg end ) ) )
( cons beg end ) ) )
( defun prelude-duplicate-current-line-or-region ( arg )
" Duplicates the current line or region ARG times.
If there 's no region, the current line will be duplicated. However, if
there 's a region, all lines that region covers will be duplicated. "
( interactive " p " )
( pcase-let* ( ( origin ( point ) )
( ` ( , beg . , end ) ( prelude-get-positions-of-line-or-region ) )
( region ( buffer-substring-no-properties beg end ) ) )
( -dotimes arg
( lambda ( n )
( goto-char end )
( newline )
( insert region )
( setq end ( point ) ) ) )
( goto-char ( + origin ( * ( length region ) arg ) arg ) ) ) ) )
( goto-char ( + origin ( * ( length region ) arg ) arg ) ) ) )
;; TODO: Remove code duplication by extracting something more generic
( defun prelude-duplicate-and-comment-current-line-or-region ( arg )
" Duplicates and comments the current line or region ARG times.
If there 's no region, the current line will be duplicated. However, if
there 's a region, all lines that region covers will be duplicated. "
( interactive " p " )
( let ( beg end ( origin ( point ) ) )
( if ( and mark-active ( > ( point ) ( mark ) ) )
( exchange-point-and-mark ) )
( setq beg ( line-beginning-position ) )
( if mark-active
( exchange-point-and-mark ) )
( setq end ( line-end-position ) )
( let ( ( region ( buffer-substring-no-properties beg end ) ) )
( pcase-let* ( ( origin ( point ) )
( ` ( , beg . , end ) ( prelude-get-positions-of-line-or-region ) )
( region ( buffer-substring-no-properties beg end ) ) )
( comment-or-uncomment-region beg end )
( setq end ( line-end-position ) )
( -dotimes arg
@ -241,7 +242,7 @@ there's a region, all lines that region covers will be duplicated."
( newline )
( insert region )
( setq end ( point ) ) ) )
( goto-char ( + origin ( * ( length region ) arg ) arg ) ) ) ) )
( goto-char ( + origin ( * ( length region ) arg ) arg ) ) ) )
( defun prelude-rename-file-and-buffer ( )
" Renames current buffer and file it is visiting. "