[LISP] Emacs major mode

Emacs major mode [LISP] - Divers - Programmation

Marsh Posté le 04-08-2006 à 14:48:38    

Bonjour,
 
Je cherche a faire un mode majeur dans Emacs pour lire et analyser un tkprof (Oracle...).
J'ai deux problemes :
 - J'y connais rien en lisp,
 - Je cherche la bonne solution.
 
Mon but finale est d'avoir une fonction qui ouvre un nouveau buffer qui contient une sorte de grep des lignes qui contienne la chaine "total" et de pouvoir cliquer faire le meme action que si j'avais fais un grep. Le probleme c'est que grep a besoin d'un fichier pour fonctionner si mon buffer est dans un zip cela ne fonctionne pas.
 
Alors j'ai ecris ca :

Code :
  1. (defvar tkprof-search-last-buffer nil
  2.   "The most recent search buffer.
  3. A buffer becomes most recent when a search is started
  4. or when it is used with \\[next-total] or \\[goto-total]." )
  5. (defun tkprof-search-total ()
  6.   (interactive)
  7.   (let (outbuf)
  8.     (save-excursion
  9.       (setq current-buffer-string (buffer-string))
  10.       (setq name-of-search (concat "Tkprof Totals : " (buffer-name)))
  11.       (setq outbuf
  12.     (get-buffer-create
  13.      (funcall (function (lambda (mode)
  14.      (concat "*" (downcase mode) "*" )))
  15.        name-of-search)))
  16.       (set-buffer outbuf))
  17.     ;; Open buf
  18.     (let ((thisdir default-directory)
  19.   outwin)
  20.       (save-excursion
  21. ;; Clear out the compilation buffer and make it writable.
  22. (set-buffer outbuf)
  23. (setq buffer-read-only nil)
  24. (buffer-disable-undo (current-buffer))
  25. (erase-buffer)
  26. (buffer-enable-undo (current-buffer))
  27. (insert "call     count       cpu    elapsed       disk      query\n" )
  28. (insert "------- ------  -------- ---------- ---------- ----------\n" )
  29. (save-excursion
  30.   (while (string-match "total +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\)" current-buffer-string)
  31.     (insert (substring current-buffer-string
  32.          (match-beginning 0)
  33.          (match-end 0)
  34.          ) "\n" )
  35.     (setq current-buffer-string (substring current-buffer-string
  36.        (match-end 0) -1))
  37.     ))
  38. (set-buffer-modified-p nil))
  39.       (if (eq outbuf (current-buffer))
  40.   (goto-char (point-max)))
  41.       ;; Pop up the compilation buffer.
  42.       (setq outwin (display-buffer outbuf nil t))
  43.       (save-excursion
  44. (set-buffer outbuf)
  45.         (set (make-local-variable 'lazy-lock-defer-on-scrolling) t)
  46. (set-window-start outwin (point-min))
  47. (or (eq outwin (selected-window))
  48.     (set-window-point outwin (point-min)))
  49. ))
  50.     (setq compilation-last-buffer outbuf))
  51.   )


 
C'est pas tres efficace (substring)... et je ne vois pas comment faire un buffer interactif.
 
Quelqu'un a une idee ?


---------------
Cdl, Danjer
Reply

Marsh Posté le 04-08-2006 à 14:48:38   

Reply

Marsh Posté le 04-08-2006 à 15:30:03    

Bon... bah j'ai fini par trouver :

Code :
  1. (defun tkprof-lines-total ()
  2.   (interactive)
  3.   (list-matching-lines "total +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\) +\\([0-9.]+\\)" 0)
  4.   )



---------------
Cdl, Danjer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed