.emacs.d/ag-functions.el
author Adam Gomaa <adam@gomaa.us>
Sun Dec 18 13:13:02 2011 -0500
changeset 521 67f37d330ad0
parent 322 b0123230dc77
permissions -rw-r--r--
Remove project & _list_projects, I don't use them anymore.
gak9422e@0
     1
gak9422e@0
     2
(defun kill-whole-line ()
gak9422e@0
     3
  (interactive)
gak9422e@0
     4
  (move-beginning-of-line 1)
gak9422e@0
     5
  (kill-line 1)
gak9422e@0
     6
  )
gak9422e@0
     7
gak9422e@0
     8
(defun jao-toggle-selective-display (column)
gak9422e@0
     9
  (interactive "P")
gak9422e@0
    10
  (set-selective-display
gak9422e@0
    11
   (if selective-display nil (or column 1))))
gak9422e@0
    12
gak9422e@0
    13
gak9422e@0
    14
gak9422e@0
    15
(defun diff-buffer-with-associated-file ()
gak9422e@0
    16
  "View the differences between BUFFER and its associated file.
gak9422e@0
    17
This requires the external program \"diff\" to be in your `exec-path'. 
gak9422e@0
    18
Returns nil if no differences found, 't otherwise."
gak9422e@0
    19
  (interactive)
gak9422e@0
    20
  (let ((buf-filename buffer-file-name)
gak9422e@0
    21
        (buffer (current-buffer)))
gak9422e@0
    22
    (unless buf-filename
gak9422e@0
    23
      (error "Buffer %s has no associated file" buffer))
gak9422e@0
    24
    (let ((diff-buf (get-buffer-create
gak9422e@0
    25
                     (concat "*Assoc file diff: "
gak9422e@0
    26
                             (buffer-name)
gak9422e@0
    27
                             "*"))))
gak9422e@0
    28
      (with-current-buffer diff-buf
gak9422e@0
    29
        (setq buffer-read-only nil)
gak9422e@0
    30
        (erase-buffer))
gak9422e@0
    31
      (let ((tempfile (make-temp-file "buffer-to-file-diff-")))
gak9422e@0
    32
        (unwind-protect
gak9422e@0
    33
            (progn
gak9422e@0
    34
              (with-current-buffer buffer
gak9422e@0
    35
                (write-region (point-min) (point-max) tempfile nil 'nomessage))
gak9422e@0
    36
              (if (zerop
code@3
    37
                   (apply #'call-process "diff" nil diff-buf nil
gak9422e@0
    38
                          (append
gak9422e@0
    39
                           (when (and (boundp 'ediff-custom-diff-options)
gak9422e@0
    40
                                      (stringp ediff-custom-diff-options))
gak9422e@0
    41
                             (list ediff-custom-diff-options))
gak9422e@0
    42
                           (list buf-filename tempfile))))
gak9422e@0
    43
                  (progn
gak9422e@0
    44
                    (message "No differences found")
gak9422e@0
    45
                    nil)
gak9422e@0
    46
                (progn
gak9422e@0
    47
                  (with-current-buffer diff-buf
gak9422e@0
    48
                    (goto-char (point-min))
gak9422e@0
    49
                    (if (fboundp 'diff-mode)
gak9422e@0
    50
                        (diff-mode)
gak9422e@0
    51
                      (fundamental-mode)))
gak9422e@0
    52
                  (display-buffer diff-buf)
gak9422e@0
    53
                  t)))
gak9422e@0
    54
          (when (file-exists-p tempfile)
gak9422e@0
    55
            (delete-file tempfile)))))))
gak9422e@0
    56
gak9422e@0
    57
;; tidy up diffs when closing the file
gak9422e@0
    58
(defun kill-associated-diff-buf ()
gak9422e@0
    59
  (let ((buf (get-buffer (concat "*Assoc file diff: "
gak9422e@0
    60
                             (buffer-name)
gak9422e@0
    61
                             "*"))))
gak9422e@0
    62
    (when (bufferp buf)
gak9422e@0
    63
      (kill-buffer buf))))
gak9422e@0
    64
gak9422e@0
    65
(add-hook 'kill-buffer-hook 'kill-associated-diff-buf)
gak9422e@0
    66
gak9422e@0
    67
(defun de-context-kill (arg)
gak9422e@0
    68
  "Kill buffer, taking gnuclient into account."
gak9422e@0
    69
  (interactive "p")
gak9422e@0
    70
  (when (and (buffer-modified-p)
gak9422e@0
    71
             buffer-file-name
gak9422e@0
    72
             (not (string-match "\\*.*\\*" (buffer-name)))
gak9422e@0
    73
             ;; erc buffers will be automatically saved
gak9422e@0
    74
             (not (eq major-mode 'erc-mode))
gak9422e@0
    75
             (= 1 arg))
gak9422e@0
    76
    (let ((differences 't))
gak9422e@0
    77
    (when (file-exists-p buffer-file-name)
gak9422e@0
    78
      (setq differences (diff-buffer-with-associated-file)))
gak9422e@0
    79
    (error (if differences 
gak9422e@0
    80
               "Buffer has unsaved changes"
gak9422e@0
    81
             "Buffer has unsaved changes, but no differences wrt. the file"))))
gak9422e@0
    82
  (if (and (boundp 'gnuserv-minor-mode)
gak9422e@0
    83
             gnuserv-minor-mode)
gak9422e@0
    84
      (gnuserv-edit)
gak9422e@0
    85
    (set-buffer-modified-p nil)
gak9422e@0
    86
    (kill-buffer (current-buffer))))
gak9422e@0
    87
gak9422e@0
    88
code@2
    89
(fset 'lparen
code@2
    90
      (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("\\left(" 0 "%d")) arg)))
code@2
    91
(fset 'rparen
code@2
    92
      (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("\\right)" 0 "%d")) arg)))
code@2
    93
code@3
    94
(defun my-list-buffers (&optional files-only)
code@3
    95
  "Opens list-buffers and put focus on it"
code@3
    96
  (interactive "P")
code@3
    97
  (let ((b (list-buffers-noselect files-only)))
code@3
    98
    (display-buffer b)
code@6
    99
    (pop-to-buffer b)
code@6
   100
    (delete-other-windows)))
code@3
   101
code@35
   102
code@71
   103
(defun jao-toggle-selective-display (column)
code@71
   104
  (interactive "P")
code@71
   105
  (set-selective-display
code@71
   106
   (if selective-display nil (or column 1))))
code@71
   107
code@88
   108
(defun really-revert-buffer ()
code@88
   109
  "Revert the buffer without asking for confirmation."
code@88
   110
  (interactive)
code@88
   111
  (revert-buffer t t t))
code@71
   112
code@133
   113
(defun close-project (project)
code@133
   114
  "Filesets never seems to work."
code@133
   115
  (interactive "P")
code@133
   116
  (dolist (buffer (buffer-list))
code@133
   117
    (with-current-buffer buffer
code@133
   118
      (if (and (buffer-file-name)
code@133
   119
               (string-match project (buffer-file-name)))
code@133
   120
          (kill-buffer buffer)))))
code@133
   121
code@290
   122
(defun my-clean-line (foo)
code@290
   123
  (interactive "P")
code@290
   124
  (indent-for-tab-command)
code@290
   125
  (move-end-of-line nil)
code@290
   126
  (delete-horizontal-space)
code@290
   127
  (next-logical-line))
code@133
   128
code@291
   129
(defun insert-time-stamp ()
code@291
   130
  (interactive)
code@291
   131
  (insert-and-inherit (time-stamp-yyyy/mm/dd) " - "(time-stamp-hh:mm:ss))
code@291
   132
  (newline))
code@291
   133
gak9422e@0
   134
(provide 'ag-functions)