diff src/editfns.c @ 16639:b6ba5d371c1c

(Fline_beginning_position, Fline_end_position): New fns. (Fuser_full_name): Accept an optional UID and return the full name of that user instead.
author Richard M. Stallman <rms@gnu.org>
date Sun, 08 Dec 1996 08:18:52 +0000
parents f34bfb5aa684
children 2103a88cc61f
line wrap: on
line diff
--- a/src/editfns.c	Sun Dec 08 07:37:55 1996 +0000
+++ b/src/editfns.c	Sun Dec 08 08:18:52 1996 +0000
@@ -252,7 +252,49 @@
 {
   return current_buffer->mark;
 }
+
+DEFUN ("line-beginning-position", Fline_beginning_position, Sline_beginning_position,
+  0, 1, 0,
+  "Return the character position of the first character on the current line.\n\
+With argument N not nil or 1, move forward N - 1 lines first.\n\
+If scan reaches end of buffer, return that position.\n\
+This function does not move point.")
+  (n)
+     Lisp_Object n;
+{
+  register int orig, end;
 
+  if (NILP (n))
+    XSETFASTINT (n, 1);
+  else
+    CHECK_NUMBER (n, 0);
+
+  orig = PT;
+  Fforward_line (make_number (XINT (n) - 1));
+  end = PT;
+  SET_PT (orig);
+
+  return make_number (end);
+}
+
+DEFUN ("line-end-position", Fline_end_position, Sline_end_position,
+  0, 1, 0,
+  "Return the character position of the last character on the current line.\n\
+With argument N not nil or 1, move forward N - 1 lines first.\n\
+If scan reaches end of buffer, return that position.\n\
+This function does not move point.")
+  (n)
+     Lisp_Object n;
+{
+  if (NILP (n))
+    XSETFASTINT (n, 1);
+  else
+    CHECK_NUMBER (n, 0);
+
+  return make_number (find_before_next_newline 
+		      (PT, 0, XINT (n) - (XINT (n) <= 0)));
+}
+
 Lisp_Object
 save_excursion_save ()
 {
@@ -541,11 +583,21 @@
   return make_number (getuid ());
 }
 
-DEFUN ("user-full-name", Fuser_full_name, Suser_full_name, 0, 0, 0,
-  "Return the full name of the user logged in, as a string.")
-  ()
+DEFUN ("user-full-name", Fuser_full_name, Suser_full_name, 0, 1, 0,
+  "Return the full name of the user logged in, as a string.\n\
+If optional argument UID is an integer, return the full name of the user\n\
+with that uid, or nil if there is no such user.")
+  (uid)
+     Lisp_Object uid;
 {
-  return Vuser_full_name;
+  struct passwd *pw;
+
+  if (NILP (uid))
+    return Vuser_full_name;
+
+  CHECK_NUMBER (uid, 0);
+  pw = (struct passwd *) getpwuid (XINT (uid));
+  return (pw ? build_string (pw->pw_gecos) : Qnil);
 }
 
 DEFUN ("system-name", Fsystem_name, Ssystem_name, 0, 0, 0,
@@ -2537,6 +2589,9 @@
   defsubr (&Spoint_min_marker);
   defsubr (&Spoint_max_marker);
 
+  defsubr (&Sline_beginning_position);
+  defsubr (&Sline_end_position);
+
   defsubr (&Sbobp);
   defsubr (&Seobp);
   defsubr (&Sbolp);