Hacker News new | past | comments | ask | show | jobs | submit login

Hey, I found that code hard to follow, with the if-then-elses nested 4 deep. A refactor, pretty much untested since I don't use ansi-term:

    (defun visit-ansi-term ()
      "If the current buffer is:
         1) a running ansi-term named *ansi-term*, rename it.
         2) a stopped ansi-term, kill it and create a new one.
         3) a non ansi-term, go to an already running ansi-term
            or start a new one while killing a defunct one."
      (interactive)
      (let ((is-term      (string= "term-mode" major-mode))
            (is-ansi-term (string= "*ansi-term*" (buffer-name)))
            (is-running   (term-check-proc (buffer-name)))
            (anon-term    (get-buffer "*ansi-term*")))
        (cond
         ((and is-term is-running is-ansi-term)
          (call-interactively 'rename-buffer))
         ((and anon-term (if is-term
                             (and is-running (not is-ansi-term))
                           (term-check-proc "*ansi-term*")))
          (switch-to-buffer "*ansi-term*"))
         (t
          (cond ((and is-term (not is-running))
                 (kill-buffer (buffer-name)))
                ((and anon-term (not (term-check-proc "*ansi-term*")))
                 (kill-buffer "*ansi-term*")))
          (ansi-term "/usr/local/bin/zsh")))))



Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: