Merge from origin/emacs-29
39e0c60176
* lisp/tab-bar.el (tab-bar-format-align-right): Fix alignm...bf66b90b9a
Fix the width of margins for icons in outline-minor-mode (...2e4960d63d
; Change c-ts-mode--base-mode to c-ts-base-mode1aa1f8432b
Add new TypeScript mode tsx-ts-modead0563855f
Add case and match to python--treesit-keywords (bug#59720)16e68e64f9
; * lisp/progmodes/c-ts-mode.el: Change rx to regexp-opt.3bccef6f52
project-files (VC-aware): Make sure the VC backend is loaded03a40b974c
term--update-term-menu: Add the menu to term-terminal-menu368c7c7d8e
Improve detection of very long lines9c58ea37af
; Fix last change in proced.el0c1495574a
Add colors to Proced (bug#59407)91dba5b066
Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/e...70ecdebc92
; Fix typos (don't abbreviate "with" or "without")d94c5870c0
; * lisp/tab-bar.el (tab-bar-change-tab-group): Doc fix. # Conflicts: # etc/NEWS
This commit is contained in:
commit
3eb64d21f6
12 changed files with 466 additions and 124 deletions
|
@ -7124,6 +7124,12 @@ This is only valid for @code{image} icons, and can be either a number
|
|||
(which specifies the height in pixels), or the symbol @code{line},
|
||||
which will use the default line height in the currently selected
|
||||
window.
|
||||
|
||||
@item :width
|
||||
This is only valid for @code{image} icons, and can be either a number
|
||||
(which specifies the width in pixels), or the symbol @code{font},
|
||||
which will use the width in pixels of the current buffer’s default
|
||||
face font.
|
||||
@end table
|
||||
|
||||
@var{doc} should be a doc string.
|
||||
|
|
33
etc/NEWS.29
33
etc/NEWS.29
|
@ -2810,6 +2810,22 @@ Set it to nil to exclude line numbering from kills and copies.
|
|||
argument which allows tree-widget display to be activated and computed
|
||||
only when the user expands the node.
|
||||
|
||||
** Proced
|
||||
|
||||
---
|
||||
*** proced.el shows system processes of remote hosts.
|
||||
When 'default-directory' is remote, and 'proced' is invoked with a
|
||||
negative argument like 'C-u - proced', the system processes of that
|
||||
remote host are shown. Alternatively, the user option
|
||||
'proced-show-remote-processes' can be set to non-nil.
|
||||
'proced-signal-function' has been marked obsolete.
|
||||
|
||||
---
|
||||
*** Proced can now optionally show process details in color.
|
||||
New user option 'proced-enable-color-flag' enables coloring of Proced
|
||||
buffers. This option is disabled by default; customize it to a
|
||||
non-nil value to enable colors.
|
||||
|
||||
** Miscellaneous
|
||||
|
||||
---
|
||||
|
@ -2895,14 +2911,6 @@ also been renamed:
|
|||
'mark-bib' to 'bib-mark'
|
||||
'unread-bib' to 'bib-unread'
|
||||
|
||||
---
|
||||
*** proced.el shows system processes of remote hosts.
|
||||
When 'default-directory' is remote, and 'proced' is invoked with a
|
||||
negative argument like 'C-u - proced', the system processes of that
|
||||
remote host are shown. Alternatively, the user option
|
||||
'proced-show-remote-processes' can be set to non-nil.
|
||||
'proced-signal-function' has been marked obsolete.
|
||||
|
||||
---
|
||||
*** 'outlineify-sticky' command is renamed to 'allout-outlinify-sticky'.
|
||||
The old name is still available as an obsolete function alias.
|
||||
|
@ -2981,7 +2989,14 @@ when visiting JSON files.
|
|||
** New major mode 'typescript-ts-mode'.
|
||||
A major mode based on the tree-sitter library for editing programs
|
||||
in the TypeScript language. It includes support for font-locking,
|
||||
indentation, and navigation.
|
||||
indentation, and navigation. This mode will be auto-enabled for
|
||||
files with the '.ts' extension.
|
||||
|
||||
** New major mode 'tsx-ts-mode'.
|
||||
A major mode based on the tree-sitter library for editing programs
|
||||
in the TypeScript language, with support for TSX. It includes
|
||||
support for font-locking, indentation, and navigation. This mode
|
||||
will be auto-enabled for files with the '.tsx' extension.
|
||||
|
||||
** New major mode 'c-ts-mode'.
|
||||
A major mode based on the tree-sitter library for editing programs
|
||||
|
|
|
@ -202,6 +202,10 @@ present if the icon is represented by an image."
|
|||
(list :height (if (eq height 'line)
|
||||
(window-default-line-height)
|
||||
height)))
|
||||
(if-let ((width (plist-get keywords :width)))
|
||||
(list :width (if (eq width 'font)
|
||||
(default-font-width)
|
||||
width)))
|
||||
'(:scale 1)
|
||||
(if-let ((rotation (plist-get keywords :rotation)))
|
||||
(list :rotation rotation))
|
||||
|
|
|
@ -318,6 +318,12 @@ don't modify the buffer."
|
|||
(defvar-local outline--use-rtl nil
|
||||
"Non-nil when direction of clickable buttons is right-to-left.")
|
||||
|
||||
(defvar-local outline--margin-width nil
|
||||
"Current margin width.")
|
||||
|
||||
(defvar-local outline-margin-width nil
|
||||
"Default margin width.")
|
||||
|
||||
(define-icon outline-open nil
|
||||
'((image "outline-open.svg" "outline-open.pbm" :height (0.8 . em))
|
||||
(emoji "🔽")
|
||||
|
@ -344,24 +350,24 @@ don't modify the buffer."
|
|||
"Right-to-left icon used for buttons in closed outline sections."
|
||||
:version "29.1")
|
||||
|
||||
(define-icon outline-open-in-margins outline-open
|
||||
'((image "outline-open.svg" "outline-open.pbm" :height 10)
|
||||
(define-icon outline-open-in-margins nil
|
||||
'((image "outline-open.svg" "outline-open.pbm" :width font)
|
||||
(emoji "🔽")
|
||||
(symbol "▼")
|
||||
(text "v"))
|
||||
"Icon used for buttons for opened sections in margins."
|
||||
:version "29.1")
|
||||
|
||||
(define-icon outline-close-in-margins outline-close
|
||||
'((image "outline-open.svg" "outline-open.pbm" :height 10 :rotation -90)
|
||||
(define-icon outline-close-in-margins nil
|
||||
'((image "outline-open.svg" "outline-open.pbm" :width font :rotation -90)
|
||||
(emoji "▶️")
|
||||
(symbol "▶")
|
||||
(text ">"))
|
||||
"Icon used for buttons for closed sections in margins."
|
||||
:version "29.1")
|
||||
|
||||
(define-icon outline-close-rtl-in-margins outline-close-rtl
|
||||
'((image "outline-open.svg" "outline-open.pbm" :height 10 :rotation 90)
|
||||
(define-icon outline-close-rtl-in-margins nil
|
||||
'((image "outline-open.svg" "outline-open.pbm" :width font :rotation 90)
|
||||
(emoji "◀️")
|
||||
(symbol "◀")
|
||||
(text "<"))
|
||||
|
@ -528,9 +534,22 @@ See the command `outline-mode' for more information on this mode."
|
|||
(when (and (eq outline-minor-mode-use-buttons 'in-margins)
|
||||
(> 1 (if outline--use-rtl right-margin-width
|
||||
left-margin-width)))
|
||||
(setq outline--margin-width
|
||||
(or outline-margin-width
|
||||
(ceiling
|
||||
(/ (seq-max
|
||||
(seq-map #'string-pixel-width
|
||||
(seq-map #'icon-string
|
||||
`(outline-open-in-margins
|
||||
,(if outline--use-rtl
|
||||
'outline-close-rtl-in-margins
|
||||
'outline-close-in-margins)))))
|
||||
(* (default-font-width) 1.0)))))
|
||||
(if outline--use-rtl
|
||||
(setq-local right-margin-width (1+ right-margin-width))
|
||||
(setq-local left-margin-width (1+ left-margin-width)))
|
||||
(setq-local right-margin-width (+ right-margin-width
|
||||
outline--margin-width))
|
||||
(setq-local left-margin-width (+ left-margin-width
|
||||
outline--margin-width)))
|
||||
(setq-local fringes-outside-margins t)
|
||||
;; Force display of margins
|
||||
(when (eq (current-buffer) (window-buffer))
|
||||
|
@ -566,8 +585,10 @@ See the command `outline-mode' for more information on this mode."
|
|||
(< 0 (if outline--use-rtl right-margin-width
|
||||
left-margin-width)))
|
||||
(if outline--use-rtl
|
||||
(setq-local right-margin-width (1- right-margin-width))
|
||||
(setq-local left-margin-width (1- left-margin-width)))
|
||||
(setq-local right-margin-width (- right-margin-width
|
||||
outline--margin-width))
|
||||
(setq-local left-margin-width (- left-margin-width
|
||||
outline--margin-width)))
|
||||
(setq-local fringes-outside-margins nil)
|
||||
;; Force removal of margins
|
||||
(when (eq (current-buffer) (window-buffer))
|
||||
|
|
302
lisp/proced.el
302
lisp/proced.el
|
@ -114,41 +114,58 @@ the external command (usually \"kill\")."
|
|||
(defcustom proced-grammar-alist
|
||||
'( ;; attributes defined in `process-attributes'
|
||||
(euid "EUID" "%d" right proced-< nil (euid pid) (nil t nil))
|
||||
(user "User" nil left proced-string-lessp nil (user pid) (nil t nil))
|
||||
(user "User" proced-format-user left proced-string-lessp nil
|
||||
(user pid) (nil t nil))
|
||||
(egid "EGID" "%d" right proced-< nil (egid euid pid) (nil t nil))
|
||||
(group "Group" nil left proced-string-lessp nil (group user pid) (nil t nil))
|
||||
(group "Group" nil left proced-string-lessp nil (group user pid)
|
||||
(nil t nil))
|
||||
(comm "Command" nil left proced-string-lessp nil (comm pid) (nil t nil))
|
||||
(state "Stat" nil left proced-string-lessp nil (state pid) (nil t nil))
|
||||
(ppid "PPID" "%d" right proced-< nil (ppid pid)
|
||||
((lambda (ppid) (proced-filter-parents proced-process-alist ppid))
|
||||
"refine to process parents"))
|
||||
(pgrp "PGrp" "%d" right proced-< nil (pgrp euid pid) (nil t nil))
|
||||
(sess "Sess" "%d" right proced-< nil (sess pid) (nil t nil))
|
||||
(ttname "TTY" proced-format-ttname left proced-string-lessp nil (ttname pid) (nil t nil))
|
||||
(state "Stat" proced-format-state left proced-string-lessp nil
|
||||
(state pid) (nil t nil))
|
||||
(ppid "PPID" proced-format-ppid right proced-< nil (ppid pid)
|
||||
((lambda (ppid)
|
||||
(proced-filter-parents proced-process-alist ppid))
|
||||
"refine to process parents"))
|
||||
(pgrp "PGrp" proced-format-pgrp right proced-< nil (pgrp euid pid)
|
||||
(nil t nil))
|
||||
(sess "Sess" proced-format-sess right proced-< nil (sess pid)
|
||||
(nil t nil))
|
||||
(ttname "TTY" proced-format-ttname left proced-string-lessp nil
|
||||
(ttname pid) (nil t nil))
|
||||
(tpgid "TPGID" "%d" right proced-< nil (tpgid pid) (nil t nil))
|
||||
(minflt "MinFlt" "%d" right proced-< nil (minflt pid) (nil t t))
|
||||
(majflt "MajFlt" "%d" right proced-< nil (majflt pid) (nil t t))
|
||||
(cminflt "CMinFlt" "%d" right proced-< nil (cminflt pid) (nil t t))
|
||||
(cmajflt "CMajFlt" "%d" right proced-< nil (cmajflt pid) (nil t t))
|
||||
(utime "UTime" proced-format-time right proced-time-lessp t (utime pid) (nil t t))
|
||||
(stime "STime" proced-format-time right proced-time-lessp t (stime pid) (nil t t))
|
||||
(time "Time" proced-format-time right proced-time-lessp t (time pid) (nil t t))
|
||||
(cutime "CUTime" proced-format-time right proced-time-lessp t (cutime pid) (nil t t))
|
||||
(cstime "CSTime" proced-format-time right proced-time-lessp t (cstime pid) (nil t t))
|
||||
(ctime "CTime" proced-format-time right proced-time-lessp t (ctime pid) (nil t t))
|
||||
(utime "UTime" proced-format-time right proced-time-lessp t (utime pid)
|
||||
(nil t t))
|
||||
(stime "STime" proced-format-time right proced-time-lessp t (stime pid)
|
||||
(nil t t))
|
||||
(time "Time" proced-format-time right proced-time-lessp t (time pid)
|
||||
(nil t t))
|
||||
(cutime "CUTime" proced-format-time right proced-time-lessp t (cutime pid)
|
||||
(nil t t))
|
||||
(cstime "CSTime" proced-format-time right proced-time-lessp t (cstime pid)
|
||||
(nil t t))
|
||||
(ctime "CTime" proced-format-time right proced-time-lessp t (ctime pid)
|
||||
(nil t t))
|
||||
(pri "Pr" "%d" right proced-< t (pri pid) (nil t t))
|
||||
(nice "Ni" "%3d" 3 proced-< t (nice pid) (t t nil))
|
||||
(thcount "THCount" "%d" right proced-< t (thcount pid) (nil t t))
|
||||
(start "Start" proced-format-start 6 proced-time-lessp nil (start pid) (t t nil))
|
||||
(vsize "VSize" proced-format-memory right proced-< t (vsize pid) (nil t t))
|
||||
(rss "RSS" proced-format-memory right proced-< t (rss pid) (nil t t))
|
||||
(etime "ETime" proced-format-time right proced-time-lessp t (etime pid) (nil t t))
|
||||
(pcpu "%CPU" "%.1f" right proced-< t (pcpu pid) (nil t t))
|
||||
(pmem "%Mem" "%.1f" right proced-< t (pmem pid) (nil t t))
|
||||
(args "Args" proced-format-args left proced-string-lessp nil (args pid) (nil t nil))
|
||||
(start "Start" proced-format-start 6 proced-time-lessp nil (start pid)
|
||||
(t t nil))
|
||||
(vsize "VSize" proced-format-memory right proced-< t (vsize pid)
|
||||
(nil t t))
|
||||
(rss "RSS" proced-format-rss right proced-< t (rss pid) (nil t t))
|
||||
(etime "ETime" proced-format-time right proced-time-lessp t (etime pid)
|
||||
(nil t t))
|
||||
(pcpu "%CPU" proced-format-cpu right proced-< t (pcpu pid) (nil t t))
|
||||
(pmem "%Mem" proced-format-mem right proced-< t (pmem pid) (nil t t))
|
||||
(args "Args" proced-format-args left proced-string-lessp nil
|
||||
(args pid) (nil t nil))
|
||||
;;
|
||||
;; attributes defined by proced (see `proced-process-attributes')
|
||||
(pid "PID" "%d" right proced-< nil (pid)
|
||||
(pid "PID" proced-format-pid right proced-< nil (pid)
|
||||
((lambda (ppid) (proced-filter-children proced-process-alist ppid))
|
||||
"refine to process children"))
|
||||
;; process tree
|
||||
|
@ -367,6 +384,32 @@ May be used to revert the process listing."
|
|||
:type 'hook
|
||||
:options '(proced-revert))
|
||||
|
||||
(defcustom proced-enable-color-flag nil
|
||||
"Non-nil means Proced should display some process attributes with color."
|
||||
:type 'boolean
|
||||
:version "29.1")
|
||||
|
||||
(defcustom proced-low-memory-usage-threshold 0.1
|
||||
"The upper bound for low relative memory usage display in Proced.
|
||||
|
||||
When `proced-enable-color-flag' is non-nil, RSS values denoting a
|
||||
proportion of memory, relative to total memory, that is lower
|
||||
than this value will be displayed using the `proced-memory-low-usage' face."
|
||||
:type 'float
|
||||
:version "29.1")
|
||||
|
||||
(defcustom proced-medium-memory-usage-threshold 0.5
|
||||
"The upper bound for medium relative memory usage display in Proced.
|
||||
|
||||
When `proced-enable-color-flag' is non-nil, RSS values denoting a
|
||||
proportion of memory, relative to total memory, that is less than
|
||||
this value, but greater than `proced-low-memory-usage-threshold',
|
||||
will be displayed using the `proced-memory-medium-usage' face.
|
||||
RSS values denoting a greater proportion than this value will be
|
||||
displayed using the `proced-memory-high-usage' face."
|
||||
:type 'float
|
||||
:version "29.1")
|
||||
|
||||
;; Internal variables
|
||||
|
||||
(defvar proced-available t;(not (null (list-system-processes)))
|
||||
|
@ -403,6 +446,114 @@ It is a list of lists (KEY PREDICATE REVERSE).")
|
|||
'((t (:inherit font-lock-keyword-face)))
|
||||
"Face used for header of attribute used for sorting.")
|
||||
|
||||
(defface proced-run-status-code
|
||||
'((t (:foreground "green")))
|
||||
"Face used in Proced buffers for running or runnable status code character \"R\"."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-interruptible-sleep-status-code
|
||||
'((((class color) (min-colors 88)) (:foreground "DimGrey"))
|
||||
(t (:italic t)))
|
||||
"Face used in Proced buffers for interruptible sleep status code character \"S\"."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-uninterruptible-sleep-status-code
|
||||
'((((class color)) (:foreground "red"))
|
||||
(t (:bold t)))
|
||||
"Face used in Proced buffers for uninterruptible sleep status code character \"D\"."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-executable
|
||||
'((((class color) (min-colors 88) (background dark)) (:foreground "DeepSkyBlue"))
|
||||
(((class color) (background dark)) (:foreground "cyan"))
|
||||
(((class color) (background light)) (:foreground "blue"))
|
||||
(t (:bold t)))
|
||||
"Face used in Proced buffers for executable names.
|
||||
The first word in the process arguments attribute is assumed to
|
||||
be the executable that runs in the process."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-memory-high-usage
|
||||
'((((class color) (min-colors 88) (background dark)) (:foreground "orange"))
|
||||
(((class color) (min-colors 88) (background light)) (:foreground "OrangeRed"))
|
||||
(((class color)) (:foreground "red"))
|
||||
(t (:underline t)))
|
||||
"Face used in Proced buffers for high memory usage."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-memory-medium-usage
|
||||
'((((class color) (min-colors 88) (background dark)) (:foreground "yellow3"))
|
||||
(((class color) (min-colors 88) (background light)) (:foreground "orange"))
|
||||
(((class color)) (:foreground "yellow")))
|
||||
"Face used in Proced buffers for medium memory usage."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-memory-low-usage
|
||||
'((((class color) (min-colors 88) (background dark)) (:foreground "#8bcd50"))
|
||||
(((class color)) (:foreground "green")))
|
||||
"Face used in Proced buffers for low memory usage."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-emacs-pid
|
||||
'((((class color) (min-colors 88)) (:foreground "purple"))
|
||||
(((class color)) (:foreground "magenta")))
|
||||
"Face used in Proced buffers for the process ID of the current Emacs process."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-pid
|
||||
'((((class color) (min-colors 88)) (:foreground "#5085ef"))
|
||||
(((class color)) (:foreground "blue")))
|
||||
"Face used in Proced buffers for process IDs."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-session-leader-pid
|
||||
'((((class color) (min-colors 88)) (:foreground "#5085ef" :underline t))
|
||||
(((class color)) (:foreground "blue" :underline t))
|
||||
(t (:underline t)))
|
||||
"Face used in Proced buffers for process IDs which are session leaders."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-ppid
|
||||
'((((class color) (min-colors 88)) (:foreground "#5085bf"))
|
||||
(((class color)) (:foreground "blue")))
|
||||
"Face used in Proced buffers for parent process IDs."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-pgrp
|
||||
'((((class color) (min-colors 88)) (:foreground "#4785bf"))
|
||||
(((class color)) (:foreground "blue")))
|
||||
"Face used in Proced buffers for process group IDs."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-sess
|
||||
'((((class color) (min-colors 88)) (:foreground "#41729f"))
|
||||
(((class color)) (:foreground "MidnightBlue")))
|
||||
"Face used in Proced buffers for process session IDs."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-cpu
|
||||
'((((class color) (min-colors 88)) (:foreground "#6d5cc3" :bold t))
|
||||
(t (:bold t)))
|
||||
"Face used in Proced buffers for process CPU utilization."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-mem
|
||||
'((((class color) (min-colors 88))
|
||||
(:foreground "#6d5cc3")))
|
||||
"Face used in Proced buffers for process memory utilization."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-user
|
||||
'((t (:bold t)))
|
||||
"Face used in Proced buffers for the user owning the process."
|
||||
:version "29.1")
|
||||
|
||||
(defface proced-time-colon
|
||||
'((((class color) (min-colors 88)) (:foreground "DarkMagenta"))
|
||||
(t (:bold t)))
|
||||
"Face used in Proced buffers for the colon in time strings."
|
||||
:version "29.1")
|
||||
|
||||
(defvar proced-re-mark "^[^ \n]"
|
||||
"Regexp matching a marked line.
|
||||
Important: the match ends just after the marker.")
|
||||
|
@ -1392,26 +1543,32 @@ Prefix ARG controls sort order, see `proced-sort-interactive'."
|
|||
(hours (truncate ftime 3600))
|
||||
(ftime (mod ftime 3600))
|
||||
(minutes (truncate ftime 60))
|
||||
(seconds (mod ftime 60)))
|
||||
(seconds (mod ftime 60))
|
||||
(colon (if proced-enable-color-flag
|
||||
(propertize ":" 'font-lock-face 'proced-time-colon)
|
||||
":")))
|
||||
(cond ((< 0 days)
|
||||
(format "%d-%02d:%02d:%02d" days hours minutes seconds))
|
||||
(format "%d-%02d%s%02d%s%02d" days hours colon minutes colon seconds))
|
||||
((< 0 hours)
|
||||
(format "%02d:%02d:%02d" hours minutes seconds))
|
||||
(format "%02d%s%02d%s%02d" hours colon minutes colon seconds))
|
||||
(t
|
||||
(format "%02d:%02d" minutes seconds)))))
|
||||
(format "%02d%s%02d" minutes colon seconds)))))
|
||||
|
||||
(defun proced-format-start (start)
|
||||
"Format time START.
|
||||
The return string is always 6 characters wide."
|
||||
(let ((d-start (decode-time start))
|
||||
(d-current (decode-time)))
|
||||
(d-current (decode-time))
|
||||
(colon (if proced-enable-color-flag
|
||||
(propertize ":" 'font-lock-face 'proced-time-colon)
|
||||
":")))
|
||||
(cond (;; process started in previous years
|
||||
(< (decoded-time-year d-start) (decoded-time-year d-current))
|
||||
(format-time-string " %Y" start))
|
||||
;; process started today
|
||||
((and (= (decoded-time-day d-start) (decoded-time-day d-current))
|
||||
(= (decoded-time-month d-start) (decoded-time-month d-current)))
|
||||
(format-time-string " %H:%M" start))
|
||||
(string-replace ":" colon (format-time-string " %H:%M" start)))
|
||||
(t ;; process started this year
|
||||
(format-time-string "%b %e" start)))))
|
||||
|
||||
|
@ -1429,12 +1586,97 @@ The return string is always 6 characters wide."
|
|||
(defun proced-format-args (args)
|
||||
"Format attribute ARGS.
|
||||
Replace newline characters by \"^J\" (two characters)."
|
||||
(string-replace "\n" "^J" args))
|
||||
(string-replace "\n" "^J"
|
||||
(pcase-let* ((`(,exe . ,rest) (split-string args))
|
||||
(exe-prop (if proced-enable-color-flag
|
||||
(propertize exe 'font-lock-face 'proced-executable)
|
||||
exe)))
|
||||
(mapconcat #'identity (cons exe-prop rest) " "))))
|
||||
|
||||
(defun proced-format-memory (kilobytes)
|
||||
"Format KILOBYTES in a human readable format."
|
||||
(funcall byte-count-to-string-function (* 1024 kilobytes)))
|
||||
|
||||
(defun proced-format-rss (kilobytes)
|
||||
"Format RSS KILOBYTES in a human readable format."
|
||||
(let ((formatted (proced-format-memory kilobytes)))
|
||||
(if-let* ((proced-enable-color-flag)
|
||||
(total (car (memory-info)))
|
||||
(proportion (/ (float kilobytes) total)))
|
||||
(cond ((< proportion proced-low-memory-usage-threshold)
|
||||
(propertize formatted 'font-lock-face 'proced-memory-low-usage))
|
||||
((< proportion proced-medium-memory-usage-threshold)
|
||||
(propertize formatted 'font-lock-face 'proced-memory-medium-usage))
|
||||
(t (propertize formatted 'font-lock-face 'proced-memory-high-usage)))
|
||||
formatted)))
|
||||
|
||||
(defun proced-format-state (state)
|
||||
"Format STATE."
|
||||
(cond ((and proced-enable-color-flag (string= state "R"))
|
||||
(propertize state 'font-lock-face 'proced-run-status-code))
|
||||
((and proced-enable-color-flag (string= state "S"))
|
||||
(propertize state 'font-lock-face 'proced-interruptible-sleep-status-code))
|
||||
((and proced-enable-color-flag (string= state "D"))
|
||||
(propertize state 'font-lock-face 'proced-uninterruptible-sleep-status-code))
|
||||
(t state)))
|
||||
|
||||
(defun proced-format-pid (pid)
|
||||
"Format PID."
|
||||
(let ((proc-info (process-attributes pid))
|
||||
(pid-s (number-to-string pid)))
|
||||
(cond ((and proced-enable-color-flag
|
||||
(not (file-remote-p default-directory))
|
||||
(equal pid (emacs-pid)))
|
||||
(propertize pid-s 'font-lock-face 'proced-emacs-pid))
|
||||
((and proced-enable-color-flag (equal pid (alist-get 'sess proc-info)))
|
||||
(propertize pid-s 'font-lock-face 'proced-session-leader-pid))
|
||||
(proced-enable-color-flag
|
||||
(propertize pid-s 'font-lock-face 'proced-pid))
|
||||
(t pid-s))))
|
||||
|
||||
(defun proced-format-ppid (ppid)
|
||||
"Format PPID."
|
||||
(let ((ppid-s (number-to-string ppid)))
|
||||
(cond ((and proced-enable-color-flag
|
||||
(not (file-remote-p default-directory))
|
||||
(= ppid (emacs-pid)))
|
||||
(propertize ppid-s 'font-lock-face 'proced-emacs-pid))
|
||||
(proced-enable-color-flag
|
||||
(propertize ppid-s 'font-lock-face 'proced-ppid))
|
||||
(t ppid-s))))
|
||||
|
||||
(defun proced-format-pgrp (pgrp)
|
||||
"Format PGRP."
|
||||
(if proced-enable-color-flag
|
||||
(propertize (number-to-string pgrp) 'font-lock-face 'proced-pgrp)
|
||||
(number-to-string pgrp)))
|
||||
|
||||
(defun proced-format-sess (sess)
|
||||
"Format SESS."
|
||||
(if proced-enable-color-flag
|
||||
(propertize (number-to-string sess) 'font-lock-face 'proced-sess)
|
||||
(number-to-string sess)))
|
||||
|
||||
(defun proced-format-cpu (cpu)
|
||||
"Format CPU."
|
||||
(let ((formatted (format "%.1f" cpu)))
|
||||
(if proced-enable-color-flag
|
||||
(propertize formatted 'font-lock-face 'proced-cpu)
|
||||
formatted)))
|
||||
|
||||
(defun proced-format-mem (mem)
|
||||
"Format MEM."
|
||||
(let ((formatted (format "%.1f" mem)))
|
||||
(if proced-enable-color-flag
|
||||
(propertize formatted 'font-lock-face 'proced-mem)
|
||||
formatted)))
|
||||
|
||||
(defun proced-format-user (user)
|
||||
"Format USER."
|
||||
(if proced-enable-color-flag
|
||||
(propertize user 'font-lock-face 'proced-user)
|
||||
user))
|
||||
|
||||
(defun proced-format (process-alist format)
|
||||
"Display PROCESS-ALIST using FORMAT."
|
||||
(if (symbolp format)
|
||||
|
|
|
@ -519,17 +519,17 @@ the subtrees."
|
|||
(forward-line 1)))))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode c-ts-mode--base-mode prog-mode "C"
|
||||
(define-derived-mode c-ts-base-mode prog-mode "C"
|
||||
"Major mode for editing C, powered by tree-sitter."
|
||||
:syntax-table c-ts-mode--syntax-table
|
||||
|
||||
;; Navigation.
|
||||
(setq-local treesit-defun-type-regexp
|
||||
(rx (or "function_definition"
|
||||
"type_definition"
|
||||
"struct_specifier"
|
||||
"enum_specifier"
|
||||
"union_specifier")))
|
||||
(regexp-opt '("function_definition"
|
||||
"type_definition"
|
||||
"struct_specifier"
|
||||
"enum_specifier"
|
||||
"union_specifier")))
|
||||
|
||||
;; Nodes like struct/enum/union_specifier can appear in
|
||||
;; function_definitions, so we need to find the top-level node.
|
||||
|
@ -554,7 +554,7 @@ the subtrees."
|
|||
( bracket delimiter error function operator variable))))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode c-ts-mode c-ts-mode--base-mode "C"
|
||||
(define-derived-mode c-ts-mode c-ts-base-mode "C"
|
||||
"Major mode for editing C, powered by tree-sitter."
|
||||
:group 'c
|
||||
|
||||
|
@ -586,7 +586,7 @@ the subtrees."
|
|||
(setq-local end-of-defun-function #'c-ts-mode--end-of-defun))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode c++-ts-mode c-ts-mode--base-mode "C++"
|
||||
(define-derived-mode c++-ts-mode c-ts-base-mode "C++"
|
||||
"Major mode for editing C++, powered by tree-sitter."
|
||||
:group 'c++
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
|
||||
;; Version: 0.9.0
|
||||
;; Version: 0.9.1
|
||||
;; Package-Requires: ((emacs "26.1") (xref "1.4.0"))
|
||||
|
||||
;; This is a GNU ELPA :core package. Avoid using functionality that
|
||||
|
@ -583,9 +583,10 @@ project backend implementation of `project-external-roots'.")
|
|||
(mapcan
|
||||
(lambda (dir)
|
||||
(let ((ignores project-vc-ignores)
|
||||
backend)
|
||||
(backend (cadr project)))
|
||||
(when backend
|
||||
(require (intern (concat "vc-" (downcase (symbol-name backend))))))
|
||||
(if (and (file-equal-p dir (nth 2 project))
|
||||
(setq backend (cadr project))
|
||||
(cond
|
||||
((eq backend 'Hg))
|
||||
((and (eq backend 'Git)
|
||||
|
|
|
@ -967,9 +967,9 @@ It makes underscores and dots word constituent chars.")
|
|||
;; merge with `python-font-lock-keywords-level-2'.
|
||||
|
||||
(defvar python--treesit-keywords
|
||||
'("as" "assert" "async" "await" "break" "class" "continue" "def"
|
||||
'("as" "assert" "async" "await" "break" "case" "class" "continue" "def"
|
||||
"del" "elif" "else" "except" "exec" "finally" "for" "from"
|
||||
"global" "if" "import" "lambda" "nonlocal" "pass" "print"
|
||||
"global" "if" "import" "lambda" "match" "nonlocal" "pass" "print"
|
||||
"raise" "return" "try" "while" "with" "yield"
|
||||
;; These are technically operators, but we fontify them as
|
||||
;; keywords.
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'treesit)
|
||||
|
@ -56,8 +60,10 @@
|
|||
table)
|
||||
"Syntax table for `typescript-ts-mode'.")
|
||||
|
||||
(defvar typescript-ts-mode--indent-rules
|
||||
`((tsx
|
||||
(defun typescript-ts-mode--indent-rules (language)
|
||||
"Rules used for indentation.
|
||||
Argument LANGUAGE is either `typescript' or `tsx'."
|
||||
`((,language
|
||||
((parent-is "program") parent-bol 0)
|
||||
((node-is "}") parent-bol 0)
|
||||
((node-is ")") parent-bol 0)
|
||||
|
@ -82,14 +88,13 @@
|
|||
((parent-is "arrow_function") parent-bol typescript-ts-mode-indent-offset)
|
||||
((parent-is "parenthesized_expression") parent-bol typescript-ts-mode-indent-offset)
|
||||
|
||||
;; TSX
|
||||
((parent-is "jsx_opening_element") parent typescript-ts-mode-indent-offset)
|
||||
((node-is "jsx_closing_element") parent 0)
|
||||
((parent-is "jsx_element") parent typescript-ts-mode-indent-offset)
|
||||
((node-is "/") parent 0)
|
||||
((parent-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)
|
||||
(no-node parent-bol 0)))
|
||||
"Tree-sitter indent rules.")
|
||||
,@(when (eq language 'tsx)
|
||||
`(((parent-is "jsx_opening_element") parent typescript-ts-mode-indent-offset)
|
||||
((node-is "jsx_closing_element") parent 0)
|
||||
((parent-is "jsx_element") parent typescript-ts-mode-indent-offset)
|
||||
((node-is "/") parent 0)
|
||||
((parent-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)))
|
||||
(no-node parent-bol 0))))
|
||||
|
||||
(defvar typescript-ts-mode--keywords
|
||||
'("!" "abstract" "as" "async" "await" "break"
|
||||
|
@ -110,14 +115,16 @@
|
|||
"&&" "||" "!" "?.")
|
||||
"TypeScript operators for tree-sitter font-locking.")
|
||||
|
||||
(defvar typescript-ts-mode--font-lock-settings
|
||||
(defun typescript-ts-mode--font-lock-settings (language)
|
||||
"Tree-sitter font-lock settings.
|
||||
Argument LANGUAGE is either `typescript' or `tsx'."
|
||||
(treesit-font-lock-rules
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'comment
|
||||
`((comment) @font-lock-comment-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'constant
|
||||
`(((identifier) @font-lock-constant-face
|
||||
|
@ -125,13 +132,13 @@
|
|||
|
||||
[(true) (false) (null)] @font-lock-constant-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'keyword
|
||||
`([,@typescript-ts-mode--keywords] @font-lock-keyword-face
|
||||
[(this) (super)] @font-lock-keyword-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'string
|
||||
`((regex pattern: (regex_pattern)) @font-lock-string-face
|
||||
|
@ -139,7 +146,7 @@
|
|||
(template_string) @js--fontify-template-string
|
||||
(template_substitution ["${" "}"] @font-lock-builtin-face))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'declaration
|
||||
`((function
|
||||
|
@ -177,7 +184,7 @@
|
|||
(identifier) @font-lock-function-name-face)
|
||||
value: (array (number) (function))))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'identifier
|
||||
`((nested_type_identifier
|
||||
|
@ -208,7 +215,7 @@
|
|||
(_ (_ (identifier) @font-lock-variable-name-face))
|
||||
(_ (_ (_ (identifier) @font-lock-variable-name-face)))]))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'expression
|
||||
'((assignment_expression
|
||||
|
@ -223,7 +230,7 @@
|
|||
(member_expression
|
||||
property: (property_identifier) @font-lock-function-name-face)]))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'pattern
|
||||
`((pair_pattern
|
||||
|
@ -231,7 +238,7 @@
|
|||
|
||||
(array_pattern (identifier) @font-lock-variable-name-face))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'jsx
|
||||
`((jsx_opening_element
|
||||
|
@ -248,31 +255,31 @@
|
|||
|
||||
(jsx_attribute (property_identifier) @font-lock-constant-face))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:feature 'number
|
||||
`((number) @font-lock-number-face
|
||||
((identifier) @font-lock-number-face
|
||||
(:match "^\\(:?NaN\\|Infinity\\)$" @font-lock-number-face)))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:feature 'operator
|
||||
`([,@typescript-ts-mode--operators] @font-lock-operator-face
|
||||
(ternary_expression ["?" ":"] @font-lock-operator-face))
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:feature 'bracket
|
||||
'((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:feature 'delimiter
|
||||
'((["," "." ";" ":"]) @font-lock-delimiter-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:feature 'escape-sequence
|
||||
:override t
|
||||
'((escape_sequence) @font-lock-escape-face)
|
||||
|
||||
:language 'tsx
|
||||
:language language
|
||||
:override t
|
||||
:feature 'property
|
||||
`((pair value: (identifier) @font-lock-variable-name-face)
|
||||
|
@ -280,17 +287,71 @@
|
|||
((shorthand_property_identifier) @font-lock-property-face)
|
||||
|
||||
((shorthand_property_identifier_pattern)
|
||||
@font-lock-property-face)))
|
||||
"Tree-sitter font-lock settings.")
|
||||
@font-lock-property-face))))
|
||||
|
||||
;;;###autoload
|
||||
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
|
||||
|
||||
;;;###autoload
|
||||
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-ts-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode typescript-ts-mode prog-mode "TypeScript"
|
||||
(define-derived-mode typescript-ts-base-mode prog-mode "TypeScript"
|
||||
"Major mode for editing TypeScript."
|
||||
:group 'typescript
|
||||
:syntax-table typescript-ts-mode--syntax-table
|
||||
|
||||
;; Comments.
|
||||
(setq-local comment-start "// ")
|
||||
(setq-local comment-end "")
|
||||
(setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")
|
||||
(setq-local comment-end-skip
|
||||
(rx (* (syntax whitespace))
|
||||
(group (or (syntax comment-end)
|
||||
(seq (+ "*") "/")))))
|
||||
|
||||
;; Electric
|
||||
(setq-local electric-indent-chars
|
||||
(append "{}():;," electric-indent-chars))
|
||||
|
||||
;; Navigation.
|
||||
(setq-local treesit-defun-type-regexp
|
||||
(regexp-opt '("class_declaration"
|
||||
"method_definition"
|
||||
"function_declaration"
|
||||
"lexical_declaration")))
|
||||
;; Imenu.
|
||||
(setq-local imenu-create-index-function #'js--treesit-imenu)
|
||||
|
||||
;; Which-func (use imenu).
|
||||
(setq-local which-func-functions nil))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode typescript-ts-mode typescript-ts-base-mode "TypeScript"
|
||||
"Major mode for editing TypeScript."
|
||||
:group 'typescript
|
||||
:syntax-table typescript-ts-mode--syntax-table
|
||||
|
||||
(when (treesit-ready-p 'typescript)
|
||||
(treesit-parser-create 'typescript)
|
||||
|
||||
;; Indent.
|
||||
(setq-local treesit-simple-indent-rules
|
||||
(typescript-ts-mode--indent-rules 'typescript))
|
||||
|
||||
;; Font-lock.
|
||||
(setq-local treesit-font-lock-settings
|
||||
(typescript-ts-mode--font-lock-settings 'typescript))
|
||||
(setq-local treesit-font-lock-feature-list
|
||||
'((comment declaration)
|
||||
(keyword string)
|
||||
(constant expression identifier number pattern property)
|
||||
(bracket delimiter)))
|
||||
|
||||
(treesit-major-mode-setup)))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode tsx-ts-mode typescript-ts-base-mode "TypeScript[TSX]"
|
||||
"Major mode for editing TypeScript."
|
||||
:group 'typescript
|
||||
:syntax-table typescript-ts-mode--syntax-table
|
||||
|
@ -301,43 +362,27 @@
|
|||
;; Comments.
|
||||
(setq-local comment-start "// ")
|
||||
(setq-local comment-end "")
|
||||
(setq-local comment-start-skip (rx (group "/" (or (+ "/") (+ "*")))
|
||||
(* (syntax whitespace))))
|
||||
(setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")
|
||||
(setq-local comment-end-skip
|
||||
(rx (* (syntax whitespace))
|
||||
(group (or (syntax comment-end)
|
||||
(seq (+ "*") "/")))))
|
||||
|
||||
;; Electric
|
||||
(setq-local electric-indent-chars
|
||||
(append "{}():;," electric-indent-chars))
|
||||
|
||||
;; Indent.
|
||||
(setq-local treesit-simple-indent-rules typescript-ts-mode--indent-rules)
|
||||
|
||||
;; Navigation.
|
||||
(setq-local treesit-defun-type-regexp
|
||||
(rx (or "class_declaration"
|
||||
"method_definition"
|
||||
"function_declaration"
|
||||
"lexical_declaration")))
|
||||
(setq-local treesit-simple-indent-rules
|
||||
(typescript-ts-mode--indent-rules 'tsx))
|
||||
|
||||
;; Font-lock.
|
||||
(setq-local treesit-font-lock-settings typescript-ts-mode--font-lock-settings)
|
||||
(setq-local treesit-font-lock-settings
|
||||
(typescript-ts-mode--font-lock-settings 'tsx))
|
||||
(setq-local treesit-font-lock-feature-list
|
||||
'(( comment declaration)
|
||||
( keyword string)
|
||||
( constant expression identifier jsx number pattern property)
|
||||
( bracket delimiter)))
|
||||
;; Imenu.
|
||||
(setq-local imenu-create-index-function #'js--treesit-imenu)
|
||||
|
||||
;; Which-func (use imenu).
|
||||
(setq-local which-func-functions nil)
|
||||
'((comment declaration)
|
||||
(keyword string)
|
||||
(constant expression identifier jsx number pattern property)
|
||||
(bracket delimiter)))
|
||||
|
||||
(treesit-major-mode-setup)))
|
||||
|
||||
|
||||
(provide 'typescript-ts-mode)
|
||||
|
||||
;;; typescript-ts-mode.el ends here
|
||||
|
|
|
@ -936,7 +936,12 @@ when the tab is current. Return the result as a keymap."
|
|||
(hpos (progn
|
||||
(add-face-text-property 0 (length rest) 'tab-bar t rest)
|
||||
(string-pixel-width rest)))
|
||||
(str (propertize " " 'display `(space :align-to (- right (,hpos))))))
|
||||
(str (propertize " " 'display
|
||||
;; The `right' spec doesn't work on TTY frames
|
||||
;; when windows are split horizontally (bug#59620)
|
||||
(if window-system
|
||||
`(space :align-to (- right (,hpos)))
|
||||
`(space :align-to (,(- (frame-inner-width) hpos)))))))
|
||||
`((align-right menu-item ,str ignore))))
|
||||
|
||||
(defun tab-bar-format-global ()
|
||||
|
@ -1083,7 +1088,7 @@ tab bar might wrap to the second line when it shouldn't.")
|
|||
(setf (substring name ins-pos ins-pos) space)
|
||||
(setq curr-width (string-pixel-width name))
|
||||
(if (and (< curr-width width)
|
||||
(not (eq curr-width prev-width)))
|
||||
(> curr-width prev-width))
|
||||
(setq prev-width curr-width
|
||||
prev-name name)
|
||||
;; Set back a shorter name
|
||||
|
@ -1096,7 +1101,7 @@ tab bar might wrap to the second line when it shouldn't.")
|
|||
(setf (substring name del-pos1 del-pos2) "")
|
||||
(setq curr-width (string-pixel-width name))
|
||||
(if (and (> curr-width width)
|
||||
(not (eq curr-width prev-width)))
|
||||
(< curr-width prev-width))
|
||||
(setq prev-width curr-width)
|
||||
(setq continue nil)))
|
||||
(let* ((len (length name))
|
||||
|
@ -1941,7 +1946,7 @@ If GROUP-NAME is the empty string, then remove the tab from any group.
|
|||
While using this command, you might also want to replace
|
||||
`tab-bar-format-tabs' with `tab-bar-format-tabs-groups' in
|
||||
`tab-bar-format' to group tabs on the tab bar.
|
||||
At the end it runs the hook `tab-bar-tab-post-change-group-functions'."
|
||||
Runs the hook `tab-bar-tab-post-change-group-functions' at the end."
|
||||
(interactive
|
||||
(let* ((tabs (funcall tab-bar-tabs-function))
|
||||
(tab-number (or current-prefix-arg
|
||||
|
|
|
@ -976,7 +976,7 @@ underlying shell."
|
|||
'term-mode))
|
||||
(buffer-list))))
|
||||
(easy-menu-change
|
||||
'("Terminal")
|
||||
nil
|
||||
"Terminal Buffers"
|
||||
(mapcar
|
||||
(lambda (buffer)
|
||||
|
@ -986,7 +986,9 @@ underlying shell."
|
|||
(lambda ()
|
||||
(interactive)
|
||||
(switch-to-buffer buffer))))
|
||||
buffer-list)))))
|
||||
buffer-list)
|
||||
nil
|
||||
term-terminal-menu))))
|
||||
|
||||
(easy-menu-define term-signals-menu
|
||||
(list term-mode-map term-raw-map term-pager-break-map)
|
||||
|
|
|
@ -19535,7 +19535,8 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
|
|||
/* Check whether the buffer to be displayed contains long lines. */
|
||||
if (!NILP (Vlong_line_threshold)
|
||||
&& !current_buffer->long_line_optimizations_p
|
||||
&& CHARS_MODIFF - CHARS_UNCHANGED_MODIFIED > 8)
|
||||
&& (CHARS_MODIFF - CHARS_UNCHANGED_MODIFIED > 8
|
||||
|| current_buffer->clip_changed))
|
||||
{
|
||||
ptrdiff_t cur, next, found, max = 0, threshold;
|
||||
threshold = XFIXNUM (Vlong_line_threshold);
|
||||
|
|
Loading…
Add table
Reference in a new issue