magit/company updates and extensions
[emacs-init.git] / setup / magit.el
index 8a3d27b..8ae6b76 100644 (file)
 
 (defun git-files-find-class-decl (symbol)
   (interactive (list (read-string "Symbol: " (current-word))))
-  (let ((dir (magit-get-top-dir default-directory)))
+  (let ((dir (magit-toplevel default-directory)))
     (if (not dir) (error "No git repository"))
     (let ((default-directory dir))
-      (grep (format "git ls-files -z | xargs -r0 grep -nwHF %s | grep -Ew '(class|struct)' | cat -"
+      (grep (format (concat "git ls-files -z"
+                            " | xargs -r0 grep -d skip -nwHF %s"
+                            " | grep -Ew '(class|struct|typedef|using)'"
+                            " | grep -vEw 'friend'")
                     symbol)))))
 
 (global-set-key "\C-cGF" 'git-files-find-symbol)
   (interactive "P")
   (quit-window kill-buffer))
 
+(defun magit-diff-master-mergebase (&optional args files)
+  (interactive (magit-diff-arguments))
+  (magit-diff-working-tree
+   (magit-git-string "merge-base" "master" "HEAD") args files))
+
+(magit-define-popup-action 'magit-diff-popup
+  ?m "Diff merge-base master" 'magit-diff-master-mergebase)
+
+(magit-define-popup-switch 'magit-log-popup
+  ?f "first parent" "--first-parent")
+
+(require 'ffap)
+
+(defun g0dil-magit-old-version-jump-to-current ()
+  (interactive)
+  (let ((current-file (ffap-file-exists-string
+                       (file-name-nondirectory
+                        (replace-regexp-in-string "\\.~.*$" "" (buffer-name))))))
+    (if current-file
+        (g0dil-goto-equivalent-position current-file)
+      (error "current version of file not found"))))
+
+(define-key magit-blob-mode-map "c" 'g0dil-magit-old-version-jump-to-current)
+
+(defun g0dil-magit-diff-jump-to-current ()
+  (interactive)
+  (let ((section-file-name (loop for ident in (magit-section-ident (magit-current-section))
+                                 if (and (consp ident) (eq (car ident) 'file))
+                                 return (cdr ident)
+                                 finally return nil)))
+    (if (ffap-file-exists-string section-file-name)
+        (g0dil-goto-equivalent-position section-file-name)
+      (error "current version of file not found"))))
+
+(define-key magit-revision-mode-map (kbd "C-c RET") 'g0dil-magit-diff-jump-to-current)
+
 ; ignore whitespace
 ; (setq magit-diff-options '("-w"))