|
261 | 261 | "Jump to the location." |
262 | 262 | (interactive) |
263 | 263 | (-when-let* ((workspace lsp--cur-workspace) |
264 | | - (node (cquery-tree--node-at-point))) |
265 | | - (with-selected-window cquery-tree--origin-win |
| 264 | + (node (cquery-tree--node-at-point)) |
| 265 | + (win (get-buffer-window cquery-tree--origin-buffer))) |
| 266 | + (with-selected-window win |
266 | 267 | (when split-fn |
267 | 268 | (funcall split-fn)) |
268 | 269 | (find-file (car (cquery-tree-node-location node))) |
|
280 | 281 | "Switch window and jump to the location." |
281 | 282 | (interactive) |
282 | 283 | (cquery-tree-press) |
283 | | - (select-window cquery-tree--origin-win)) |
| 284 | + (when-let* ((win (get-buffer-window cquery-tree--origin-buffer))) |
| 285 | + (select-window win))) |
284 | 286 |
|
285 | 287 | (defun cquery-tree-press-and-horizontal-split () |
286 | 288 | "Split window horizontally and jump to the location." |
287 | 289 | (interactive) |
288 | 290 | (cquery-tree-press #'split-window-horizontally) |
289 | | - (select-window cquery-tree--origin-win)) |
| 291 | + (when-let* ((win (get-buffer-window cquery-tree--origin-buffer))) |
| 292 | + (select-window win))) |
290 | 293 |
|
291 | 294 | (defun cquery-tree-press-and-vertical-split () |
292 | 295 | "Split window vertically and jump to the location." |
293 | 296 | (interactive) |
294 | 297 | (cquery-tree-press #'split-window-vertically) |
295 | | - (select-window cquery-tree--origin-win)) |
| 298 | + (when-let* ((win (get-buffer-window cquery-tree--origin-buffer))) |
| 299 | + (select-window win))) |
296 | 300 |
|
297 | 301 | (defun cquery-tree-next-line (&optional arg) |
298 | 302 | (interactive "p") |
|
343 | 347 | (defun cquery-tree-quit () |
344 | 348 | (interactive) |
345 | 349 | (when-let* ((buf cquery-tree--origin-buffer) |
346 | | - (opoint cquery-tree--opoint)) |
| 350 | + (opoint cquery-tree--opoint) |
| 351 | + (_ (window-live-p cquery-tree--origin-win))) |
347 | 352 | (with-selected-window cquery-tree--origin-win |
348 | 353 | (switch-to-buffer buf) |
349 | 354 | (goto-char opoint))) |
350 | 355 | (quit-window)) |
351 | 356 |
|
| 357 | +(defun cquery-tree-yank-path () |
| 358 | + (interactive) |
| 359 | + (--if-let (-some-> (cquery-tree--node-at-point) (cquery-tree-node-location) (car) (kill-new)) |
| 360 | + (message (format "Yanked path: %s" (propertize it 'face 'font-lock-string-face))) |
| 361 | + (user-error "There is nothing to copy here"))) |
| 362 | + |
352 | 363 | ;; --------------------------------------------------------------------- |
353 | 364 | ;; Mode |
354 | 365 | ;; --------------------------------------------------------------------- |
355 | 366 |
|
356 | 367 | (defvar cquery-tree-mode-map |
357 | 368 | (let ((map (make-sparse-keymap))) |
358 | | - (define-key map (kbd "<tab>") 'cquery-tree-toggle-expand) |
359 | | - (define-key map [mouse-1] 'cquery-tree-toggle-expand) |
360 | | - (define-key map (kbd "c") 'cquery-tree-toggle-calling) |
361 | | - (define-key map (kbd "f") 'cquery-tree-press) |
362 | | - (define-key map (kbd "h") 'cquery-tree-collapse-or-select-parent) |
363 | | - (define-key map (kbd "j") 'cquery-tree-next-line) |
364 | | - (define-key map (kbd "k") 'cquery-tree-prev-line) |
365 | | - (define-key map (kbd "J") 'cquery-tree-next-sibling) |
366 | | - (define-key map (kbd "K") 'cquery-tree-prev-sibling) |
367 | | - (define-key map (kbd "l") 'cquery-tree-expand-or-set-root) |
368 | | - (define-key map (kbd "oh") 'cquery-tree-press-and-horizontal-split) |
369 | | - (define-key map (kbd "ov") 'cquery-tree-press-and-vertical-split) |
370 | | - (define-key map (kbd "oo") 'cquery-tree-press-and-switch) |
371 | | - (define-key map (kbd "q") 'cquery-tree-quit) |
372 | | - (define-key map (kbd "Q") 'quit-window) |
373 | | - (define-key map (kbd "RET") 'cquery-tree-press-and-switch) |
374 | | - (define-key map (kbd "<left>") 'cquery-tree-collapse-or-select-parent) |
375 | | - (define-key map (kbd "<right>") 'cquery-tree-expand-or-set-root) |
| 369 | + (define-key map (kbd "<tab>") #'cquery-tree-toggle-expand) |
| 370 | + (define-key map [mouse-1] #'cquery-tree-toggle-expand) |
| 371 | + (define-key map (kbd "c") #'cquery-tree-toggle-calling) |
| 372 | + (define-key map (kbd "f") #'cquery-tree-press) |
| 373 | + (define-key map (kbd "h") #'cquery-tree-collapse-or-select-parent) |
| 374 | + (define-key map (kbd "j") #'cquery-tree-next-line) |
| 375 | + (define-key map (kbd "k") #'cquery-tree-prev-line) |
| 376 | + (define-key map (kbd "J") #'cquery-tree-next-sibling) |
| 377 | + (define-key map (kbd "K") #'cquery-tree-prev-sibling) |
| 378 | + (define-key map (kbd "l") #'cquery-tree-expand-or-set-root) |
| 379 | + (define-key map (kbd "oh") #'cquery-tree-press-and-horizontal-split) |
| 380 | + (define-key map (kbd "ov") #'cquery-tree-press-and-vertical-split) |
| 381 | + (define-key map (kbd "oo") #'cquery-tree-press-and-switch) |
| 382 | + (define-key map (kbd "q") #'cquery-tree-quit) |
| 383 | + (define-key map (kbd "Q") #'quit-window) |
| 384 | + (define-key map (kbd "yy") #'cquery-tree-yank-path) |
| 385 | + (define-key map (kbd "RET") #'cquery-tree-press-and-switch) |
| 386 | + (define-key map (kbd "<left>") #'cquery-tree-collapse-or-select-parent) |
| 387 | + (define-key map (kbd "<right>") #'cquery-tree-expand-or-set-root) |
376 | 388 | map) |
377 | 389 | "Keymap for `cquery-tree-mode'.") |
378 | 390 |
|
|
0 commit comments