diff options
| author | Karl Heuer | 1994-06-06 05:03:41 +0000 |
|---|---|---|
| committer | Karl Heuer | 1994-06-06 05:03:41 +0000 |
| commit | 078b36963847a632ded825b37db41bf1fbbb6bcd (patch) | |
| tree | c0fe5a8c1f349de04e4166bb5a5f7d2d8c1aa936 /src | |
| parent | 4c7d5f1318001326468daa74da971fe5c2941fbe (diff) | |
| download | emacs-078b36963847a632ded825b37db41bf1fbbb6bcd.tar.gz emacs-078b36963847a632ded825b37db41bf1fbbb6bcd.zip | |
(Fframe_or_buffer_changed_p): New function.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dispnew.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/dispnew.c b/src/dispnew.c index f5234b6fa67..29b2777fd20 100644 --- a/src/dispnew.c +++ b/src/dispnew.c | |||
| @@ -1858,6 +1858,59 @@ update_line (frame, vpos) | |||
| 1858 | current_frame->charstarts[vpos] = temp1; | 1858 | current_frame->charstarts[vpos] = temp1; |
| 1859 | } | 1859 | } |
| 1860 | 1860 | ||
| 1861 | /* A vector of size NFRAMES + 3 * NBUFFERS + 1, containing the session's | ||
| 1862 | frames, buffers, buffer-read-only flags, and buffer-modified-flags, | ||
| 1863 | and a trailing sentinel (so we don't need to add length checks). */ | ||
| 1864 | static Lisp_Object frame_and_buffer_state; | ||
| 1865 | |||
| 1866 | DEFUN ("frame-or-buffer-changed-p", Fframe_or_buffer_changed_p, | ||
| 1867 | Sframe_or_buffer_changed_p, 0, 0, 0, | ||
| 1868 | "Return non-nil if the frame and buffer state appears to have changed.\n\ | ||
| 1869 | The state variable is an internal vector containing all frames and buffers,\n\ | ||
| 1870 | along with the buffers' read-only and modified flags, which allows a fast\n\ | ||
| 1871 | check to see whether the menu bars might need to be recomputed.\n\ | ||
| 1872 | If this function returns non-nil, it updates the internal vector to reflect\n\ | ||
| 1873 | the current state.\n") | ||
| 1874 | () | ||
| 1875 | { | ||
| 1876 | Lisp_Object tail, frame, buf; | ||
| 1877 | Lisp_Object *vecp; | ||
| 1878 | int n; | ||
| 1879 | vecp = XVECTOR (frame_and_buffer_state)->contents; | ||
| 1880 | FOR_EACH_FRAME (tail, frame) | ||
| 1881 | if (!EQ (*vecp++, frame)) | ||
| 1882 | goto changed; | ||
| 1883 | for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr) | ||
| 1884 | { | ||
| 1885 | buf = XCONS (XCONS (tail)->car)->cdr; | ||
| 1886 | if (!EQ (*vecp++, buf)) | ||
| 1887 | goto changed; | ||
| 1888 | if (!EQ (*vecp++, XBUFFER (buf)->read_only)) | ||
| 1889 | goto changed; | ||
| 1890 | if (!EQ (*vecp++, Fbuffer_modified_p (buf))) | ||
| 1891 | goto changed; | ||
| 1892 | } | ||
| 1893 | return Qnil; | ||
| 1894 | changed: | ||
| 1895 | n = 1; | ||
| 1896 | FOR_EACH_FRAME (tail, frame) | ||
| 1897 | n++; | ||
| 1898 | for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr) | ||
| 1899 | n += 3; | ||
| 1900 | frame_and_buffer_state = Fmake_vector (make_number (n), Qlambda); | ||
| 1901 | vecp = XVECTOR (frame_and_buffer_state)->contents; | ||
| 1902 | FOR_EACH_FRAME (tail, frame) | ||
| 1903 | *vecp++ = frame; | ||
| 1904 | for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr) | ||
| 1905 | { | ||
| 1906 | buf = XCONS (XCONS (tail)->car)->cdr; | ||
| 1907 | *vecp++ = buf; | ||
| 1908 | *vecp++ = XBUFFER (buf)->read_only; | ||
| 1909 | *vecp++ = Fbuffer_modified_p (buf); | ||
| 1910 | } | ||
| 1911 | return Qt; | ||
| 1912 | } | ||
| 1913 | |||
| 1861 | DEFUN ("open-termscript", Fopen_termscript, Sopen_termscript, | 1914 | DEFUN ("open-termscript", Fopen_termscript, Sopen_termscript, |
| 1862 | 1, 1, "FOpen termscript file: ", | 1915 | 1, 1, "FOpen termscript file: ", |
| 1863 | "Start writing all terminal output to FILE as well as the terminal.\n\ | 1916 | "Start writing all terminal output to FILE as well as the terminal.\n\ |
| @@ -2395,12 +2448,16 @@ syms_of_display () | |||
| 2395 | defsubr (&Sredraw_frame); | 2448 | defsubr (&Sredraw_frame); |
| 2396 | #endif | 2449 | #endif |
| 2397 | defsubr (&Sredraw_display); | 2450 | defsubr (&Sredraw_display); |
| 2451 | defsubr (&Sframe_or_buffer_changed_p); | ||
| 2398 | defsubr (&Sopen_termscript); | 2452 | defsubr (&Sopen_termscript); |
| 2399 | defsubr (&Sding); | 2453 | defsubr (&Sding); |
| 2400 | defsubr (&Ssit_for); | 2454 | defsubr (&Ssit_for); |
| 2401 | defsubr (&Ssleep_for); | 2455 | defsubr (&Ssleep_for); |
| 2402 | defsubr (&Ssend_string_to_terminal); | 2456 | defsubr (&Ssend_string_to_terminal); |
| 2403 | 2457 | ||
| 2458 | frame_and_buffer_state = Fmake_vector (make_number (1), Qlambda); | ||
| 2459 | staticpro (&frame_and_buffer_state); | ||
| 2460 | |||
| 2404 | DEFVAR_INT ("baud-rate", &baud_rate, | 2461 | DEFVAR_INT ("baud-rate", &baud_rate, |
| 2405 | "The output baud rate of the terminal.\n\ | 2462 | "The output baud rate of the terminal.\n\ |
| 2406 | On most systems, changing this value will affect the amount of padding\n\ | 2463 | On most systems, changing this value will affect the amount of padding\n\ |