X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=setup%2Fmagit.el;h=8ae6b76d99ec8db12d79c6006d852b7f7016ef2f;hb=a95258bb6a7a2da895b116a83b3fac7bd33b1306;hp=8a3d27b3aa2ea1dd7d985f21c52cf1bdc7fb222f;hpb=f81363fb8f1d2956fe94b381ba66e8514f1c08cc;p=emacs-init.git diff --git a/setup/magit.el b/setup/magit.el index 8a3d27b..8ae6b76 100644 --- a/setup/magit.el +++ b/setup/magit.el @@ -124,10 +124,13 @@ (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) @@ -167,5 +170,41 @@ (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"))