

emacsを使っていると`(left + -7)`のような未評価のフレーム位置(?)を見かけます。（例えば、自分の環境では`emacs
-q`として起動した後、`*scratch*`で`(frame-parameters (window-frame (selected-
window)))`を評価すると、`... (top . 96) (left + -10)...`と出力されます。）

このような`left`値を連想リストの形でファイルに保存し、起動時に`read-from-string`で式を取り出して`set-frame-
position`で設定してやろうとすると`*Backtrace*`に次のようなエラーが出ます。

[code]

    Debugger entered--Lisp error: (wrong-type-argument integerp (+ -10))
      set-frame-position(#<frame emacs@xxx 0xyyyyyyy> (+ -10) 14)
    <略>
    
[/code]

得られた値を`eval`してやることで取り敢えずこのエラーを解決できたのですが、より良い方法（例えば、S式で設定を保存する場合のベストプラクティス、`frame-
parameters`の返す連想リストに未評価の値を含ませない等）があれば教えてください。


CC BY-SA 3.0
2016-06-30T13:13:01.777
27225
2016-08-13T13:57:17.063
13199
question
emacs elisp
emacsの未評価のフレーム位置について


frame-parameter の left は普通は

[code]

    (frame-parameter nil 'left)
    => 390
    
[/code]

のように整数で返されますが、frame が画面の左端よりも左に位置していると

[code]

    (frame-parameter nil 'left)
    => (+ -10)
    
[/code]

のように S 式で返すようです。

set-frame-position では left が負の場合は画面の右端からの指定になるためこのようになっているのでしょう。

<https://www.gnu.org/software/emacs/manual/html_node/elisp/Size-and-
Position.html#Size-and-Position>

> Function: set-frame-position frame left top  
>  This function sets the position of the top left corner of frame to left and
> top. These arguments are measured in pixels, and normally count from the top
> left corner of the screen.
>
> Negative parameter values position the bottom edge of the window up from the
> bottom edge of the screen, or the right window edge to the left of the right
> edge of the screen. It would probably be better if the values were always
> counted from the left and top, so that negative arguments would position the
> frame partly off the top or left edge of the screen, but it seems
> inadvisable to change that now.

現状の set-frame-position では左端よりも左に frame を配置することはできないようなので、その場合は 0
にすればよいのではないでしょうか。


CC BY-SA 3.0
2016-08-13T13:57:17.063
28237
2016-08-13T13:57:17.063
6148
27225
answer