home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume24 / mkid2 / part02 / symfunc.el < prev    next >
Lisp/Scheme  |  1991-10-09  |  3KB  |  119 lines

  1. ;; This file provides functions for symbols, that is, things consisting only
  2. ;; of characters matching the regular expression \(\w\|\s_\).  The functions
  3. ;; are similar to those provided for words (e.g., symbol-around-point is
  4. ;; just like word-around-point).
  5.  
  6. (provide 'symfunc)
  7.  
  8. (defvar symbol-char-re "\\(\\w\\|\\s_\\)"
  9. "The regular expression that matches a character belonging to a symbol.")
  10.  
  11. (defun symbol-around-point ()
  12.   "return the symbol around the point as a string"
  13.   (save-excursion
  14.     (let (beg)
  15.       (if (not (at-beginning-of-symbol))
  16.       (forward-symbol -1))
  17.       (setq beg (point))
  18.       (forward-symbol 1)
  19.       (buffer-substring beg (point))
  20.     )
  21.   )
  22. )
  23.  
  24. (defun at-beginning-of-symbol ()
  25. "Return t if point is currently positioned at the beginning of
  26. a symbol."
  27.    (and
  28.       (looking-at symbol-char-re)
  29.       (not (looking-back symbol-char-re))
  30.    )
  31. )
  32.  
  33. (defun forward-symbol (arg)
  34. "Move point forward ARG symbols (backward if ARG is negative).
  35. Normally returns t.
  36. If an edge of the buffer is reached, point is left there
  37. and nil is returned.
  38. It is faster to call backward-symbol than to call forward-symbol
  39. with a negative argument."
  40.    (interactive "p")
  41.    (if (null arg)
  42.       (setq arg 1)
  43.    )
  44.    (if (< arg 0)
  45.       (backward-symbol (- arg))
  46.       (progn
  47.          (while (> arg 0)
  48.             (condition-case ()
  49.                (progn
  50.                   (while (not (looking-at symbol-char-re))
  51.                      (forward-char 1)
  52.                   )
  53.                   (while (looking-at symbol-char-re)
  54.                      (forward-char 1)
  55.                   )
  56.                   t
  57.                )
  58.                (error nil)          ;; Return nil if error
  59.             )
  60.             (setq arg (1- arg))
  61.          )
  62.       )
  63.    )
  64. )
  65.  
  66. (defun backward-symbol (arg)
  67. "Move backward until encountering the end of a symbol.
  68. With argument, do this that many times.
  69. In programs, it is faster to call forward-symbol
  70. than to call backward-symbol with a negative arg."
  71.    (interactive "p")
  72.    (if (null arg)
  73.       (setq arg 1)
  74.    )
  75.    (if (< arg 0)
  76.       (forward-symbol (- arg))
  77.       (progn
  78.          (while (> arg 0)
  79.             (condition-case ()
  80.                (progn
  81.                   (while (not (looking-back symbol-char-re))
  82.                      (forward-char -1)
  83.                   )
  84.                   (while (looking-back symbol-char-re)
  85.                      (forward-char -1)
  86.                   )
  87.                   t
  88.                )
  89.                (error nil)          ;; Return nil if error
  90.             )
  91.             (setq arg (1- arg))
  92.          )
  93.       )
  94.    )
  95. )
  96.  
  97. ;; Additional word-oriented functions.
  98.  
  99. (defun word-around-point ()
  100.   "return the word around the point as a string"
  101.   (save-excursion
  102.     (let (beg)
  103.       (if (not (looking-at "\\<"))
  104.       (forward-word -1))
  105.       (setq beg (point))
  106.       (forward-word 1)
  107.       (buffer-substring beg (point)))))
  108.  
  109. ;; The looking-back function used to exist in Emacs distribution, but
  110. ;; it disappeared in 18.52.
  111.  
  112. (defun looking-back (str)
  113.   "returns t if looking back reg-exp STR before point."
  114.   (and
  115.      (save-excursion (re-search-backward str nil t))
  116.      (= (point) (match-end 0))
  117.   )
  118. )
  119.