1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

New command ruby-find-library-file

* lisp/progmodes/ruby-mode.el (ruby-find-library-file):
New command.
(ruby-mode-map): Add binding for it.
This commit is contained in:
Dmitry Gutov 2019-05-30 19:41:16 +03:00
parent b367a3dee1
commit 27f5627104
2 changed files with 25 additions and 0 deletions

View file

@ -155,6 +155,7 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
(define-key map (kbd "M-C-n") 'ruby-end-of-block)
(define-key map (kbd "C-c {") 'ruby-toggle-block)
(define-key map (kbd "C-c '") 'ruby-toggle-string-quotes)
(define-key map (kbd "C-c C-f") 'ruby-find-library-file)
map)
"Keymap used in Ruby mode.")
@ -1802,6 +1803,28 @@ If the result is do-end block, it will always be multiline."
(format "%s%s%s" string-quote content string-quote))
(goto-char orig-point)))))
(defun ruby-find-library-file (&optional feature-name)
"Visit a library file denoted by FEATURE-NAME.
FEATURE-NAME is a relative file name, file extension is optional.
This commands delegates to 'gem which', which searches both
installed gems and the standard library. When called
interactively, defaults to the feature name in the 'require'
statement around point."
(interactive)
(unless feature-name
(let ((init (save-excursion
(forward-line 0)
(when (looking-at "require [\"']\\(.?*\\)[\"']")
(match-string 1)))))
(setq feature-name (read-string "Feature name: " init))))
(let ((out
(substring
(shell-command-to-string (concat "gem which " feature-name))
0 -1)))
(if (string-match-p "\\`ERROR" out)
(user-error "%s" out)
(find-file out))))
(eval-and-compile
(defconst ruby-percent-literal-beg-re
"\\(%\\)[qQrswWxIi]?\\([[:punct:]]\\)"