Skip to content

Commit c1957d5

Browse files
TREE37da-liii
authored andcommitted
[7_18] Changing language requires restarting the Mogan Editor
1 parent f415c5b commit c1957d5

File tree

8 files changed

+73
-4
lines changed

8 files changed

+73
-4
lines changed

TeXmacs/progs/texmacs/menus/preferences-menu.scm

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,24 @@
5151
"150" "200" "300" "400" "600" "800" "1200"
5252
*)))
5353

54+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
55+
;; Language settings and restart notifications
56+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57+
58+
(tm-define (set-language-and-notify lan)
59+
(let ((old (get-preference "language")))
60+
(if (== lan old)
61+
(set-preference "language" lan)
62+
(let ((msg "Requires restarting the Mogan Editor to take full effect. Restart now?"))
63+
(user-confirm msg #f
64+
(lambda (answ)
65+
(if answ
66+
(begin
67+
(set-preference "language" lan)
68+
(save-all-buffers)
69+
(restart-TeXmacs))
70+
(set-preference "language" old))))))))
71+
5472
(tm-define preferences-tree
5573
`((enum ("Look and feel" "look and feel")
5674
("Default" "default")
@@ -77,7 +95,7 @@
7795
("Documents in separate windows" "separate")
7896
("Multiple documents share window" "shared"))
7997
---
80-
(enum ("Language" "language")
98+
(enum ("Language" "language" set-language-and-notify)
8199
,@(map (lambda (lan) (list (language-to-language-name lan) lan))
82100
supported-languages))
83101
(-> "Keyboard"

TeXmacs/progs/texmacs/menus/preferences-widgets.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
(get-pretty-preference "look and feel")
8181
"18em"))
8282
(item (text "User interface language:")
83-
(enum (set-preference "language" (language-name-to-language answer))
83+
(enum (set-language-and-notify (language-name-to-language answer))
8484
(map language-to-language-name supported-languages)
8585
(language-to-language-name (get-preference "language"))
8686
"18em"))

TeXmacs/progs/texmacs/texmacs/tm-files.scm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,12 @@
376376
(autosave-all)
377377
(autosave-delayed))
378378

379+
(tm-define (save-all-buffers)
380+
(for-each (lambda (buf)
381+
(when (buffer-modified? buf)
382+
(buffer-save buf)))
383+
(buffer-list)))
384+
379385
(tm-define (autosave-delayed)
380386
(let* ((pref (get-preference "autosave"))
381387
(len (if (and (string? pref) (integer? (string->number pref)))

src/Scheme/Glue/glue_server.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,11 @@ function main()
346346
cpp_name = "quit",
347347
ret_type = "void"
348348
},
349+
{
350+
scm_name = "restart-TeXmacs",
351+
cpp_name = "restart",
352+
ret_type = "void"
353+
},
349354
}
350355
}
351356
end

src/System/Boot/init_texmacs.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ TeXmacs_main (int argc, char** argv) {
794794
{ // opening scope for server sv
795795
server sv;
796796
string where= "";
797+
bool first_file = true;
797798
for (i= 1; i < argc; i++) {
798799
if (argv[i] == NULL) break;
799800
string s= argv[i];
@@ -803,8 +804,15 @@ TeXmacs_main (int argc, char** argv) {
803804
url u= url_system (s);
804805
if (!is_rooted (u)) u= resolve (url_pwd (), "") * u;
805806
string b = scm_quote (as_string (u));
806-
string cmd= "(load-buffer " * b * " " * where * ")";
807-
where = " :new-window";
807+
string cmd;
808+
//only open window once
809+
if (first_file) {
810+
cmd = "(load-buffer " * b * " " * where * ")";
811+
first_file = false;
812+
}
813+
else {
814+
cmd = "(switch-to-buffer " * b * ")";
815+
}
808816
exec_delayed (scheme_cmd (cmd));
809817
}
810818
if ((s == "-c") || (s == "-convert")) i+= 2;

src/Texmacs/Server/tm_server.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
#include <moebius/drd/drd_std.hpp>
3434
#include <s7_tm.hpp>
3535

36+
#ifdef QTTEXMACS
37+
#include <QApplication>
38+
#include <QProcess>
39+
#include <QStringList>
40+
#endif
41+
3642
server* the_server = NULL;
3743
bool texmacs_started= false;
3844
bool headless_mode = false;
@@ -308,6 +314,30 @@ tm_server_rep::quit () {
308314
exit (0);
309315
}
310316

317+
void
318+
tm_server_rep::restart () {
319+
close_all_pipes ();
320+
call ("quit-TeXmacs-scheme");
321+
clear_pending_commands ();
322+
323+
#ifdef QTTEXMACS
324+
del_obj_qt_renderer ();
325+
array<url> buffers = get_all_buffers();
326+
QStringList args = QApplication::arguments();
327+
328+
if (!args.isEmpty()) args.removeFirst();
329+
330+
for (int i=0; i<N(buffers); i++) {
331+
string file_path = as_string(buffers[i]);
332+
args << to_qstring(file_path);
333+
}
334+
335+
QProcess::startDetached(QApplication::applicationFilePath(), args);
336+
#endif
337+
338+
_exit (0);
339+
}
340+
311341
/******************************************************************************
312342
* System commands
313343
******************************************************************************/

src/Texmacs/server.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class server_rep : public abstract_struct {
109109
virtual void typeset_update_all () = 0;
110110
virtual bool is_yes (string s) = 0;
111111
virtual void quit () = 0;
112+
virtual void restart () = 0;
112113
virtual void shell (string s) = 0;
113114
};
114115

src/Texmacs/tm_server.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class tm_server_rep : public tm_config_rep, public tm_frame_rep {
4646
void typeset_update_all ();
4747
bool is_yes (string s);
4848
void quit ();
49+
void restart ();
4950
void shell (string s);
5051
};
5152

0 commit comments

Comments
 (0)