relisp 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1178 @@
1
+ #--
2
+ # Copyright (C) 2009 <don@ohspite.net>
3
+ #
4
+ # This file is part of Relisp.
5
+ #
6
+ # Relisp is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Relisp is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #++
20
+ #
21
+ # See the documentation in <tt>programming_types.rb</tt>.
22
+ #
23
+ # Elisp editing types as described in the elisp info manual:
24
+ #
25
+ # Editing Types
26
+ #
27
+ # Buffer Type:: The basic object of editing.
28
+ # Marker Type:: A position in a buffer.
29
+ # Window Type:: Buffers are displayed in windows.
30
+ # Frame Type:: Windows subdivide frames.
31
+ # Window Configuration Type:: Recording the way a frame is subdivided.
32
+ # Frame Configuration Type:: Recording the status of all frames.
33
+ # Process Type:: A process running on the underlying OS.
34
+ # Stream Type:: Receive or send characters.
35
+ # Keymap Type:: What function a keystroke invokes.
36
+ # Overlay Type:: How an overlay is represented.
37
+ #
38
+ # There are currently no Relisp classes for frame configurations,
39
+ # streams, and keymaps. Frame configurations and keymaps are just
40
+ # +cons+ with a certain keyword in the +car+. Streams are markers,
41
+ # buffers, strings, and functions.
42
+ #
43
+ # Unlike with elisp programming data types, ruby does not translate
44
+ # the editing data types to an equivalent ruby object; instead, the
45
+ # class corresponding to each data type is just a proxy that acts on
46
+ # the original object in elisp.
47
+
48
+ module Relisp
49
+
50
+ # A proxy to an Emacs buffer.
51
+ #
52
+ class Buffer < Proxy
53
+
54
+ # _args_ can be any of these forms:
55
+ # * (_symbol_, <em>slave = Relisp.default_slave</em>)
56
+ # * (_string_, <em>slave = Relisp.default_slave</em>)
57
+ # * (<em>slave = Relisp.default_slave</em>)
58
+ #
59
+ # When a _symbol_ is given it is considered to be the name of a
60
+ # pre-existing bufer in the _slave_ process. Otherwise a new
61
+ # buffer is created (<tt>generate-new-buffer</tt>). The name is
62
+ # _string_, if given, and a variant of "relisp-buffer" otherwise.
63
+ #
64
+ def initialize(*args)
65
+ super do |args|
66
+ name = args[0] ? args[0] : "relisp-buffer"
67
+ raise ArgumentError unless name.kind_of?(String)
68
+ @slave.elisp_exec( "(setq #{@elisp_variable} (generate-new-buffer #{name.to_elisp}))" )
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def eval_in_buffer(code)
75
+ @slave.elisp_eval <<-EOM
76
+ (save-excursion
77
+ (set-buffer #{@elisp_variable})
78
+ #{code})
79
+ EOM
80
+ end
81
+
82
+ public
83
+
84
+ def set
85
+ @slave.set_buffer(@elisp_variable.value)
86
+ end
87
+
88
+ # Return the name of Buffer, as a string (<tt>buffer-name</tt>).
89
+ #
90
+ def name
91
+ call_on_self :buffer_name
92
+ end
93
+
94
+ # Change current buffer's name to _newname_ (a string). If
95
+ # _unique_ is nil, it is an error if a buffer named _newname_
96
+ # already exists. If _unique_ is non-nil, come up with a new name
97
+ # using <tt>generate-new-buffer-name'</tt>
98
+ # (<tt>rename-buffer</tt>).
99
+ #
100
+ def rename(newname, unique = false)
101
+ eval_in_buffer "(rename-buffer #{newname.to_elisp} #{unique.to_elisp})"
102
+ end
103
+
104
+ # Return name of file that the Buffer is visiting, or nil if none
105
+ # (<tt>buffer-file-name</tt>).
106
+ #
107
+ def filename
108
+ call_on_self :buffer_file_name
109
+ end
110
+
111
+ # Change name of file visited in the Buffer to _newname_. This
112
+ # also renames the buffer to correspond to the new file. The next
113
+ # time the buffer is saved it will go in the newly specified file.
114
+ # _newname_ nil or an empty string means mark buffer as not
115
+ # visiting any file.
116
+ #
117
+ # The optional <em>along_with_file</em>, if non-nil, means that
118
+ # the old visited file has been renamed to _newname_
119
+ # (<tt>set-visited-file-name</tt>).
120
+ #
121
+ def filename=(newname, along_with_file=false)
122
+ # the second argument here inhibits confirmation in the case
123
+ # where another buffer is already visiting _newname_.
124
+ eval_in_buffer "(set-visited-file-name #{newname.to_elisp} t #{along_with_file.to_elisp})"
125
+ end
126
+
127
+ def modified?
128
+ call_on_self :buffer_modified_p
129
+ end
130
+
131
+ def set_modified(flag=true)
132
+ eval_in_buffer "(set-buffer-modified-p #{flag.to_elisp})"
133
+ end
134
+
135
+ def modified=(flag)
136
+ set_modified(flag)
137
+ end
138
+
139
+ def modified_tick
140
+ call_on_self :buffer_modified_tick
141
+ end
142
+
143
+ def chars_modified_tick
144
+ call_on_self :buffer_chars_modified_tick
145
+ end
146
+
147
+ def read_only?
148
+ eval_in_buffer "buffer-read-only"
149
+ end
150
+
151
+ def read_only=(flag)
152
+ eval_in_buffer "(setq buffer-read-only #{flag.to_elisp})"
153
+ end
154
+
155
+ def bury
156
+ call_on_self :bury_buffer
157
+ if @slave.elisp_eval "(equal (current-buffer) #{self.to_elisp})"
158
+ @slave.elisp_exec "(switch-to-buffer (other-buffer))"
159
+ end
160
+ end
161
+
162
+ def kill
163
+ raise if modified?
164
+ call_on_self :kill_buffer
165
+ end
166
+
167
+ def kill!
168
+ set_modified(false)
169
+ kill
170
+ end
171
+
172
+ def alive?
173
+ call_on_self :buffer_live_p
174
+ end
175
+
176
+ # Save the buffer in its visited file, if it has been modified
177
+ # (<tt>save-buffer</tt>).
178
+ #
179
+ def save
180
+ raise "Attempt to save buffer with no filename." unless filename
181
+ eval_in_buffer "(with-output-to-string (save-buffer))"
182
+ end
183
+
184
+ def write(newfile)
185
+ eval_in_buffer "(with-output-to-string (write-file #{newfile.to_elisp}))"
186
+ end
187
+
188
+ def size
189
+ call_on_self :buffer_size
190
+ end
191
+
192
+ def substring(start_position, end_position)
193
+ eval_in_buffer "(buffer-substring #{start_position} #{end_position})"
194
+ end
195
+
196
+ def substring_no_properties(start_position, end_position)
197
+ eval_in_buffer "(buffer-substring-no-properties #{start_position} #{end_position})"
198
+ end
199
+
200
+ def to_s
201
+ eval_in_buffer "(buffer-string)"
202
+ end
203
+
204
+ def erase
205
+ eval_in_buffer "(erase-buffer)"
206
+ end
207
+
208
+ def window
209
+ call_on_self :get_buffer_window
210
+ end
211
+
212
+ def window=(new_window)
213
+ new_window.buffer = self
214
+ end
215
+
216
+ def windows
217
+ call_on_self :get_buffer_window_list
218
+ end
219
+
220
+ def insert(object)
221
+ eval_in_buffer "(insert #{object.to_elisp})"
222
+ end
223
+
224
+ alias print insert
225
+
226
+ def puts(object="")
227
+ line_number = @slave.line_number_at_pos
228
+ insert object
229
+ if line_number == @slave.line_number_at_pos
230
+ insert "\n"
231
+ end
232
+ end
233
+
234
+ def <<(object)
235
+ @slave.save_excursion do
236
+ set
237
+ @slave.elisp_eval "(goto-char (point-max))"
238
+ insert object
239
+ end
240
+ return self
241
+ end
242
+
243
+ def ==(buffer2)
244
+ @slave.elisp_eval "(equal #{to_elisp} #{buffer2.to_elisp})"
245
+ end
246
+
247
+ def method_missing(method, *args)
248
+ @slave.save_excursion do
249
+ set
250
+ @slave.send(method, *args)
251
+ end
252
+ end
253
+ end
254
+
255
+ # A proxy to an Emacs marker.
256
+ #
257
+ class Marker < Proxy
258
+
259
+ # _args_ can be any of these forms:
260
+ # * (_symbol_, <em>slave = Relisp.default_slave</em>)
261
+ # * (<em>slave = Relisp.default_slave</em>)
262
+ #
263
+ # When a _symbol_ is given it is considered to be the name of a
264
+ # pre-existing marker in the _slave_ process. Otherwise a new,
265
+ # empty marker is created (<tt>make-marker</tt>).
266
+ #
267
+ def initialize(*args)
268
+ super do
269
+ @slave.elisp_exec( "(setq #{@elisp_variable} (make-marker))" )
270
+ end
271
+ end
272
+
273
+ def position
274
+ call_on_self :marker_position
275
+ end
276
+
277
+ def buffer
278
+ call_on_self :marker_buffer
279
+ end
280
+
281
+ def insertion_type
282
+ call_on_self :marker_insertion_type
283
+ end
284
+
285
+ def insertion_type=(type)
286
+ @slave.elisp_eval( "(set-marker-insertion-type #{@elisp_variable} #{type.to_elisp})" )
287
+ end
288
+
289
+ def set(new_position, new_buffer=nil)
290
+ @slave.elisp_exec( "(set-marker #{@elisp_variable} #{new_position} #{new_buffer})" )
291
+ end
292
+
293
+ alias move set
294
+ alias position= set
295
+ end
296
+
297
+ # A proxy to an Emacs window
298
+ #
299
+ class Window < Proxy
300
+
301
+ # _args_ must be of the form (_symbol_, <em>slave =
302
+ # Relisp.default_slave</em>)
303
+ #
304
+ # The _symbol_ argument is considered to be the name of a
305
+ # pre-existing window in the _slave_ process.
306
+ #
307
+ def initialize(*args)
308
+ super do
309
+ raise ArgumentError, "Cannot create Window using 'new' method."
310
+ end
311
+ end
312
+
313
+ private
314
+
315
+ def eval_in_window(code)
316
+ @slave.elisp_eval <<-EOM
317
+ (with-selected-window #{@elisp_variable}
318
+ #{code})
319
+ EOM
320
+ end
321
+
322
+ public
323
+
324
+ def split(size=nil, horizontal=false)
325
+ call_on_self :split_window, size, horizontal
326
+ end
327
+
328
+ def split_horizontally(size=nil)
329
+ split(size, true)
330
+ end
331
+
332
+ def split_vertically(size=nil)
333
+ split(size, false)
334
+ end
335
+
336
+ def alive?
337
+ call_on_self :window_live_p
338
+ end
339
+
340
+ def delete
341
+ call_on_self :delete_window
342
+ end
343
+
344
+ def delete_others
345
+ call_on_self :delete_other_windows
346
+ end
347
+
348
+ def select
349
+ call_on_self :select_window
350
+ end
351
+
352
+ def buffer
353
+ call_on_self :window_buffer
354
+ end
355
+
356
+ def buffer=(new_buffer)
357
+ call_on_self :set_window_buffer, new_buffer
358
+ end
359
+
360
+ def dedicated
361
+ call_on_self :window_dedicated_p
362
+ end
363
+
364
+ def dedicated=(flag)
365
+ call_on_self :set_window_dedicated_p, flag
366
+ end
367
+
368
+ def point
369
+ call_on_self :window_point
370
+ end
371
+
372
+ def point=(position)
373
+ call_on_self :set_window_point, position
374
+ end
375
+
376
+ def start
377
+ # eval_in_window "(window-start)"
378
+ call_on_self :window_start
379
+ end
380
+
381
+ def start=(position)
382
+ call_on_self :set_window_start, position
383
+ end
384
+
385
+ def end
386
+ call_on_self :window_end
387
+ end
388
+
389
+ def visible?(position)
390
+ @slave.elisp_eval( "(pos-visible-in-window-p #{position.to_elisp} #{@elisp_variable})" )
391
+ end
392
+
393
+ def scroll_up(count=nil)
394
+ eval_in_window "(scroll-up #{count.to_elisp})"
395
+ end
396
+
397
+ def scroll_down(count=nil)
398
+ eval_in_window "(scroll-down #{count.to_elisp})"
399
+ end
400
+
401
+ def recenter(count=nil)
402
+ eval_in_window "(recenter #{count.to_elisp})"
403
+ end
404
+
405
+ def vscroll
406
+ call_on_self :window_vscroll
407
+ end
408
+
409
+ def vscroll_in_pixels
410
+ call_on_self :window_vscroll, true
411
+ end
412
+
413
+ def vscroll=(lines)
414
+ call_on_self :set_window_vscroll, lines
415
+ end
416
+
417
+ def vscroll_in_pixels=(pixels)
418
+ call_on_self :set_window_vscroll, pixels, true
419
+ end
420
+
421
+ def scroll_left(count=nil)
422
+ eval_in_window "(scroll-left #{count.to_elisp})"
423
+ end
424
+
425
+ def scroll_right(count=nil)
426
+ eval_in_window "(scroll-right #{count.to_elisp})"
427
+ end
428
+
429
+ def hscroll
430
+ call_on_self :window_hscroll
431
+ end
432
+
433
+ def hscroll=(columns)
434
+ call_on_self :set_window_hscroll, columns
435
+ end
436
+
437
+ def height
438
+ call_on_self :window_height
439
+ end
440
+
441
+ def body_height
442
+ call_on_self :window_body_height
443
+ end
444
+
445
+ def width
446
+ call_on_self :window_width
447
+ end
448
+
449
+ def edges
450
+ (call_on_self :window_edges).to_list
451
+ end
452
+
453
+ def inside_edges
454
+ (call_on_self :window_inside_edges).to_list
455
+ end
456
+
457
+ def pixel_edges
458
+ (call_on_self :window_pixel_edges).to_list
459
+ end
460
+
461
+ def inside_pixel_edges
462
+ (call_on_self :window_inside_pixel_edges).to_list
463
+ end
464
+
465
+ def enlarge(vertical, horizontal=0)
466
+ eval_in_window "(enlarge-window #{vertical.to_elisp})"
467
+ eval_in_window "(enlarge-window-horizontally #{horizontal.to_elisp})"
468
+ end
469
+
470
+ def shrink(vertical, horizontal=0)
471
+ eval_in_window "(shrink-window #{vertical.to_elisp})"
472
+ eval_in_window "(shrink-window-horizontally #{horizontal.to_elisp})"
473
+ end
474
+
475
+ def frame
476
+ call_on_self :window_frame
477
+ end
478
+
479
+ def ==(window2)
480
+ @slave.elisp_eval "(equal #{to_elisp} #{window2.to_elisp})"
481
+ end
482
+
483
+ end
484
+
485
+ # A proxy to an Emacs frame
486
+ #
487
+ class Frame < Proxy
488
+
489
+ # _args_ can be any of these forms:
490
+ # * (_symbol_, <em>slave = Relisp.default_slave</em>)
491
+ # * (<em>option_hash = {}</em>, <em>slave = Relisp.default_slave</em>)
492
+ # * (<em>slave = Relisp.default_slave</em>)
493
+ #
494
+ # When a _symbol_ is given it is considered to be the name of a
495
+ # pre-existing frame in the _slave_ process. Otherwise a new
496
+ # frame is created using any options in (<tt>new-frame</tt>).
497
+ #
498
+ # The _option_hash_ can specify the following
499
+ # [<tt>:name =></tt> _string_]
500
+ # The frame should be named _string_.
501
+ # [<tt>:width =></tt> _fixnum_]
502
+ # The frame should be _fixnum_ characters in width.
503
+ # [<tt>:height =></tt> _fixnum_]
504
+ # The frame should be _fixnum_ text lines high.
505
+ #
506
+ # You cannot specify either :width or :height, you must use neither or both.
507
+ #
508
+ # [<tt>:minibuffer => true</tt>]
509
+ # The frame should have a minibuffer.
510
+ # [<tt>:minibuffer => nil</tt>]
511
+ # The frame should have no minibuffer.
512
+ # [<tt>:minibuffer => :only</tt>]
513
+ # The frame should contain only a minibuffer.
514
+ # [<tt>:minibuffer =></tt> _window_]
515
+ # The frame should use _window_ as its minibuffer window.
516
+ #
517
+ # [<tt>:"window-system" => nil</tt>]
518
+ # The frame should be displayed on a terminal device.
519
+ # [<tt>:"window-system" => :x</tt>]
520
+ # The frame should be displayed in an X window.
521
+ # [<tt>:terminal =></tt> _id_]
522
+ # The frame should use the terminal identified by _id_.
523
+ #
524
+ def initialize(*args)
525
+ super do |args|
526
+ hash = args[0]
527
+ alist = ""
528
+ if hash && hash.size > 1
529
+ alist << "'("
530
+ hash.each_pair do |key, val|
531
+ val = if val.kind_of?(Symbol)
532
+ val.value.to_elisp
533
+ else
534
+ val.to_elisp
535
+ end
536
+ alist << "(#{key} . #{val.to_s}) "
537
+ end
538
+ alist << ")"
539
+ end
540
+
541
+ @slave.elisp_exec( "(setq #{@elisp_variable} (make-frame #{alist}))" )
542
+ end
543
+ end
544
+
545
+ def delete
546
+ call_on_self :delete_frame
547
+ end
548
+
549
+ def alive?
550
+ call_on_self :frame_live_p
551
+ end
552
+
553
+ def selected_window
554
+ call_on_self :frame_selected_window
555
+ end
556
+
557
+ def selected_window=(window)
558
+ call_on_self :set_frame_selected_window, window
559
+ end
560
+
561
+ def focus
562
+ call_on_self :select_frame_set_input_focus
563
+ end
564
+
565
+ def select
566
+ call_on_self :select_frame
567
+ end
568
+
569
+ def visible?
570
+ call_on_self :frame_visible_p
571
+ end
572
+
573
+ def show
574
+ call_on_self :make_frame_visible
575
+ end
576
+
577
+ def hide
578
+ call_on_self :make_frame_invisible
579
+ end
580
+
581
+ def iconify
582
+ call_on_self :inconify_frame
583
+ end
584
+
585
+ def raise
586
+ call_on_self :raise_frame
587
+ end
588
+
589
+ def lower
590
+ call_on_self :lower_frame
591
+ end
592
+
593
+ private
594
+
595
+ def get_parameter(parameter)
596
+ call_on_self :frame_parameter, parameter
597
+ end
598
+
599
+ def set_parameter(parameter, new_value)
600
+ alist = Cons.new(Cons.new(parameter, new_value), nil)
601
+ call_on_self :modify_frame_parameters, alist
602
+ end
603
+
604
+ public
605
+
606
+ ######### begin frame parameters
607
+
608
+ #
609
+ def display
610
+ get_parameter :display
611
+ end
612
+
613
+ def display=(new_value)
614
+ set_parameter :display, new_value
615
+ end
616
+
617
+ def display_type
618
+ get_parameter :display_type
619
+ end
620
+
621
+ def display_type=(new_value)
622
+ set_parameter :display_type, new_value
623
+ end
624
+
625
+ def title
626
+ get_parameter :title
627
+ end
628
+
629
+ def title=(new_value)
630
+ set_parameter :title, new_value
631
+ end
632
+
633
+ def name
634
+ get_parameter :name, new_value
635
+ end
636
+
637
+ def name=(new_value)
638
+ set_parameter :name, new_value
639
+ end
640
+
641
+ def left
642
+ get_parameter :left
643
+ end
644
+
645
+ def left=(new_value)
646
+ set_parameter :left, new_value
647
+ end
648
+
649
+ def top
650
+ get_parameter :top
651
+ end
652
+
653
+ def top=(new_value)
654
+ set_parameter :top, new_value
655
+ end
656
+
657
+ def height
658
+ get_parameter :height
659
+ end
660
+
661
+ def height=(new_value)
662
+ set_parameter :height, new_value
663
+ end
664
+
665
+ def width
666
+ get_parameter :width
667
+ end
668
+
669
+ def width=(new_value)
670
+ set_parameter :width, new_value
671
+ end
672
+
673
+ def fullscreen
674
+ get_parameter :fullscreen
675
+ end
676
+
677
+ def fullscreen=(new_value)
678
+ set_parameter :fullscreen, new_value
679
+ end
680
+
681
+ def border_width
682
+ get_parameter :border_width
683
+ end
684
+
685
+ def border_width=(new_value)
686
+ set_parameter :border_width, new_value
687
+ end
688
+
689
+ def internal_border_width
690
+ get_parameter :internal_border_width
691
+ end
692
+
693
+ def internal_border_width=(new_value)
694
+ set_parameter :internal_border_width, new_value
695
+ end
696
+
697
+ def vertical_scroll_bars
698
+ get_parameter :vertical_scroll_bars
699
+ end
700
+
701
+ def vertical_scroll_bars=(new_value)
702
+ set_parameter :vertical_scroll_bars, new_value
703
+ end
704
+
705
+ def scroll_bar_width
706
+ get_parameter :scroll_bar_width
707
+ end
708
+
709
+ def scroll_bar_width=(new_value)
710
+ set_parameter :scroll_bar_width, new_value
711
+ end
712
+
713
+ def left_fringe
714
+ get_parameter :left_fringe
715
+ end
716
+
717
+ def left_fringe=(new_value)
718
+ set_parameter :left_fringe, new_value
719
+ end
720
+
721
+ def right_fringe
722
+ get_parameter :right_fringe
723
+ end
724
+
725
+ def right_fringe=(new_value)
726
+ set_parameter :right_fringe, new_value
727
+ end
728
+
729
+ def menu_bar_lines
730
+ get_parameter :menu_bar_lines
731
+ end
732
+
733
+ def menu_bar_lines=(new_value)
734
+ set_parameter :menu_bar_lines, new_value
735
+ end
736
+
737
+ def tool_bar_lines
738
+ get_parameter :tool_bar_lines
739
+ end
740
+
741
+ def tool_bar_lines=(new_value)
742
+ set_parameter :tool_bar_lines, new_value
743
+ end
744
+
745
+ def line_spacing
746
+ get_parameter :line_spacing
747
+ end
748
+
749
+ def line_spacing=(new_value)
750
+ set_parameter :line_spacing, new_value
751
+ end
752
+
753
+ def minibuffer
754
+ get_parameter :minibuffer
755
+ end
756
+
757
+ def minibuffer=(new_value)
758
+ set_parameter :minibuffer, new_value
759
+ end
760
+
761
+ def unsplittable
762
+ get_parameter :unsplittable
763
+ end
764
+
765
+ def unsplittable=(new_value)
766
+ set_parameter :unsplittable, new_value
767
+ end
768
+
769
+ def visibility
770
+ get_parameter :visibility
771
+ end
772
+
773
+ def visibility=(new_value)
774
+ set_parameter :visibility, new_value
775
+ end
776
+
777
+ def auto_raise
778
+ get_parameter :auto_raise
779
+ end
780
+
781
+ def auto_raise=(new_value)
782
+ set_parameter :auto_raise, new_value
783
+ end
784
+
785
+ def auto_lower
786
+ get_parameter :auto_lower
787
+ end
788
+
789
+ def auto_lower=(new_value)
790
+ set_parameter :auto_lower, new_value
791
+ end
792
+
793
+ def icon_type
794
+ get_parameter :icon_type
795
+ end
796
+
797
+ def icon_type=(new_value)
798
+ set_parameter :icon_type, new_value
799
+ end
800
+
801
+ def icon_name
802
+ get_parameter :icon_name
803
+ end
804
+
805
+ def icon_name=(new_value)
806
+ set_parameter :icon_name, new_value
807
+ end
808
+
809
+ def window_id
810
+ get_parameter :window_id
811
+ end
812
+
813
+ def window_id=(new_value)
814
+ set_parameter :window_id, new_value
815
+ end
816
+
817
+ def outer_window_id
818
+ get_parameter :outer_window_id
819
+ end
820
+
821
+ def outer_window_id=(new_value)
822
+ set_parameter :outer_window_id, new_value
823
+ end
824
+
825
+ def wait_for_wm
826
+ get_parameter :wait_for_wm
827
+ end
828
+
829
+ def wait_for_wm=(new_value)
830
+ set_parameter :wait_for_wm, new_value
831
+ end
832
+
833
+ def cursor_type
834
+ get_parameter :cursor_type
835
+ end
836
+
837
+ def cursor_type=(new_value)
838
+ set_parameter :cursor_type, new_value
839
+ end
840
+
841
+ def background_mode
842
+ get_parameter :background_mode
843
+ end
844
+
845
+ def background_mode=(new_value)
846
+ set_parameter :background_mode, new_value
847
+ end
848
+
849
+ def tty_color_mode
850
+ get_parameter :tty_color_mode
851
+ end
852
+
853
+ def tty_color_mode=(new_value)
854
+ set_parameter :tty_color_mode, new_value
855
+ end
856
+
857
+ def screen_gamma
858
+ get_parameter :screen_gamma
859
+ end
860
+
861
+ def screen_gamma=(new_value)
862
+ set_parameter :screen_gamma, new_value
863
+ end
864
+
865
+ def font
866
+ get_parameter :font
867
+ end
868
+
869
+ def font=(new_value)
870
+ set_parameter :font, new_value
871
+ end
872
+
873
+ def foreground_color
874
+ get_parameter :foreground_color
875
+ end
876
+
877
+ def foreground_color=(new_value)
878
+ set_parameter :foreground_color, new_value
879
+ end
880
+
881
+ def background_color
882
+ get_parameter :background_color
883
+ end
884
+
885
+ def background_color=(new_value)
886
+ set_parameter :background_color, new_value
887
+ end
888
+
889
+ def mouse_color
890
+ get_parameter :mouse_color
891
+ end
892
+
893
+ def mouse_color=(new_value)
894
+ set_parameter :mouse_color, new_value
895
+ end
896
+
897
+ def cursor_color
898
+ get_parameter :cursor_color
899
+ end
900
+
901
+ def cursor_color=(new_value)
902
+ set_parameter :cursor_color, new_value
903
+ end
904
+
905
+ def border_color
906
+ get_parameter :border_color
907
+ end
908
+
909
+ def border_color=(new_value)
910
+ set_parameter :border_color, new_value
911
+ end
912
+
913
+ def scroll_bar_foreground
914
+ get_parameter :scroll_bar_foreground
915
+ end
916
+
917
+ def scroll_bar_foreground=(new_value)
918
+ set_parameter :scroll_bar_foreground, new_value
919
+ end
920
+
921
+ def scroll_bar_background
922
+ get_parameter :scroll_bar_background
923
+ end
924
+
925
+ def scroll_bar_background=(new_value)
926
+ set_parameter :scroll_bar_background, new_value
927
+ end
928
+
929
+ ######### end frame parameters
930
+
931
+ end
932
+
933
+ # A proxy to an Emacs window-configuration
934
+ #
935
+ class WindowConfiguration < Proxy
936
+
937
+ # _args_ must be of the form (_symbol_, <em>slave =
938
+ # Relisp.default_slave</em>)
939
+ #
940
+ # The _symbol_ argument is considered to be the name of a
941
+ # pre-existing window-configuration in the _slave_ process.
942
+ #
943
+ def initialize(*args)
944
+ super do
945
+ raise ArgumentError, "Cannot create WindowConfiguration using 'new' method."
946
+ end
947
+ end
948
+ end
949
+
950
+ # A proxy to an Emacs process
951
+ #
952
+ class Process < Proxy
953
+
954
+ # _args_ must be of the form (_symbol_, <em>slave =
955
+ # Relisp.default_slave</em>)
956
+ #
957
+ # The _symbol_ argument is considered to be the name of a
958
+ # pre-existing process in the _slave_ process.
959
+ #
960
+ def initialize(*args)
961
+ super do
962
+ raise ArgumentError, "Cannot create Process using 'new' method."
963
+ end
964
+ end
965
+
966
+ def name
967
+ call_on_self :process_name
968
+ end
969
+
970
+ def status
971
+ call_on_self :process_status
972
+ end
973
+
974
+ def exit_status
975
+ call_on_self :process_exit_status
976
+ end
977
+ end
978
+
979
+ # A proxy to an Emacs Overlay
980
+ #
981
+ class Overlay < Proxy
982
+
983
+ # _args_ can be any of these forms:
984
+ # * (_symbol_, <em>slave = Relisp.default_slave</em>)
985
+ # * (_start_, _end_, <em>buffer = nil</em>, <em>front_advance = nil</em>, <em>rear_advance = nil</em>, <em>slave = Relisp.default_slave</em>)
986
+ # * (_start_, _end_, <em>buffer = nil</em>, <em>slave = Relisp.default_slave</em>)
987
+ # * (_start_, _end_, <em>slave = Relisp.default_slave</em>)
988
+ #
989
+ # When a _symbol_ is given it is considered to be the name of a
990
+ # pre-existing overlay in the _slave_ process. Otherwise a new
991
+ # overlay is created (<tt>make-overlay</tt>).
992
+ #
993
+ def initialize(*args)
994
+ super do |args|
995
+ @slave.elisp_exec( "(setq #{@elisp_variable} (make-overlay #{args.join(' ')}))" )
996
+ end
997
+ end
998
+
999
+ def start
1000
+ call_on_self :overlay_start
1001
+ end
1002
+
1003
+ def end
1004
+ call_on_self :overlay_end
1005
+ end
1006
+
1007
+ def buffer
1008
+ call_on_self :overlay_buffer
1009
+ end
1010
+
1011
+ def delete
1012
+ call_on_self :delete_overlay
1013
+ end
1014
+
1015
+ def move(new_start, new_end, new_buffer = nil)
1016
+ call_on_self :move_overlay, new_start, new_end, new_buffer
1017
+ end
1018
+
1019
+ def start=(new_start)
1020
+ call_on_self :move_overlay, new_start, self.end
1021
+ end
1022
+
1023
+ def end=(new_end)
1024
+ call_on_self :move_overlay, self.start, new_end
1025
+ end
1026
+
1027
+ private
1028
+
1029
+ def get_property(property)
1030
+ call_on_self :overlay_get, property
1031
+ end
1032
+
1033
+ def set_property(property, new_value)
1034
+ call_on_self :overlay_put, property, new_value
1035
+ end
1036
+
1037
+ public
1038
+
1039
+ def priority
1040
+ get_property :priority
1041
+ end
1042
+
1043
+ def priority=(new_value)
1044
+ set_property :priority, new_value
1045
+ end
1046
+
1047
+ def window
1048
+ get_property :window
1049
+ end
1050
+
1051
+ def window=(new_value)
1052
+ set_property :window, new_value
1053
+ end
1054
+
1055
+ def category
1056
+ get_property :category
1057
+ end
1058
+
1059
+ def category=(new_value)
1060
+ set_property :category, new_value
1061
+ end
1062
+
1063
+ def face
1064
+ get_property :face
1065
+ end
1066
+
1067
+ def face=(new_value)
1068
+ set_property :face, new_value
1069
+ end
1070
+
1071
+ def mouse_face
1072
+ get_property :mouse_face
1073
+ end
1074
+
1075
+ def mouse_face=(new_value)
1076
+ set_property :mouse_face, new_value
1077
+ end
1078
+
1079
+ def display
1080
+ get_property :display
1081
+ end
1082
+
1083
+ def display=(new_value)
1084
+ set_property :display, new_value
1085
+ end
1086
+
1087
+ def help_echo
1088
+ get_property :help_echo
1089
+ end
1090
+
1091
+ def help_echo=(new_value)
1092
+ set_property :help_echo, new_value
1093
+ end
1094
+
1095
+ def modification_hooks
1096
+ get_property :help_echo
1097
+ end
1098
+
1099
+ def modification_hooks=(new_value)
1100
+ set_property :help_echo, new_value
1101
+ end
1102
+
1103
+ def insert_in_front_hooks
1104
+ get_property :insert_in_front_hooks
1105
+ end
1106
+
1107
+ def insert_in_front_hooks=(new_value)
1108
+ set_property :insert_in_front_hooks, new_value
1109
+ end
1110
+
1111
+ def insert_behind_hooks
1112
+ get_property :insert_behind_hooks
1113
+ end
1114
+
1115
+ def insert_behind_hooks=(new_value)
1116
+ set_property :insert_behind_hooks, new_value
1117
+ end
1118
+
1119
+ def invisible
1120
+ get_property :invisible
1121
+ end
1122
+
1123
+ def invisible=(new_value)
1124
+ set_property :invisible, new_value
1125
+ end
1126
+
1127
+ def intangible
1128
+ get_property :intangible
1129
+ end
1130
+
1131
+ def intangible=(new_value)
1132
+ set_property :intangible, new_value
1133
+ end
1134
+
1135
+ def before_string
1136
+ get_property :before_string
1137
+ end
1138
+
1139
+ def before_string=(new_value)
1140
+ set_property :before_string, new_value
1141
+ end
1142
+
1143
+ def after_string
1144
+ get_property :after_string
1145
+ end
1146
+
1147
+ def after_string=(new_value)
1148
+ set_property :after_string, new_value
1149
+ end
1150
+
1151
+ def evaporate
1152
+ get_property :evaporate
1153
+ end
1154
+
1155
+ def evaporate=(new_value)
1156
+ set_property :evaporate, new_value
1157
+ end
1158
+
1159
+ def local_map
1160
+ get_property :local_map
1161
+ end
1162
+
1163
+ def local_map=(new_value)
1164
+ set_property :local_map, new_value
1165
+ end
1166
+
1167
+ def keymap
1168
+ get_property :keymap
1169
+ end
1170
+
1171
+ def keymap=(new_value)
1172
+ set_property :keymap, new_value
1173
+ end
1174
+
1175
+ end
1176
+
1177
+ end
1178
+