mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-02-16 16:24:18 +00:00
WOAH, ediff-transition
Probably over and under engineered at the same time, but WHATEVER ITS COOL.
This commit is contained in:
parent
ea3037cecf
commit
a69d6a1278
2 changed files with 105 additions and 0 deletions
|
|
@ -469,6 +469,8 @@
|
|||
(setq ediff-window-setup-function 'ediff-setup-windows-plain
|
||||
ediff-split-window-function 'split-window-horizontally)
|
||||
|
||||
(require 'ediff-transition)
|
||||
|
||||
(defun ediff-copy-both-to-C ()
|
||||
(interactive)
|
||||
(ediff-copy-diff ediff-current-difference nil 'C nil
|
||||
|
|
|
|||
103
lisp/ediff-transition.el
Normal file
103
lisp/ediff-transition.el
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
;;; ediff-transition.el --- -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2023 Benson Chu
|
||||
|
||||
;; Author: Benson Chu <bensonchu457@gmail.com>
|
||||
;; Created: [2023-05-13 08:08]
|
||||
|
||||
;; 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; TOOD: Apparently I can rewrite this in ediff-mult.el?
|
||||
|
||||
(defvar ediff-transition-mode-map
|
||||
(let ((keymap (make-sparse-keymap)))
|
||||
(define-key keymap "N" #'ediff-transition-forward)
|
||||
(define-key keymap "P" #'ediff-transition-backward)
|
||||
keymap))
|
||||
|
||||
(defun ediff-transition-display (index file-list)
|
||||
(when ediff-transition-mode
|
||||
(ediff-really-quit nil))
|
||||
(ediff-files (nth index file-list)
|
||||
(nth (1+ index) file-list)
|
||||
'((lambda (&rest optional)
|
||||
(ediff-transition-mode)))))
|
||||
|
||||
(defun ediff-transition-forward ()
|
||||
(interactive)
|
||||
(if (<= (1- (1- (length ediff-transition-list))) ediff-transition-index)
|
||||
(message "Reached end of file list")
|
||||
(cl-incf ediff-transition-index)
|
||||
(ediff-transition-display
|
||||
ediff-transition-index
|
||||
ediff-transition-list)))
|
||||
|
||||
(defun ediff-transition-backward ()
|
||||
(interactive)
|
||||
(if (<= ediff-transition-index 0)
|
||||
(message "Reached beginning of file list")
|
||||
(cl-decf ediff-transition-index)
|
||||
(ediff-transition-display
|
||||
ediff-transition-index
|
||||
ediff-transition-list)))
|
||||
|
||||
(define-minor-mode ediff-transition-mode ""
|
||||
:lighter ediff-trans
|
||||
:keymap ediff-transition-mode-map)
|
||||
|
||||
;; TODO: transition (haha) away from global variables
|
||||
(defvar ediff-transition-list nil)
|
||||
(defvar ediff-transition-index 0)
|
||||
|
||||
(defun ediff-transition (l)
|
||||
(when (< (length l) 2)
|
||||
(error "Must specify more than one file"))
|
||||
(setq ediff-transition-list l
|
||||
ediff-transition-index 0)
|
||||
(ediff-transition-display
|
||||
ediff-transition-index
|
||||
ediff-transition-list))
|
||||
|
||||
(defun ediff-transition-llvm-print-after-all (buffer)
|
||||
(interactive
|
||||
(list (current-buffer)))
|
||||
(let ((window--sides-inhibit-check t))
|
||||
(set-window-parameter (selected-window) 'window-side nil)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(let ((r (rx line-start (optional "# ") "*** "))
|
||||
flist)
|
||||
(re-search-forward r)
|
||||
(let ((previous-index (match-beginning 0)))
|
||||
(while (re-search-forward r nil t)
|
||||
(let ((file (make-temp-file "llvm-print-after-all-" nil ".ll")))
|
||||
(write-region previous-index (match-beginning 0) file)
|
||||
(push file flist))
|
||||
(setq previous-index (match-beginning 0))))
|
||||
(ediff-transition (reverse flist))))))
|
||||
|
||||
;; (ediff-transition
|
||||
;; (mapcar #'(lambda (x)
|
||||
;; (expand-file-name x
|
||||
;; "~/workspace/ediff-multiple"))
|
||||
;; '("1.txt" "2.txt" "3.txt" "4.txt")))
|
||||
|
||||
(provide 'ediff-transition)
|
||||
;;; ediff-transition.el ends here
|
||||
Loading…
Reference in a new issue