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.
- data/CHANGELOG +10 -0
- data/Manifest +5 -2
- data/README +3 -4
- data/examples/elisp_master/elisp_master.el +3 -4
- data/examples/elisp_master/ruby_slave +4 -1
- data/lib/relisp/elisp_functions.rb +38 -1
- data/lib/relisp/slaves.rb +74 -29
- data/lib/relisp/type_conversion/editing_types.rb +1178 -0
- data/lib/relisp/{programming_types.rb → type_conversion/programming_types.rb} +56 -11
- data/lib/relisp/type_conversion.rb +60 -0
- data/lib/relisp.rb +3 -4
- data/manual_test/tests.el +72 -0
- data/manual_test/tests.rb +66 -0
- data/src/relisp.el +91 -40
- data/src/relisp.elc +0 -0
- data/test/test_editing_types.rb +455 -14
- data/test/test_elisp_functions.rb +2 -0
- data/test/test_programming_types.rb +42 -20
- data/test/test_slaves.rb +7 -5
- metadata +7 -4
- data/lib/relisp/editing_types.rb +0 -295
@@ -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
|
+
|