[CMake] Emacs: Addition to cmake-model.el to show cmake documentation

Martin Apel martin.apel at simpack.de
Wed Apr 29 04:58:57 EDT 2009


Hi James,

your version for showing documentation is surely much nicer than mine.
One minor tip: Instead of your function cmake-find-word you could use
the function word-at-point coming from the package thingatpt, which does
exactly, what you need. This package is part of the current Emacs
distribution.

Best Regards,

Martin

James Bigler wrote:
> On Tue, Apr 28, 2009 at 8:21 AM, Martin Apel <martin.apel at simpack.de
> <mailto:martin.apel at simpack.de>> wrote:
> > Bill Hoffman wrote:
> >> Martin Apel wrote:
> >>
> >>> Hi all,
> >>>
> >>> Inspired by the Emacs command cperl-perldoc-at-point I wrote a little
> >>> command to show the CMake documentation of the command on which the
> >>> cursor is currently positioned. It will open another buffer and
> show the
> >>> documentation generated from "cmake --help-command <command>" in that
> >>> buffer. I found it very useful during creating CMakeLists.txt files.
> >>>
> >>> Bill, maybe it makes sense to integrate this into cmake-mode.el?
> >>>
> >>>
> >>
> >> Looks neat.  Is there a better way in emacs to set the path to CMake?
> >> On many systems I do not put cmake into the PATH.
> >>
> >> -Bill
> >>
> >>
> > You could probably make it a variable, which would be settable through
> > the customize interface of Emacs. I will look into it
> > and repost it, when it's done.
> >
> > Martin
> >
>
> This is pretty lean.  I wrote something similar that I was testing.
>
> Some features:
>
> 1. Provides a default argument, but allows you type in something
> different.
> 2. Maintains a history of the arguments you have given.
> 3. Allows you to run an arbitrary cmake command and put the output
> into a named buffer.
> 4. Runs the cmake command in the back.
> 5. cmake executable is a customized variable.
>
> James
>
> (defun cmake-find-word ()
>  "Finds the word on your cursor."
>  (interactive)
>  (let (word)
>    (save-excursion
>      ;; Find the end of the word
>      (forward-word)
>      (let ((end (point)))
>        ;; Find the beginning
>        (backward-word)
>        ;; Set the word
>        (setq word (buffer-substring-no-properties (point) end))
>        )
>      )
>    )
>  )
>
> (defcustom cmake-mode-cmake-executable "cmake"
>   "*The name of the cmake executable.
> This can be either absolute or looked up on `exec-path'."
>   ;; Don't use (file :must-match t).  It doesn't know about `exec-path'.
>   :type 'file
>   :group 'cmake)
>
> (defun cmake-command-run (type &optional topic)
>  "Runs the command cmake with the arguments specified.  The
> optional argument topic will be appended to the argument list."
>  (interactive "s")
>  (let* ((bufname (concat "*CMake" type (if topic "-") topic "*"))
>         (buffer  (get-buffer bufname))
>         )
>    (if buffer
>        (display-buffer buffer 'not-this-window)
>      ;; Buffer doesn't exist.  Create it and fill it
>      (setq buffer (generate-new-buffer bufname))
>      (setq command (concat cmake-mode-cmake-executable " " type " "
> topic))
>      (message "Running %s" command)
>      (shell-command command buffer)
>      ;; Save the original window, so that we can come back to it later.
>      ;; save-excursion doesn't seem to work for this.
>      (setq window (selected-window))
>      ;; We need to select it so that we can apply special modes to it
>      (select-window (display-buffer buffer 'not-this-window))
>      (cmake-mode)
>      (toggle-read-only t)
>      ;; Restore the original window
>      (select-window window)
>      )
>    )
>  )
>
> (defun cmake-help-list-commands ()
>  "Prints out a list of the cmake commands."
>  (interactive)
>  (cmake-command-run "--help-command-list")
>  )
>
> (defvar cmake-help-command-history nil "Topic read history.")
>
> (defun cmake-get-topic (type)
>  "Gets the topic from the minibuffer input.  The default is the word
> the cursor is on."
>  (interactive)
>  (let* ((default-entry (cmake-find-word))
>         (input (read-string
>                 (format "CMake %s (default %s): " type default-entry)
> ; prompt
>                 nil ; initial input
>                 'cmake-help-command-history ; command history
>                 default-entry ; default-value
>                 )))
>    (if (string= input "")
>        (error "No argument given")
>      input))
>  )
>
>
> (defun cmake-help-command ()
>  "Prints out the help message corresponding to the command the cursor
> is on."
>  (interactive)
>  (setq command (cmake-get-topic "command"))
>  (cmake-command-run "--help-command" (downcase command))
>  )


-- 

Martin Apel                                     Tel:     0049 8153 9288-47
Software Architect                              E-Mail:  martin.apel at simpack.de

INTEC GmbH                                      Tel:     0049 8153 9288-0
Argelsrieder Feld 13                            Fax:     0049 8153 9288-11
82234 Wessling                                  E-Mail:  intec at simpack.de
Germany                                         URL:     http://www.simpack.com

____________
Virus checked by G DATA AntiVirus
Version: AVB 19.313 from 28.04.2009




More information about the CMake mailing list